Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Modx revo изменить id ресурса: Работа с ресурсами через API в MODX Revolution — изменение, создание, выборка

Содержание

Урок 10. Вывод контента сниппетом getResources MODX

Что такое getResources?

getResources это сниппет MODX Revolution, который извлекает содержимое полей из других ресурсов и выводит его в любом удобном для вас виде. Если вы знакомы MODX Evolution, getResources может считаться заменой Ditto.

Почему нужно использовать именно getResources?

getResources отлично подходит для случаев, где вам необходимо объединить и вывести информацию от различных ресурсов в одном месте и в необходимом формате. Наиболее очевидным применением сниппета getResources будет создание основной блоговой страницы сайта, другие возможные блоки использования — слайдеры, страница портфолио, новостная лента…

Как использовать сниппет getResources?

Ниже приведён список шагов описывающих процесс использования сниппета getResources. После того, как вы привыкните к его использованию, большинство описанных шагов будут происходить интуитивно, но так как вы только начинаете, то хорошо иметь под рукой некоторое подобие плана действий. Вот один описанный мною:

  • Для начала установите сниппет getResources
  • Далее необходимо решить как структурировать страницы, контент которых мы собираемся вывести и какой будет шаблон вывода страниц. Всё будет отличаться в зависимости от структуры вашего сайта и целей. Вы можете выводить отдельные страницы на вашем дереве сайтов либо размещать дочерние страницы в контейнере и использовать ИД контейнера, чтобы их вывести и др.
  • Определиться какие поля будут показаны на выведенной странице. Вы можете, например, показать только список заголовков на вашем сайдбаре или показать только заголовок страницы и содержание, либо показать несколько полей и переменных шаблона, и т.д.
  • Если у вас еще нет шаблона, то создайте шаблон для вашей странице вывода контента.
  • Сделайте простой вызов getResources чтобы убедиться в том, что контент извлекается и выводится.
  • Создайте чанк-шаблон для вывода полей, которые вы будете показывать на вашей странице.
  • Добавьте нужные параметры в вызове сниппета getResources

?
Я детально и последовательно опишу каждый из описанных выше шагов. Если вы уже разбираетесь в построении шаблонов и разбираетесь в переменных шаблона и других вопросах шаблонизации, то можете смело переходить прямо к 5 шагу.

1. Установка getResources

Я уже установил getResources и мы будем его использовать для создания страницы статьи. Мы будем использовать для шаблона страницы блога шаблон 7 in 1 Business Success Site студии Themeforest. Страница блога (частично) будет выглядеть следующим образом:

Как видите, у нас есть страница с несколькими компонентами – заголовок, изображение, дата публикации, изображение и отрывок содержания со ссылкой “читать остальную часть записи” к целому посту. Этот шаблон мы будем использовать для объединённого вывода наших статей.

2.Подготовьте шаблон для вывода отдельной статьи:

После установки сниппета getResources, смотрим на оформить стуктуру страниц отдельного вывода статей. Для этого я буду использовать шаблон отдельного поста нашей темы, который я взял из файла single.html.  Я уже портировал данный шаблон в свой шаблон и назвал его “7in1 Single Article”.  Вот как мой “7in1 Single Article” шаблон будет выглядеть:

Вы узнаете чанки шапки и подвала, мы уже их использовали, я добавил всего лишь два дополнительных чанка, один для содержимого сайдбара (7in1-articles-sidebar) и одного временного чанка (articleCommentStuff_temp) для секции комментирования, чтобы не нагромождать все элементы. В данный момент эти два чанка содержат статический контент нашего шаблона, но в следующий уроках мы сделаем их динамичными. Так же я добавил две дополнительных переменных шаблона, одну для вывода текста в теге изображения (article_image_title) и другую для самого изображения (article_image – {тип ввода – изображение, тип вывода – текст}).  Также я добавил другие поля, такие как ИД поста, урлы и др., многое из этого должно быть вам понятно из предыдущих уроков.

Последним моментом, на который я хотел обратить ваше внимание —  вывод поля даты. Он производится через publishedon используя при этом функцию PHP strtotime для показа даты в необходимом виде (как в шаблоне нашей темы). Более детально про функцию strtotime и форматирование дат — в конце этого поста ссылки.

Как я уже говорил, содержимое сайдбаров, теги и секция комментариев – статичны и мы над этим вопросом поработаем в следующих уроках.

3. Добавьте статьи


Отлично, теперь у нас есть шаблон для отдельных страниц и можно двигаться дальше. Создадим несколько статей для нашего сайта, используя этот шаблон, таким образом мы сможем проверить наш вызов getResources.  В моём случае я создал контейнер Articles и установил шаблон для него Base Template, который я поменяю позже, когда буду готов выводить объединённый контент. Всередине я размещу парочку контейнеров для каждой категории или темы, которую покрывают мои статьи… например – новости, MODX уроки и др.

Размышляя об этом, я понимаю, что не хочу, чтобы мои статьи выводились в меню, также я хочу, чтобы они все использовали шаблон 7in1 Single Article. В рассуждениях о том, как же лучше сделать легче мою работу или работу клиента, я решил, что так как большинство новых ресурсов будут статьями, то есть здравый смысл в том, чтобы сделать соответствующими настройки по умолчанию для типа содержимого. Другими словами, сделайте все новые ресурсы с этого момента по умолчанию использующими шаблон 7in1 Single Article, а также они должны быть скрытыми от меню. Конечно же, можно отредактировать один за одним все ресурсы и это не будет проблемой, так как остальные мои страницы уже созданы и большинство новых ресурсов буду статьями. Итак, чтобы сделать это, идём System->System Settings, далее фильтр « area» и выбираем “Site”.  Нужные настройки – Default TemplateHide from Menus Default.

 

После внесения изменений наблюдаем такую картину:

 

Теперь, при создании нового ресурса, он берёт шаблон отдельной статьи по умолчанию и уже поставлена галочка в Скрыть от меню (Hide From Menus).

Заметка: Обратите внимание, что такое поведение будет в случае, когда документ создаётся в корне. Если же вы зайдёте в любой контейнер и нажмёте «Создать документ здесь» (Create a Document Here), то он возмёт шаблон контейнера и скроет от меню. Поэтому будьте внимательны к настройкам каждого ресурса.

Давайте продолжим и создадим около 8 простых статей для нашего сайта, чтобы сниппет мог их объединить и вывести getResources. Я беру сгенерированный текст отсюда http://www.malevole.com/mv/misc/text/ и произовальные картинки из Гугла.  Позже при наличии времени я заменю этот текст другим необходимым, здесь же в целях обучения будет достаточно наличия любого текста и картинок. Вот как выглядит дерево моего сайта в данный момент:

 

Теперь можно перейти к следующему этапу, который состоит в том, что мы созданим шаблон для нашей основной страницы блога и далее сформируем вызов сниппета getResources.

4. Подготовка страницы агрегированного контента.

Если вы используете тот же шаблон, что и я, то посмотрите на код и вы увидите, что он почти не отличается от кода для обычного шаблона, но без секции комментирования и других аналогичных элементов, поэтому можно использовать те же чанки и код, что мы использовали ранее. Вот как будет выглядеть шаблон 7in1 Aggregated Articles:

Теперь я использую данный шаблон для вывода содержимого ресурсов — дочерних элементов следующих контейнеров – контейнер Articles и каждого из контейнеров для категорий, в моём случае — MODX NewsMODX Web Development, MODX Tips and Tricks и Other Stuff.  Теперь одна из категорий будет выглядить приблизительно так:

 

Давайте перейдём к выводу нашего контента.

5. Базовый вызов сниппета getResources

Перед тем, как мы начнём формировать вызов сниппета и работать с getResources, важно познакомится с несколькими вещами, которые могут легко ввести в заблуждение, если вы до этого не были знакомы с getResources и даже если вы знакомы. Я называю их мои getResources уловки!

  • Вызов getResources по-умолчанию не содержит шаблона вывода. Вам необходим шаблон — tpl-чанк, чтобы определить вывод содержимого ресурса (ресурсов).
  • getResources по-умолчанию не покажет ресурсы, которые скрыты от меню, поэтому вам необходимо задать &showHidden=`1`
  • getResources по-умолчанию не включит поля содержимого ваших ресурсов, поэтому вам необходимо задать &includeContent=`1`
  • В дополнение, если даже вы установите includeContent, сниппет getResources по-умолчанию не включит переменные шаблона, поэтому вам необходимо задать &includeTVs=`1` и &processTVs=`1`
  • Если вы зададите includeTVs и processTVs, сниппет getResources будет ожидать, что в вашем шаблоне tpl,  вы будете обозначать ваши переменные шаблона префиксом “tv.”. Вы можете перезаписать это добавив &tvPrefix=` ` и далее использовать только лишь имя переменной шаблона как заполнитель.
  • Если вы выводите необходимые ресурсы через параметр &resources=`1,2,3`, где 1,2,3 — выводимые ресурсы, то не забудьте обязательно указать параметр &parents=`-1`

Есть еще много моментов, но это основные, в которых легко допустить ошибку.

Как и у всех других сниппетов, вызов getResources выглядит так:


[[!getResources]]

Базовый вызов позволит вам убедиться в том, что сниппет работает на нашем сайте. Если я размещу данный вызов на странице Articles page я ничего не получу. Вы можете подумать, что происходит что-то неправильное, но этому есть простое объяснение. Помните наш список находок? По умолчанию getResources ожидает, что ваши ресурсы не будут скрыты от меню, поэтому если вы хотите показать скрытые ресурсы вам необходимо добавить параметр &showHidden и установить его значение в true. Поэтому отредактируйте ваш вызов:


[[!getResources? &showHidden=`1` ]]

Если я перегружу страницу, то вот что я получу:

 

Выглядит плохо, но это значит, что getResources работает и извлекает контент. Что нам сейчас нужно сделать, так это привести контент к нужному виду и определить какими должны быть наши параметры: например, какие контейнеры использовать для параметра parents, как глубоко в дереве ресурсов делать выборку самих ресурсов, какие поля каждого ресурса мы хотим извлекать на нашу страницу статей и т.д.

6. Создание шаблонирующего tpl чанка для getResources

Для вывода страницы в нужном нам виде, нам необходимо создать чанк для шаблонизации отдельных элементов, которые будет извлекать наш сниппет getResources.  Для этого, я возьму код из статического шаблона, который представляет каждый элемент поста и заменить статические элементы динамическим кодом.


?При работе с tpl-чанком мы используем синтаксис заполнителя [[+field_name]] для динамических кусков.

Итак берём HTML код для вывода поста блога в статическом коде файла шаблона blog.html:

Мы можем использовать данный код как базу нашего tpl чанка. Я заменю статические куски заполнителями. Для короткого содержимого поста я не хочу извлекать содержимое поля Content ресурса, мне нужна лишь короткая выдержка. Поэтому я буду использовать поле аннотация (Introtext) ресурса и далее выводить его, используя конструкцию [[+introtext]] можно также использовать Переменную шаблона [[+tv.tvname]]. Для вывода также можно использовать содержимое ресурса — поле Content. Я могу взять, например, первые 350 символов каждой статьи и вывести. Чтобы это сделать прикрепляю фильтр вывода :ellipsis=350 к моему заполнителю контента.

Помните о том, что мы оставляем секцию тегов статической в данный момент, потом к этому мы ещё вернёмся.

Теперь я могу сохранить этот код в чанк, который я назову articleTpl. Далее я изменю мой вызов getResources, добавив туда мой tpl-чанк.

Если мы перегрузим нашу страницу Articles, то сразу увидим разницу:

Картинка постепенно оживает!  Мы видим, что выводимый контент отображается с использованием правильного шаблона и мы можем нажать на заголовки, которые ведут на отдельные посты. Но еще предстоит еще много поработать.

Обратите внимание, что если у вас более 5 статей, то только 5 появятся на странице. Так происходит потому что по умолчанию getResources ограничен количеством извлекаемых страниц, которое равно 5.

Вы можете перезаписать данный параметр добавив &limit и указав необходимое количество статей. Я установлю количество статей равным 10, чтобы убедится, что у меня работает всё так как нужно.

Вспоминая наши уловки описанные выше, мы знаем причину того, что аннотации контента не показываются и причину того, что наши заполнители картинок пусты, потому что нам необходимо использовать includeContent, includeTVs и processTVs. Давайте изменим наш вызов и добавим следующие элементы:

Если мы обновим нашу страницу теперь, то увидим изображения и короткие в 350 символов аннотации извлекаемого содержимого, как я указал в шаблонирующем tpl-чанке:

 

Теперь наш контент извлекается и выводится нужнім образом, можем продолжить далее и улучшить наш вызов getResources, добавив другие параметры, которые нам могут понадобиться.

7. Добавьте другие параметры к вызову getResources

Итак мы добавили несколько параметров к нашему вызову и они помогают извлечь необходимые поля и вывести их соответствующим образом согласно нашего шаблона. Теперь мы можем продолжить и закончить формирование нашего вызова, добавив необходимые параметры. Полный список возможных параметров и их значение по умолчанию можно узнать на странице официальной документации getResources

Выбор параметров зависит от поведения сайта, которого нужно добится. В моём случае есть ещё парочка параметров, которые я хотел бы добавить.

Если вы взглянете на вывод, то заметите, что страница Articles извлекается на странице категории, то бишь MODX NewsMODX Web DevelopmentMODX Tips & Tricks и Other Stuff. Очевидно, что я этого не хочу. Вместо этого, я хочу обозначить, что эти субконтейнеры являются предками ресурсов, которые я хочу показать и я хочу проникать только на один уровень вниз до этих субконтейнеров. По умолчанию, getResources предполагает, что ресурс, в котором вы разместили вызов вашего сниппета – это родительский ресурс и он показывает все ресурсы под собой и их дочерние ресурсы на глубину равную 10.

Поэтому я изменю мой вызов и добавлю ID субконтейнеров тех ресурсов, которые я хочу включить и определю глубину отображения ресурсов:

Теперь данный вызов покажет только статьи сами по себе, а не их родительские контейнеры. Есть еще несколько спобов сделать так же. Например, если вы собираетесь добавить контейнеры других категорий в будущем и не хотите помнить о том, как возвращаться к вызову, чтобы добавить их ID к параметру &parents, то можете использовать &hideContainers=`1` и далее убрать или отредактировать параметр &depth, чтобы он отвечал структуре вашего сайта. В этом случае вы можете полностью убрать &parents, так как getResources будет считать, что вызов сниппета происходит в родительском ресурсе или для завершения редактирования задайте его значение равным [[*id]]:

Ну вот мы и закончили работу над нашим сниппетом getResources.  Надеюсь, вы нашли что-то для себя полезное и можете разобраться с расскрытым здесь вопросом и использовать это в построении ваших сайтов.

Домашнее задание:

Вот маленькое домашнее задание для вас, чтобы протестировать знания, приобретённые в ходе урока.

  • Поработайте над первой секцией сайдбара страницы articles, чтобы построить список и ссылки на категории статей. Можете использовать для этого Wayfinder или getResources, оставляю выбор за вами
  • После этого, необходимо, чтобы страницы, на которые вели ссылки данных категорий содержали агрегацию контента только этой категории. Это просто сделать.

Что дальше?

Вот вы и прошли 10 уроков курса MODX Revolution для новичков. Теперь стоит начать разбирать примеры Блога о MODX Revolution https://modx.ws/blog/blog-o-modx-revolution/. Рекомендую прочитать и разобрать статью Создание блога в MODX Revolution Буду рад ответить на любые вопросы и комментарии.

AdminTools | Документация | Зона разработки

Набор инструментов для администраторов и пользователей админки. Все описанные возможности управляются системными настройками.


Избранные элементы

У каждого типа элементов в тулбаре появилась звездочка, которая включает и отключает режим избранных элементов. В контекстное меню каждого элемента добавлены пункты «Добавить в избранное» и «Удалить из избранного». За внешний вид избранных элементов отвечает css класс «x-element-favorite». Чтобы изменить иконку, укажите класс иконки в системной настройке admintools_favorites_icon. Например, «icon-star» или «icon-heart». Названия иконом можно узнать на странице Font Awesome, только вместо «fa» нужно писать «icon».

Текущие состояния фильтров и элементов хранятся в поле Extended пользователя. Т.е. у каждого пользователя будут свои избранные элементы, посмотреть которые можно зайдя в настройки пользователя.


Журнал элементов

Журнал измененных элементов зачитывается из системной таблицы modx_manager_log.

Тут достаточно всё просто. Таблицу можно отфильтровать по пользователю, дате и названию элемента. Кликнув на элемент можно перейти в диалог для его редактирования.


Последнее состояние системных настроек

Эта возможность позволяет запоминать последнее состояние интерфейса системных настроек. Все знают, что системные настройки всегда открываются для ядра («core»). Теперь, если данная фича включена, то системные настройки откроются для того же пространства имён (namespace) и подраздела (area), которые были выбраны в прошлый раз. Эти настройки также индивидуальны для каждого пользователя.


Отключение проверки прав для пользователей при формировании дерева элементов

Это очень полезная настройка, которая позволяет сократить время загрузки дерева и уменьшить потребляемую память, так как элементы грузятся не в объекты, а в массив. Тут конечно все зависит от количества открытых разделов и папок в них. Чем больше их открыто, тем ощутимее разница. Разработчикам, которым не нужны права на элементы, такая оптимизация будет не лишней. Для пользователей с sudo правами проверки нет.

По-умолчанию, проверка включена.


Очистка кэша ресурса

Эта настройка отвечает за очистку кэша только сохраняемого ресурса, а не всего сайта. Идея взята у Василия, но логика немного другая. Я постарался сохранить изначальное назначение чекбокса «Очистить кэш». Если он не отмечен, то работает как и положено — ничего не очищается. Если он установлен и настройка admintools_clear_only resource_cache включена, то удаляется кэш только текущего ресурса. Если настройка выключена, то удаляется весь кэш. По-умолчанию она выключена.

При включении этой настройки важно понимать, что изменения конкретной страницы не отразятся на других кэшированных(!) страницах, где изменённая страница вызывается. Это может быть страница новостей или блок похожих статей. Хотя, как правило, такие страницы используют некэшированный вызов сниппетов. Именно поэтому MODX изначально удаляет кэш всех страниц.


Создание кэша ресурса

Данная настройка работает вместе с предыдущей. Если отметить чекбокс «Создать кэш», то при сохранении ресурса кэш страницы будет создан заново. В противном случае он будет создан при первом просмотре страницы на сайте.



Добавил возможность убирать описание компонентов в меню «Приложения», чтобы немного уменьшить его. Есть, конечно, системная настройка topmenu_show_descriptions. Но она отключает описание у всех пунктов меню. Не знаю как другим, а мне нравится меню с описанием — функционально и эстетично. Поэтому не хочется убирать описание у всех. По-умолчанию включена.


Аутентицикация в админку через email

Данная фича даёт возможность залогиниться в админке просто указав имя пользователя или email. На почту придет ссылка, кликнув на которую в течение определённого времени произойдет аутентификация в админке.

Настройка

Для начала нужно её включить в системных настройках, по-умолчанию она выключена. Там же нужно указать id страницы, на которой будет размещаться форма. Удобнее всего создать новую страницу с пустым шаблоном, на которой вызывать сниппет adminLogin, отвечающий за авторизацию.


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=[[++modx_charset]]" />
    <meta name="robots" content="noindex" />
    <base href="[[++site_url]]" />
    <title>[[*pagetitle]]</title>
</head>  
<body>
    [[!adminLogin]]
</body>
</html>

Так получается максимально похоже на админку. Сама форма находится в чанке tpl.login.form.


Как это работает

Для аутентификации нужно ввести логин или email. На указанный (существующий в базе) или найденный по логину email будет выслана ссылка с одноразовым токеном. Он будет активен согласно системной настройке authorization_ttl. По-умолчанию, 10 минут. По истечению этого времени он аннулируется. Также как и при аутентификации через него. Второй раз зайти по одной и той же ссылке не получится.

Внимание!

Пользователь может залогиниться только с того же IP адреса и в том же браузере, с которого был отправлен запрос.


Аутентификация доступна только для тех пользователей, которым разрешен доступ в админку. Повторно отправить запрос можно только после деактивации текущего токена, что снижает риск брут-форс атаки.

Аутентификация происходит через стандартный login-процессор, поэтому все события отрабатывают как положено.


Пользовательские заметки

Пользовательские заметки — это такой маленький эвернотик. В него можно сохранять какие-то наработки, шаблоны и черновики. Особенно должно быть удобно для командной работы. Для личного использования пригодятся приватные заметки, которые может видеть только пользователь их создавший.


Заметки можно импортировать и экспортировать, что позволяет переносить базу знаний и различных заготовок с сайта на сайт.


Как это работает

В меню пользователя добавлен пункт «Заметки». При нажатии на него открывается отдельное окно с заметками. Чтобы добавить заметку, нужно нажать кнопку + на панели инструментов и в открывшемся диалоге заполнить нужные поля.

Изменить заметку можно как вызвав диалог редактирования (двойной клик, кнопка в строке или контекстное меню), так и прямо в нижней части списка заметок. Кликнув по заметке в списке, в нижней части окна появляется её текст. При изменении текста внизу окна появляются 2 кнопки — Сохранить и Отменить. Нижную часть окна можно увеличить или уменьшить с помощью стандартного разделителя — кликаете на его и тянете вверх или низ.

Чтобы проще было искать заметки, добавлен поиск с возможностью выбора места — в наименованиях заметки, в содержании, в тегах или везде сразу.


Связь ресурсов и шаблонов

Если включить эту настройку, то у шаблонов появится вкладка с зависимыми ресурсами, использующими текущий шаблон. А у ресурса — ссылка на текущий шаблон. Помогает при разработке.



Основная задача данной функции — исключить пропадание меню при малейшем отклонении мыши. Если настройка меню включена, то меню открывается и закрывается с небольшой задержкой.


Права доступа к ресурсам на сайте

Этот альтернативный механизм прав доступа упрощает настройку доступа пользователей к страницам сайта. Права указываются для каждой страницы.


Подробнее можно почитать тут.


Таблица плагинов

Эта таблица представляет собой плоский список плагинов системы, для которых определены события. Она позволяет увидеть какие плагины для каких событий сработают и в каком порядке.

В этом интерфейсе доступны следующие операции:

  • Создание плагина.
  • Отключение плагина.
  • Удаление плагина.
  • Привязка к новому событию.
  • Отвязка от текущего события.
  • Изменение вида списка — группировка по плагинам или по событиям.
  • Фильтр списка по плагинам или событиям.

Более подробнее можно почитать тут.


Цветовые темы

Цветовые темы помогут немного разнообразить админку. В базовую версию входят 2 цветовые темы — «dark» и «purple». Укажите желаемую тему в системной настройке admintools_theme.

Темы также можно создавать самостоятельно. Для этого скопируйте файл purple.css, находящийся в папке assets/components/admintools/css/mgr/themes и измените цвета по желанию.

Правила именования следующие — в системной настройке admintools_theme указываете название темы, которое будет соответствовать названию файла, а в файле стилей имя класса темы должно состоять из названия темы и суффикса «-theme». Вот пример для темы dark:


.dark-theme #modx-navbar {
    background-color: #272e3c !important;
    background-image: none;
    box-shadow: none;
}
...


Поля ресурса с изменяемой высотой

Форма ресурса содержит 3 поля textarea — описание, аннотация и содержимое. Последнее достаточно большое. Плюс обычно к нему подключают редактор. А вот первые два для больших текстов не очень подходят. Для решения этой проблемы AdminTools добавляет к ним CSS стиль для вертикального изменения размера.



Эта возможность подойдёт для тех, кто привык работать с правым сайдбаром. Укажите значение right в системной настройке modx_tree_position. Для левого положения укажите left или оставьте настройку пустой.

В некоторых компонентах эта возможность не работает.




Пользовательские файлы стилей и скриптов

Возможность подключения собственных css и js файлов в интерфейсе менеджера обеспечивают 2 системные настройки — admintools_custom_css и admintools_custom_js. Если файлов несколько, их нужно перечислить через запятую. Вот один из примеров использования.


Запрет действий с пакетами

Чтобы запретить действия над пакетами в системной настройке admintools_package_actions укажите соответствующие права в формате:


{package1:{action1:false, action2:"Сообщение для action2.", message:"Сообщение по-умолчанию."},
package2:{...}}

Имя пакета регистрозависимо. Доступные действия:

  • install — установка
  • reinstall — переустановка
  • uninstall — деинсталляция
  • update — обновление
  • remove — удаление
  • checkupdate проверить обновление
  • details — посмотреть детали
  • all — «Все действия»
  • message — сообщение

Чтобы запретить действие, можно указать для него или false или сообщение. В первом случае сообщение будет искаться в ключе message. Этот ключ пригодится, если нужно вывести одно сообщение для всех действий. Таким образом, для каждого действия можно указать своё сообщение или для всех одно общее или вперемешку — для некоторых определить, для остальных общее.


# Запретить удаление пакета
{Ace:{remove:"Удаление запрещено!"}}

# Запретить удаление и деинсталяцию пакета
{Ace:{uninstall:false, remove:false, message:"Действие запрещено!"}}

# Запретить установку определённого пакета
{Ace:{install:"Данный пакет устанавливать запрещено по причине несовместимости!"}}

# Запретить все действия для пакета. 
{Ace:{all:"Все действия с этим пакетом запрещены!"}}

# Разрешить только некоторые действия для пакета.
{Ace:{details:true, all:"Это действие запрещено!"}}


Подгрузка пользователя только текущего контекста

В базовой версии MODX в случае, когда пользователь залогинен в админке (контекст «mgr»), а на сайте находится как гость, MODX загружает в $modx->user пользователя из админки. Хотя вы можете ожидать анонима. Чтобы отключить это поведение, включите системную настройку admintools_only_current_context_user.


Блокировка админ панели

Позволяет блокировать админку без разлогинивания. Возможны 2 режима работы — автоматическая блокировка при отсутвии активности и ручная. Первая включается в системной настройке admintools_lock_timeout. В ней нужно указать количество минут бездействия для автоблокировки. А самостоятельно заблокировать админку можно в верхнем меню пользователя выбрав пункт «Заблокировать».

Разблокировать админку можно указав пароль пользователя или код, указанный в системной настройке admintools_unlock_code.


Индикатор новых сообщений


Отображает в верхнем меню количество непрочитанных сообщений. Проверка сообщений происходит только при открытии страницы. Т.е. чтобы увидеть новые сообщения, нужно обновить страницу.


Системные параметры


























КлючПо-умолчаниюОписание
admintools_animate_menutrueВключает анимацию главного меню.
admintools_enable_favorite_elementstrueВключает функционал избранных элементов.
admintools_favorites_icon

Иконка избранного элемента, которая заменит стандартную иконку, например, «icon-star».
admintools_enable_elements_log

Добавляет кнопку на панель инструментов дерева элементов, которая открывает окно с логом измененных элементов.
admintools_remember_system_settingstrueВосстанавливает последние фильтры системных настроек.
admintools_check_elements_permissionstrueОтключает проверку прав на элементы при загрузке дерева. Это ускоряет построение дерева элементов. Укажите «false», чтобы отключить проверку.
admintools_clear_only resource_cachefalseЕсли включено, то при сохранении ресурса удаляется только его кэш, а не кэш всего сайта.
admintools_hide_component_descriptiontrueСкрывает описание компонентов в меню «Приложения».
admintools_email_authorizationfalseВключает механизм аутентификации через email. Должен быть определен ID ресурса с формой. (loginform_resource).
admintools_authorization_ttl600Время в секундах, в течение которого можно аутентифицироваться по высланной ссылке.
admintools_loginform_resource

ID ресурса, который используется для входа в менеджер сайта.
admintools_enable_notestrueВключает функционал заметок пользователя.
admintools_template_resource_relationshiptrueДобавляет шаблону вкладку с зависимыми ресурсами, а ресурсу ссылку на шаблон.
admintools_alternative_permissionstrueВключает механизм альтернативных прав доступа для ресурсов.
admintools_plugins_eventstrueДобавляет кнопку на панель инструментов плагинов дерева элементов, которая вызывает окно со списком событий.
admintools_themedefaultЦветовые темы админки. Доступные значения: default, dark и purple. Если оставить пустой, то применится тема default (стандартная тема MODX).
admintools_modx_tree_positionleftПоложение сайдбара с деревом. Доступные значения: left, right.
admintools_custom_css

Список файлов стилей, которые нужно подключить в интерфейсе менеджера.
admintools_custom_js

Список файлов скриптов для подключения в интерфейсе менеджера
admintools_package_actions

Позволяет запретить определённые действия с пакетами. Формат: {package:{action1:’Сообщение’, action2:false, message:’Сообщение по-умолчанию’}}
admintools_only_current_context_userfalseОтключает установку пользователя, залогиненного в админке, для незалогиненного пользователя на сайте.
admintools_lock_timeout0Количество минут, через которое произойдёт блокировка админ панели при отсутствии активности. 0 отключает автоблокировку.
admintools_unlock_code

Код быстрой разблокировки админ панели. Оставьте пустым, чтобы разблокировать по паролю.
admintools_show_lockmenu

Показывать меню блокировки в меню пользователя.


Ссылки

Проект на Github.

Статьи про AdminTools.

Устанавливаем modx Revolution X

Устанавливаем MODx Revolution 2.x

В первую очередь, необходимо скачать MODx Revolution 2.x. У вас есть возможность сскачать прямо с сайта разработчика.

«Traditional» или «Advanced»?

Открыв  страничку загрузки, вы сможете увидеть 2 варианта «Traditional» и «Advanced». Какому же отдать предпочтение?

Traditional является скомпилированным пакетом из репозитория Git. Вам остается лишь элементарно распаковать файлы на выбраный сервер и выполнить все шаги руководства по установке. Основная масса пользователей традиционно используют именно данную версию.

Advanced является пакетом по размеру практически в два раза менее, нежели «Traditional», так как содержимое «ядра» заархивировано. MODx Setup распаковывает данный пакет в ходе инсталляции. Данный вариант советуется применять лишь в том случае, в случае если вы намереваетесь смешать каталоги с ядром, управлением и коннекторами (connectors), и в случае если вы располагаете SSH-доступ и понимаете, как скорректировать права доступа к папкам. В случае если вы избираете данный вариант, перейдите к разделу «Advanced Installation».

Примечание: Так как я избрал вариант Traditional, в следующем изложении речь пойдет лишь о данном варианте. В случае если вас интересуют остальные — почитайте оригинальную документацию.

Подготавливаем базу

Так как MODx функционирует с использованием базы данных MySQL, накануне установки необходимо создать базу. При данном нужно выяснить такие данные:

• название сервера баз данных (выяснить у хостинг-провайдера)

• название базы

• логин юзера для доступа к базе

• пароль юзера

Загружаем дистрибутив не сервер

После подготовки базы, закачивайте дистрибутив на сервер хостера. При данном лучше закачивать непосредственно в виде архива, хоть данное возможно лишь в том случае, в случае если вы затем сможете разархивировать дистрибутив там. Мой хостер (mchost.ru) дает право закачать zip-архив и автоматом расположить его на хостинге, что я и проделал.

В случае если подобная возможность отсутствует, то доведется развернуть архив на локальном компьютере и закачать его посредством FTP. Разница значимая, так как объем архива 8,25 Мегабайта, а уже в развернутом виде он занимает целых 21,27 МБ.

Перед тем как перейти к этапу инсталляции, необходимо еще проконтролировать, что на каталогам core/cache/ и core/config/ дано право записи. Вот сейчас, как будто  бы все готово и имеется возможность приступить непосредственно к установки.

Административная панелью

После щелка по кнопочке «Войти», вам будет предложен ввод имени и пароля админа сайта.
Далее вы попадаете в админ. панель MODx.  Прочитайте (в случае если владеете английским), далее закрываем данное окно и видим, и перед нами предстает, админ. панель в ее изначальном состоянии.

Примечание: Далее для того чтобы попасть в панель управления, вам нужно ввести в адресной строчке браузера http://ваш_сайт/manager/ и перед вами предстанет также форма ввода имени и пароля пользователя.

Установка базового пакета

Начало установки

MODx Revolution скачан, и перед тем как начать установку, прочитайте Советы к серверу, а равным образом удостоверьтесь в том,  что папки /core/cache и core/config являются доступными для записи. В случае если в ходе установки появились трудности, просьба прочитайте Проблемы при установке.

Для старта установки перейдите  по адресу ‘http://вашсайт/setup’.

На 1 страничке вам порекомендуют сделать выбор языка.  Жмите далее

Параметры установки

Далее, вы увидите страничку с Параметрами установки

Вам будет доступен вариант лишь новейшей установки. В случае если вам нужно поменять права доступа для вашего вебсервера, у вас есть возможность сделать это в текстовых полях. Основная масса серверов прекрасно работает с правами по умолчанию. Жмите дальше для продолжения.

Настройка базы данных

В этом месте вам нужно заполнить данные о вашей базе данных.

Добавьте имя вашей базы данных, а так же URL где находится ваша база. Для основной массы пользователей это localhost.

В свою очередь, вы можете изменить префикс таблиц. Это префикс таблиц,их MODX применяет для собственных переменных. Замена префикса таблицы может понадобиться, в случае если вы намереваетесь в одной базе данных хранить данные многих сайтов на MODx.

Когда завершите жмите на ссылочку Проверить соединение с сервером баз данных и показать перечень доступных сопоставлений. Если возникли какие-нибудь ошибки, вы увидите их внизу.  В случае если предстанут ошибки,  удостоверьтесь, что вы верно ввели имя пользователя базы данных или же пароль.  Вполне вероятно названный вами пользователь не располагает правом создавать базу данных, тогда нужно создать ее вручную.

MySQL Notes

В случае если у вас MySQL сервер располагает не стандартным портом, вы сможете назначить его «my.database.com;port=3307», прибавляя к IP адресу или же имени хоста ;port= .
В случае если MySql сервер не располагает поддержкой сети, то вы сможете применять имя соккета «;unix_socket=MySQL»

Microsoft SQL Server Notes

Поддержка Microsoft SQL Server предусмотрена с версии MODx Revolution 2.1
В зависимости от конфигурации сети вашего SQL сервера, нужно указать последующие настройки:

• Named pipe: (local)/SQLEXPRESS

• Tcp/ip: 127.0.0.1,2301 (IP, port)

Вследствие этого PDO драйвер вашего сервера будет функционировать и вы не уведите ошибку когда нажмете Проверить соединение с сервером баз данных и показать перечень доступных сопоставлений. В случае если данное все таки приключалось это говорит о том, что у вас имеются затруднения с соединением с базой данных, аутентификацией или же выбором базы данных. В последствии проверки и исправления всех данных жмите Назад, для того чтобы возвратиться на предшествующую страничку и затем Далее, что бы возвратиться на страничку настроек базы данных.

Параметры кодировки и сравнения

После этого внизу выплывет последующее окно — выбор кодировки и сравнения базы данных.

В основной массе случаев вы можете сохранить эти значения по умолчанию.  Но, в случае если вами нужно изменить их, удостоверьтесь, что параметр сравнения совместим с кодировкой.  Для продолжения установки жмите  Создание и проверка выборки из базы данных Microsoft SQL Server Notes.

Заполняем форму, необходимую для создания  системного администратора.  MODx советует не использовать имя администратора ‘admin’. Это известное имя администратора и применяется традиционно для взлома системы хакерами.
Далее вводите e-mail администратора, а затем пароль.  Жмем  Далее

Проверка системы перед установкой

В MODx будет выведено окно в котором будут отображены все результатами проверки вашей системы перед установкой.  В случае если проверка не была закончена, удостоверьтесь, что ваша система отвечает условиям Рекомендаций к серверу и нужные директории располагают правом на запись. После  успешного прохождения проверки, нажимайте Установить.

В случае если перед вами предстанет пустой экран или же процесс установки не пойдет после нажатия на Установить, опробуйте следующее:

1. Удостоверьтесь что директории /core/packges, /core/import и /core/export располагают правом на запись
2. Удостоверьтесь что в файле опций PHP php.ini выставлены следующие значения memory_limit 128M и max_execution_time 120
3. Создайте пустой файл /core/config/config.inc.php и удостоверьтесь, что у него выставлены права на запись. НЕ СТИТ КОПИРовать config.inc.tpl, создайте пустой файл.
4. Создайте тему на форуме с вашей проблемой, указав  настройки вашего сервера и данные об установке и вам непременно помогут.

Отчет после завершения установки

MODx сообщит вам в случае если появились какие нибудь ошибки под час установки и даст вам право переустановки, что бы исправить данные ошибки. После успешной установки, нажимайте. Далее и вам нужно будет произвести заключительную настройку.

MODx советует удостовериться, что папка setup удалена для защиты вашего интернет-сайт от пробы запуска установщика сторонними вы можете проделать это поставив галочку в чекбоксе.

Теперь же вам осталось нажать на Вход и будет открыто окошко входа в систему админа. Установка благополучно закончена!

Установка расширенного пакета

Из этой  инструкции вы узнаете несколько деталей касающихся  установки дистрибутива MODx Advanced.  Мы советуем ставить этот дистрибутив, в случае если:

Вы намереваетесь переименовать папки manager/ или же connectors/ или же переместить папку core/;
У Вас имеется доступ к серверу по SSH или же вы просто можете переместить и сформировать папки на вашем сервере с правами на запись.

Накануне установки прочитайте Советы к серверу.

Подготовка установки

После скачивания дистрибутива MODx Revolution Advanced, вам необходимо закачать его на сервер и распаковать. У вас есть две папки core/ и setup/. Теперь, в случае если вы намереваетесь переместить папку core/, проделайте это сейчас. В случае если вы не намереваетесь этого делать, откройте браузер и введите в адресной строчке ‘http://ваш_сайт/setup/’ далее перейдите в раздел Установка контекста, данной инструкции.

Переименование и перемещение core

MODx Revolution предоставляет вам право переименовать или же переместить папку core/ для более высокого уровня защиты вашей системы.

Если вы хотите переименовать или переместить папки core/,  MODx советует проделать это до установки. Попросту переименуйте или же переместите core и setup сначала вам будет предложено ввести новое размещение папки core

Впишите в текстовое поле полный адрес новейшего расположения папки core. В случае если MODx может отыскать core, вы продолжите стандартную установку. В случае если MODx не сумеете отыскать директорию, проверьте что вы ввели адрес верно и что определили права на чтение и файлы папки core/cache доступными для записи.

MODx имеет возможность спросить вас сделать файл setup/includes/core.config.php доступным для записи. Это необходимо для изменения месторасположения core, и вы сможете это сделать до установки.

Использование дерева ресурсов — Создание сайта на MODX Revolution

В  дереве ресурсов отображаются все ресурсы (документы, веб ссылки,  символьные ссылки и статические ресурсы) на сайте. Когда вы создаете, редактируете,  снимаете с публикации или стираете ресурсы, вы всегда делаете это через дерево ресурсов. Кликнув на ресурсе, вы загружаете этот ресурс в панель Создания/редактирования в правой стороне экрана.

В MODX Revolution дерево ресурсов будет пустым (за исключением страницы Home) до тех пор, пока вы не создадите некоторые ресурсы или не установите компоненту сторонних разработчиков, которая создаст некоторые ресурсы.

Ресурсы, у которых есть вложенные ресурсы, будут отображаться в  дереве  как папки. Важно понимать, что во всех остальных отношениях они являются обычными ресурсами. Их можно редактировать в панели управления MODX и к ним может осуществляться доступ как к веб страницам на сайте.

Каждый ресурс в дереве ресурсов имеет рядом номер в скобках. Это идентификатор ресурса (ID) и это очень важный параметр. По идентификатору ресурса MODX обращается ко всем ресурсам. Когда вы создаете ссылку на ресурс на вашем сайте, всегда используйте для ссылки на него ID (в теге ссылки MODX).  Аналогично, любая ссылка на ресурс в сниппете или плагине должна выполняться по его ID. Название ресурса может изменяться, но его идентификатор ресурса не изменяется никогда.

Иконки дерева ресурсов

Небольшие иконки в верхней части дерева ресурсов  могут управлять его поведением.

Стрелки «вверх» и «вниз» сворачивают и разворачивают дерево.

Следующие четыре иконки позволяют создать документ, веб ссылку, символьную ссылку или статический ресурс в корне сайта (хотя опытные пользователи MODX редко их используют).

Иконка с двумя стрелками позволяет обновить дерево (это также редко используется, поскольку MODX обновляет дерево при каждом изменении в панели  управления).

Следующая иконка (маленькая папка с направленной вниз стрелкой) позволяет управлять сортировкой дерева. Если вы кликните на этой иконке, появится меню сортировки.

Методом сортировки по умолчанию является сортировка по позиции в меню. Если ваши документы не имеют установленной позиции в меню, они обычно будут отображаться в порядке, в котором вы их создаете.

Другими видами сортировки являются сортировка по названию ресурса (в алфавитном порядке), дате публикации (последняя дата, когда ресурс поменял состояние с неопубликованного на опубликованный), дате создания (дата, когда ресурс был впервые сохранен) и дате редактирования (дата, когда ресурс последний раз редактировался).

Вы можете изменить порядок следования элементов в дереве ресурсов кликнув на ресурсе и перетащив его вверх или вниз, однако местоположение ресурса изменится только в случае, если он отсортирован по позиции в меню.

Отметим также, что перетаскивание ресурса фактически изменяет значение позиции в меню для отдельных ресурсов (значения позиции в меню можно увидеть при редактировании ресурса; они часто используются сниппетами создания меню, такими как Wayfinder, для упорядочивания меню).

Иконка в виде корзины позволяет окончательно удалять ресурсы. Когда вы удаляете ресурсы, они появляются в дереве перечеркнутые красной линией. Они могут быть восстановлены в любой момент. Многие пользователи MODX оставляют удаленные ресурсы в дереве для использования при создании новых ресурсов. После того, как вы нажмете на эту иконку, перечеркнутые ресурсы будут удалены окончательно и восстановить их будет невозможно.

Стиль отображения  дерева ресурсов

Стиль элемента в дереве ресурсов  зависит от следующих установок :

Опубликован – обычный шрифт

Неопубликован – курсив

Не отображается в меню – серый

Отображается для редактирования – жирный шрифт

Вы сможете сказать какие ресурсы опубликованы и какие отображаются в меню, лишь взглянув на стиль их отображения в дереве ресурсов.

Меню ресурса при клике правой кнопкой

Если вы кликните на ресурсе правой кнопкой, вы увидите меню. Именно здесь вы наиболее часто будете выбирать  элемент для редактирования, публикации или удаления и здесь вы будете создавать новые ресурсы в MODX Revolution.  Давайте рассмотрим возможности, которые предоставляет нам это меню.

Обзор ресурса – Позволяет пользователю просматривать детальную информацию по ресурсу без возможности что-либо изменить. Права на просмотр без возможности редактирования могут быть предоставлены пользователям нижнего уровня.

Редактировать – Загружает ресурс в панель Создания/редактирования в правой стороне экрана для редактирования.

Быстро обновить – Загружает ресурс в редактор в выпадающее окно. Это особенно полезно для редактирования ресурсов, элементов или файлов без покидания текущего местоположения в панели управления. В этом режиме возможно редактирование не всех полей.

Копировать – Создает копию ресурса и загружает в панель Создания/редактирования ресурса для редактирования.

Обновить – Обновляет область дерева вокруг ресурса, однако эта возможность используется редко, поскольку дерево автоматически обновляется почти при всех операциях.

Создать – Отображает следующие подменю :

  • Дочерний документ – Создает документ с текущим документом в качестве родителя.
  • Дочерний статический ресурс – Создает статический ресурс с текущим документом в качестве родителя.
  • Дочернюю ссылку – Создает ссылку с текущим ресурсом в качестве родителя.
  • Дочернюю символическую ссылку — Создает символическую ссылку с текущим ресурсом в качестве родителя.
  • Дочернюю символическую ссылку — Создает символическую ссылку с текущим ресурсом в качестве родителя.

Быстро создать – То же самое, что «Создать», с тем отличием, что новый элемент загружается в выпадающее окно и некоторые поля невозможно редактировать.

Опубликовать/отменить публикацию – Отображает только возможный выбор (например «Опубликовать» для неопубликованных ресурсов) и позволяет выполнить мгновенную публикацию/отмену публикации ресурсов.

Удалить/восстановить – Удаление ресурса помещает его в корзину и он больше не отображается на сайте. Пользователи с соответствующими правами все же могут редактировать такой ресурс. Ресурс может быть восстановлен, если он не удален из корзины.

Открыть в браузере – Позволяет просмотреть ресурс в браузере.

Модификаторы в MODx Revolution










































catДобавляет к тегу строку.[[+num:cat=` раз`]], выведет к примеру «10 раз».
lcase, lowercase, strtolowerПереведет значение тега в нижний регистр, аналогично функции php strtolower.[[*pagetitle:lcase]]
ucase, uppercase, strtoupperПереведет текст в верхний регистр, аналогично функции php strtoupper.[[*pagetitle:ucase]]
ucwordsПереведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords.[[*pagetitle:ucwords]]
ucfirstПереведет только первую букву строки в верхний регистр, аналогично функции php ucfirst.[[*pagetitle:ucfirst]]
htmlent, htmlentitiesПреобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции php htmlentities. Использует текущие настройки системы «modx_charset» с флагом «ENT_QUOTES».[[*pagetitle:htmlentities]]
esc,escapeЭкранирует разные «плохие символы», так же экранирует [, ] и `.[[*content:esc]]
stripЗаменяет все переносы строк, табуляции и множественные пробелы с на один пробел.[[*content:strip]]
stripStringВырезает из строки заданную строку.[[*pagetitle:stripString=`вц`]]
replaceОбычная замена.[[*pagetitle:replace=`вц==конфетка`]]
striptags, stripTags,notags,strip_tagsВырезает все теги, кроме разрешенных, аналогично функции php strip_tags[[*longtitle:strip_tags=`

`]]

len,length, strlenВозвращает длину строки, аналогично функции php strlen[[*longtitle:strlen]]
reverse, strrevПереворачивает строку, аналогично функции php strrev[[*longtitle:reverse]]
wordwrapУстанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php wordwrap[[*pagetitle:wordwrap=`10`]]
limitУстанавливает лимит на длинну строки и обрезает ее.[[*pagetitle:limit=`10`]]
ellipsisУстанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце[[*pagetitle:ellipsis=`10`]]
tagВернет, запись тега.[[*pagetitle:ellipsis=`10`:tag]]вернет: [[*pagetitle:ellipsis=`10`:tag]]
add, increment, incrВернет, значение + модификатор ( по умолчанию +1 ).[[+num:incr]] или [[+num:add=`97`]]
subtract, decrement, decrВернет, значение модификатор ( по умолчанию -1 ).[[+num:decr]] или [[+num:decr=`97`]]
multiply, mpyВернет, значение * модификатор ( по умолчанию *2 ).[[+num:mpy]] или [[+num:mpy=`5`]]
divide, divВернет, значение / модификатор ( по умолчанию /2 ).[[+num:div]] или [[+num:div=`5`]]
modulus, modВернет, целочисленный остаток от деления значения на модификатор ( по умолчанию % 2. Вернет 1 или 0. )[[+num:mod]] или [[+num:mod=`5`]]
ifempty, default, empty, isemptyВернет, указанный модификатор, если значение пусто.[[*pagetitle:empty=`Пусто`]]
notempty, !empty, ifnotempty, isnotemptyВернет, указанный модификатор, если значение не пусто.[[*pagetitle:!empty=`Не пусто!`]]
nl2brВернет строку с «<br />» или «<br>» вставленные перед всеми (\r\n, \n\r, \n и \r)…, аналогично функции php nl2br[[*pagetitle:nl2br]][[*pagetitle:nl2br]]
dateАналогично функции PHP strftime. Значение — отформатировано.[[+birthyear:date=`%Y`]]
strtotimeАналогично функции PHP strtotime. Вернет дату.[[*createdon:strtotime]], — вернет типа «[[*createdon:strtotime]]»
fuzzydateВернет дату. Типа вчера, сегодня….[[*createdon:fuzzydate]], — вернет типа «[[*createdon:fuzzydate]]»
agoВернет дату в прошедших секундах, минутах, неделях или месяцах.[[*createdon:ago]], — вернет типа «[[*createdon:ago]]»
md5Аналогично функции php md5.[[+password:md5]].
cdataВставляет строку в оболочку «CDATA» тегов.[[*pagetitle:cdata]].
userinfoВозвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя ( modUser ).[[+modx.user.id:userinfo=`username`]].
isloggedinВозвращает true, если пользователь авторизирован в этом контексте.[[+modx.user.id:isloggedin]].
isnotloggedinВозвращает true, если пользователь не авторизирован в этом контексте.[[+modx.user.id:isnotloggedin]].
toPlaceholderПомещает результат вывода тега в плейсхолдер, причем там где был помещен — ничего не выводится, а телепортируется в указанный плейсхолдер. До этого модификатора можно использовать любые другие модификаторы.[[+number:toPlaceholder=`итого`]], помещает содержимое [[+number]] в плейсхолдер [[+итого]]. Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы: [[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]], если [[+number]] = 10, тогда выводим в плейсхолдер [[+итого]]: «ровно 10», если же нет «точно не 10!».
cssToHeadПрописывает файл CSS в <link> элемент перед закрывающим тегом </head>, где значение тега модификатора вписывается в аттрибут «href». Используется modX.regClientCSS.[[+cssTV:cssToHead]] перед закрывающим тегом </head>, регистрирует CSS, например: <link rel=»stylesheet» href=»значение +cssTv» type=»text/css» />
htmlToHeadВписывает значение тега перед закрывающим тегом </head>. Используется modX.regClientStartupHTMLBlock.[[+htmlTV:htmlToHead ]] перед закрывающим тегом </head>, регистрирует значение тега [[+htmlTV]] в HTML код.
htmlToBottomВписывает значение тега перед закрывающим тегом </body>. Используется modX.regClientHTMLBlock.[[+htmlTV:htmlToBottom]] перед закрывающим тегом </body>, регистрирует значение тега [[+htmlTV]] в HTML код.
jsToHeadПрописывает файл JS в <link> элемент перед закрывающим тегом </head>. Используется modX.regClientStartupScript.[[+jsTV:jsToHead]] перед закрывающим тегом </head>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script>
jsToBottomПрописывает файл JS в <link> элемент перед закрывающим тегом </body>. Используется modX.regClientScript.[[+jsTV:jsToBottom]] перед закрывающим тегом </body>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script>
urldecodeАналогично функции php urldecode.[[+stringi:urldecode]].

Модуль CMS ModX Evotution Commerce для оплаты в ЕРИП. Интеграция под ключ

Скопировать папки «assets» и «core», находящиеся в папке «ERIP», в корневую директорию сайта.

Перейти в вкладку «Администрирование» на сайте.

Перейти в раздел «Ресурсы», нажать кнопку «Новый документ» (Рисунок 1).

Рисунок 1 — кнопка «Новый документ»

Заполнить поля (Рисунок 3):

Заголовок: Результат

Шаблон: Основной

Скрыть из меню: Да

ВАЖНО!!! Обязательно запишите ID ресурса (Рисунок 2), это значение понадобится для дальнейшей настройки модуля

Рисунок 2 — ID ресурса

Рисунок 3 — новый документ

Настраиваем платежную систему:

В административной панели перейти «Пакеты» => «miniShop2″=> «Настройки» (Рисунок 4).

Рисунок 4 — раздел «Настройки»

Перейти «Способы оплаты» -> «Создать» (Рисунок 5).

Рисунок 5 — создание платежной системы

Заполнить поля (Рисунок 6):

Имя: ЕРИП

Класс-обработчик: Erip

Поставить галочку «Включен»

Рисунок 6 — настройка платежной системы

Далее переходим на вкладку «Варианты доставки» и выбираем необходимые варианты доставки.

В административной панели перейти «Системные настройки» (Рисунок 7)

Рисунок 7 — раздел «Системные настройки»

Нажать кнопку «Создать новый параметр» (Рисунок 8).

Рисунок 8 — кнопка «Создать новый параметр»

Создать и заполнить поля параметров (Рисунок 9 — 20).

Ключ: EXPRESS_PAY_RESOURCE_ID

Название: ID ресурса для формирования результирующей страницы

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (вводим ID ранее созданного ресурса)

Рисунок 9 — параметр «ID ресурса для формирования результирующей страницы»

Ключ: EXPRESS_PAY_SERVICE_ID_ERIP

Название: Номер услуги ЕРИП

Описание: Номер услуги ЕРИП в сервисе express-pay.by

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (вводим номер услуги ЕРИП предоставленный в личном кабинете сервиса «Экспресс Платежи»)

Рисунок 10 — параметр «Номер услуги ЕРИП»

Ключ: EXPRESS_PAY_TOKEN_ERIP

Название: Токен для ЕРИП

Описание: Токен для ЕРИП, который предоставляет сервис express-pay.by

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (вводим API-ключ услуги ЕРИП предоставленный в личном кабинете сервиса «Экспресс Платежи»)

Рисунок 11 — параметр «Токен для ЕРИП»

Ключ: EXPRESS_PAY_TEST_MODE

Название: Использовать тестовый режим

Описание: Использовать тестовый режим в котором взаимодействие происходит с тестовым сервером

Тип поля: Да/Нет

Пространство имён: minishop2

Рисунок 12 — параметр «Использовать тестовый режим»

Ключ: EXPRESS_PAY_SECRET_WORD_ERIP

Название: Секретное слово для формирования цифровой подписи

Описание: Секретное для ЕРИП слово которое, известно только серверу и клиенту. Используется для формирования цифровой подписи. Задается в кабинете пользователя сервиса express-pay.by

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (секретное слово введенное в личном кабинете пользователя)

Рисунок 13 — параметр «Секретное слово для формирования цифровой подписи»

Ключ: EXPRESS_PAY_IS_USE_SIGNATURE_FROM_NOTIFICATION_ERIP

Название: Использовать цифровую подпись для получения уведомлений

Описание: Значение должно соответствовать значению установленному в личном кабинете

Тип поля: Да/Нет

Пространство имён: minishop2

Значение: (секретное слово введенное в личном кабинете пользователя)

Рисунок 14 — параметр «Использовать цифровую подпись для получения уведомлений»

Ключ: EXPRESS_PAY_SECRET_WORD_FROM_NOTIFICATION_ERIP

Название: Секретное слово для получения уведомлений

Описание: Секретное для уведомлений слово которое, известно только серверу и клиенту. Используется для формирования цифровой подписи. Задается в кабинете пользователя сервиса express-pay.by

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (секретное слово введенное в личном кабинете пользователя)

Рисунок 15 — параметр «Секретное слово для получения уведомлений»

Ключ: EXPRESS_PAY_PATH_TO_ERIP

Название: Путь по ветке ЕРИП

Описание: Задается при подключении. Указано в личном кабинете

Тип поля: Текстовое поле

Пространство имён: minishop2

Значение: (Путь ветки ЕРИП указанный в личном кабинете пользователя)

Рисунок 16 — параметр «Путь по ветке ЕРИП»

Ключ: EXPRESS_PAY_IS_NAME_EDITABLE

Название: Разрешено изменять ФИО плательщика

Описание: Разрешено изменять ФИО плательщика при оплате в системе ЕРИП

Тип поля: Да/Нет

Пространство имён: minishop2

Рисунок 17 — параметр «Разрешено изменять ФИО плательщика»

Ключ: EXPRESS_PAY_IS_ADRESS_EDITABLE

Название: Разрешено изменять адрес плательщика

Описание: Разрешено изменять адрес плательщика при оплате в системе ЕРИП

Тип поля: Да/Нет

Пространство имён: minishop2

Рисунок 18 — параметр «Разрешено изменять адрес плательщика»

Ключ: EXPRESS_PAY_IS_AMOUNT_EDITABLE

Название: Разрешено изменять сумму оплаты

Описание: Разрешено изменять сумму оплаты при оплате в системе ЕРИП

Тип поля: Да/Нет

Пространство имён: minishop2

Рисунок 19 — параметр «Разрешено изменять сумму оплаты»

Ключ: EXPRESS_SHOW_QR_CODE

Название: Показывать Qr-код

Описание: Показывать ли Qr-код для оплаты в мобильных приложениях банков

Тип поля: Да/Нет

Пространство имён: minishop2

Рисунок 20 — параметр «Показывать Qr-код»

Настройка модуля, для работы в тестовом режиме:

Установите флажок в поле «Использовать тестовый режим» в положение «Да».

В полях «API-ключ (токен) доступа к API» и «Номер услуги в сервисе «Экспресс Платежи» введите значения, которые доступны по следующей ссылке.

Поле «Секретное слово для цифровой подписи» заполняется только в том случае, если был выбран API ключ с параметрами«Применять цифровую подпись» и «Секретное слово».

Оставшиеся поля можно оставить без изменений, поскольку на работу модуля в тестовом режиме они не влияют

Настройка модуля, для работы:

Убрать флажок в поле «Работа в тестовом режиме».

Поля «API-ключ (токен) доступа к API» и «Номер услуги в сервисе «Экспресс Платежи» заполнить значениями, которые указаны в Личном кабинете сервиса «Экспресс Платежи» в разделе «Настройка» -> «Услуги» -> «API» (Рисунок 21, Рисунок 22)

Рисунок 21 – раздел «API» в настройках услуг в личном кабинете сервиса «Экспресс Платежи»

Рисунок 22 – значение для заполнения полей «API-ключ (токен) доступа к API» и «Номер услуги в сервисе «Экспресс Платежи»

В разделе «Настройка» -> «Услуги» -> «API» личного кабинета сервиса «Экспресс Платежи» включите опцию «Применять цифровую подпись» и укажите значения в поле «Секретное слово». Значение из поля «Секретное слово» также следует указать в поле «Секретное слово для цифровой подписи» настройки новой платежной системы на вашем сайте.

Значение [адрес_вашего_сайта]/assets/components/minishop2/payment/erip.php необходимо скопировать в личный кабинет сервиса «Экспресс Платежи» в раздел «Настройка» -> «Услуги» -> «Уведомления» (Рисунок 23). Значение необходимо поместить в поле «URL для уведомлений», предварительно включив опцию «Получать уведомления об оплате на URL» (Рисунок 24). Данная опция позволяет автоматически изменять статус заказа после оплаты.

Рисунок 23 – раздел «Уведомления» в настройках услуг в личном кабинете сервиса «Экспресс Платежи»

Рисунок 24 – включение уведомлений об оплате на сайт

Поля «Использовать цифровую подпись при получении уведомлений» и «Секретное слово для цифровой подписи уведомлений» используются для формирования цифровой подписи. Формирование цифровой подписи для передаваемых данных обеспечивает целостность информации и гарантирует, что передаваемые данные не были изменены посторонними лицами в процессе передачи.

При включении данной опции, значения в полях «Секретное слово для цифровой подписи уведомлений» в настройках платежной системы сайта ModX и «Секретное слово» в личном кабинете сервиса «Экспресс Платежи» в разделе «Настройка» -> «Услуги» -> «Уведомления» должны быть одинаковыми.

Значение из поля «Путь ветки ЕРИП услуги» будет отображаться клиенту после формирования заказа и выставления счета в системе «Расчет» (Рисунок 25).

Рисунок 25 – путь ветки ЕРИП услуги при формировании заказа

Включение опции «Разрешено изменять ФИО плательщика» позволяет плательщику изменять ФИО при оплате заказа в дереве ЕРИП.

Включение опции «Разрешено изменять адрес плательщика» позволяет плательщику изменять адрес при оплате заказа в дереве ЕРИП.

Включение опции «Разрешено изменять сумму оплаты» позволяет плательщику изменять сумму при оплате заказа в дереве ЕРИП.

Включение опции «Показывать Qr-код» позволяет отображать клиенту после формирования заказа Qr-код для оплаты в мобильных приложениях банка. (Рисунок 26).

Рисунок 26 – отображение Qr-кода для оплаты

tinymce — MODX: Как вставлять ссылки на другие ресурсы в TinyMCE

Я что-то пропустил? При вставке ссылок на другие ресурсы кажется, что должен быть «инструмент выбора ресурсов», который автоматически вставляет тег [[~id]] для внутренних ссылок. Доступен ли такой «сборщик» в редакторе TinyMCE в MODX Revolution?

Я имею в виду, что я не возражаю против использования синтаксиса ресурсов, но я не думаю, что моим пользователям удобно изучать и запоминать его.

Когда я нажимаю кнопку «Вставить / редактировать ссылку», я получаю следующее диалоговое окно:

При нажатии на кнопку «Обзор» справа от «URL ссылки» открывается следующий диалог:

Я не вижу ничего, что позволило бы мне выбрать ресурс.

Я использую MODX Revolution 2.2.1-pl (традиционный) на IIS 7.5. Там могла быть возможная проблема.

1

Douglas Ludlow

11 Апр 2012 в 13:07

3 ответа

Лучший ответ

Я разобрался, мне точно чего-то не хватало. В диалоговом окне «Вставить / изменить ссылку» есть поле поиска, которое автоматически заполняется при вводе в него имени существующих документов. При выборе документа оттуда вставляется идентификатор документа с правильным синтаксисом.

2

Douglas Ludlow
12 Апр 2012 в 03:04

Там должен быть.

При редактировании текста, если вы выделите слово, которое будет использоваться в качестве ссылки, а затем щелкните значок «Изменить / Вставить ссылку» (ссылка в цепочке), появится поле выбора «Список ссылок», которое содержит все ваши ресурсы, при выборе одного из них будет заполнен URL-адрес ссылки. с [[~ id]] выбранного ресурса.

1

Fishcake
11 Апр 2012 в 11:23

В менеджере MODX Revo лучше использовать ACE-Editor (Extras / Package / download extras выберите Ace) для создания вашего шаблона. Теперь вы можете перетащить Ressource из Ressource-Tree слева и поместить его в свой код в Ace-Window. Это самый простой способ создать ссылку на ресурс.

0

AndyWizz
17 Май 2016 в 13:05

Готовим с MODX — Дружественные URL

Как изменить URL-адрес «index.php? Id = 42» по умолчанию для страниц нашего сайта на более удобный, например «about-us.html»?

Деннислихи спросил …

Итак, в ModX каждая страница имеет номер ресурса. Если вы используете встроенную систему меню Modx, на каждый пункт меню ссылаются по его номеру ресурса, а не по URL-адресу.

Например, Home / About может использовать www.mydomain / revo / index.php? A = 3 (если идентификатор ресурса этой страницы — «3») вместо моего более типичного способа вызова URL-адреса, такого как: www.mydomain / revo / about.php.

Если я не использую встроенную систему меню, я хотел бы создать систему меню навигации, которая использует URL-адреса (как во втором примере), а не номера ресурсов.

Могу я это сделать?

Я понимаю, что страницам будут присвоены номера ресурсов, но должен ли я их использовать? Смогу ли я по-прежнему выбирать страницы из дерева ресурсов слева, редактировать их, публиковать и указывать в системе меню (в стиле URL) на отредактированную / опубликованную страницу?

Решение:

гиссироб говорит…

Скорее всего — с использованием дружественных URL-адресов (FURL). Вот официальная документация, и вот сообщение в блоге, которое я написал об этом. (ссылки на надстройку «Статьи» можно игнорировать).

Что за история?

MODX запускается из файла index.php и должен знать, какой ресурс загружать, чтобы сгенерировать запрошенную страницу. По умолчанию это URL типа «domain.com/index.php?id=xx». Это уродливо, не дает никаких предложений о запрашиваемой странице и не может использоваться для указания пути к странице.Таким образом, MODX назначает каждому ресурсу поле «псевдоним», которое используется при создании меню или отдельных URL-адресов для создания более удобного URL-адреса, «domian.com/alias.html». MODX вычислит путь к фактической странице, используя поля псевдонимов своих родителей в дереве ресурсов, например «domain.com/alias1/alias2/alias.html». По умолчанию MODX создает псевдоним, используя поле «pagetitle», или вы можете ввести свой собственный псевдоним. Просто помните, что это будет часть URL-адреса страницы, поэтому это должно быть что-то, что сделает правильный URL-адрес.

MODX по-прежнему нужно запускать с файлом index.php. поэтому перезапись URL-адресов веб-сервера используется, чтобы указать веб-серверу передать все, что он не находит (например, alias.html, который не существует в виде файла на сервере), в index.php? q = alias.htm или index.php? q = псевдоним1 / псевдоним2 / alias.html. MODX анализирует это и определяет, какой ресурс имеет этот псевдоним.

Разработка • MoreGallery • modmore.com

Выпущено 24 июня 2021 г.

Выпущено 24 июня 2021 г.

  • Предотвратить фатальную ошибку при загрузке изображений, назначенных другому типу ресурса, чем тот, который предоставлен MoreGallery [S28412]

Выпущено 03.06.2021

Выпущено 03.06.2021

  • Убедитесь, что для большего количества видео с Vimeo
  • используются миниатюры самого высокого качества.

Выпущено 02.06.2021

Выпущено 02.06.2021

  • Исправление при получении эскизов видео Vimeo [S28109]
  • Убедитесь, что миниатюра самого высокого качества загружена из Vimeo [# 217]

Выпущено 21 мая 2021 г.

Выпущено 21 мая 2021 г.

  • Изменены стили для счетчика, чтобы избежать конфликта стилей [S27912]
  • ядро ​​/ components / moregallery /.gitignore больше не игнорирует каталог vendor, поэтому сайты с контролем версий могут более легко включать файлы MoreGallery
  • Исправлена ​​загрузка зависящего от контекста источника мультимедиа для обработки изображений [S27138]
  • Переместить каталог поставщиков на один уровень вверх в стандартное местоположение

Выпущено 27.10.2020

Выпущено 27.10.2020

  • Исправить ошибку file_err_perms, когда большие пальцы / кадры необходимо регенерировать из-за отсутствия файлов [F2050]
  • Fix ».ext «дезинфицируется до» _ext «с определенными конфигурациями дезинфекции [# 214]

Выпущено 27 июля 2020 г.

Выпущено 27 июля 2020 г.

  • Исправить кеширование при указании нескольких идентификаторов ресурсов, разделенных запятыми [S23543]
  • При использовании случайной сортировки теперь существует ограничение на максимальное количество используемых изображений (& randomLimit), которое по умолчанию составляет 1500. Из-за того, как случайные результаты загружаются, а затем записываются в кеш, случайная сортировка может непреднамеренно привести к тому, что mgGetImages загрузит все изображения, которые истощают производительность и память.Параметр & randomLimit позволяет вам установить жесткое максимальное количество случайных результатов, в то же время получая случайные результаты из кеша при повторных запросах.

Выпущено 22 июля 2020 г.

Выпущено 22 июля 2020 г.

  • Добавить функциональную совместимость как с MODX2, так и с MODX3 (с некоторыми незначительными проблемами на 3)
  • Понизить минимальную версию PHP до версии 7.1 как технический минимум
  • Включите юридический и обновленный логотип в соответствии с требованиями YouTube для использования API YouTube.

Выпущено 30 января 2020 г.

Выпущено 30 января 2020 г.

  • Исправить изображения, которые не работают в 1.10,1

Выпущено 19 декабря 2019 г.

Выпущено 19 декабря 2019 г.

  • Добавить кнопки поворота изображения в модальное окно редактирования изображения
  • Исправить селектор объемного изображения, имеющий более высокий z-index, чем модальная маска
  • Исправление для небольшой проверки лицензии

Выпущено 08.08.2019

Выпущено 08.08.2019

  • Встраивание видео Vimeo теперь предоставляет ссылку на API. Если для ваших видео настроена конфиденциальность на уровне домена, это позволит правильно загружать ваши видео.Ссылку можно отключить с помощью нового параметра moregallery.vimeo_provide_referer
  • MoreGallery теперь будет делиться технической информацией с modmore в зависимости от установленного вами уровня согласия. Узнайте больше на: https://docs.modmore.com/en/MoreGallery/v1.x/Data_Sharing.html
  • Предотвращение фатальных ошибок в mgImage.getCrops (), когда изображения назначаются ресурсу, который больше не является типом галереи [# 218]

Выпущено 08.08.2019

Выпущено 08.08.2019

  • Обновить валидатор требований, чтобы требовать PHP 7.1 для каждой версии политики поддержки: https://modmore.com/about/versions/
  • Зависимость «Представьте / представьте» обновлена ​​с v0.7.1 до 1.2.2
  • Исправить конфликт CSS с клише, из-за которого обрезка выглядела странно

Выпущено 06.06.2019

Выпущено 06.06.2019

  • Определите multiple_object_delete для улучшения совместимости с определенными поставщиками кеша [S20124]
  • Убедитесь, что totalVar также установлен при извлечении информации из кеша [S20250]

Выпущено 23.01.2019

Выпущено 23.01.2019

  • Исправить перезагрузку ресурса при использовании Magic Preview
  • Исправить отображение панели инструментов пакетного редактирования на небольших экранах / языках, отличных от английского [# 215, S19253]
  • Обновление до encryptedVehicle 2.0

Выпущено 14 декабря 2018 г.

Выпущено 14 декабря 2018 г.

  • Очистить недопустимые данные, которые автоматически извлекаются для видео YouTube
  • Исправить ширину и высоту загрузки для изображений, хранящихся на удаленном (например, S3) медиаисточнике
  • Исправить медленную обработку изображений, хранящихся в удаленных (например, S3) медиа-источниках, из-за сбоя проверки mgr_thumb

Выпущено 19.10.2018

Выпущено 19.10.2018

  • Добавить недостающий контроллер данных (для просмотра информации о странице в менеджере) [S17976]

Выпущено 16 июля 2018 г.

Выпущено 16 июля 2018 г.

  • Исправить ContentBlocks при перемещении содержимого на вкладку

Выпущено 12.07.2018

Выпущено 12.07.2018

  • Добавлять и удалять теги теперь можно с панели инструментов массовой обработки сразу для нескольких изображений [# 211]
  • YouTube / Vimeo / PDF теперь имеют небольшую ленту, чтобы сделать ее тип более очевидным и читаемым

Выпущено 06.07.2018

Выпущено 06.07.2018

  • Исправлено выталкивание модальных окон из поля зрения в MODX 3
  • Исправить проблему с дублированными полями контента (с ContentBlocks), когда контент находится на вкладке

Выпущено 04.07.2018

Новые функции:

  • Эскизы для PDF-файлов теперь создаются с первой страницы
  • Новые свойства mgGetImages & pdfTpl и & singlePdfTpl для упрощения интеграции PDF-файлов
  • Добавлено поле расширения к изображениям для облегчения доступа к (исходному) расширению
  • Добавьте заполнитель [[+ idx1]] в фрагмент mgGetImages для упрощения поддержки модов ([[+ idx1: mod = `3`: is =` 0`: then = `…]]) [# 202]

MODX3 Совместимость:

  • Фикс установки на MODX3
  • Обновите дизайн и расположение MoreGallery (с положением содержимого «вверху»), чтобы оно соответствовало последней версии MODX 3 alpha

Улучшения:

  • Убедитесь, что можно создавать эскизы для SVG, в которых отсутствует

    Как создать полный рабочий сайт за 90 минут

    На выставке MODXpo в Ультрехте в 2012 году я сделал презентацию о том, как создать полный сайт за 90 минут.На самом деле это заняло всего около часа; остальное время можно было бы использовать для установки и настройки одной или двух настраиваемых функций, таких как галерея или система ведения блогов.

    В этой серии статей подробно обсуждается каждый шаг этого процесса. Время от времени он обновляется, чтобы отражать текущие версии как шаблона It Fits, так и MIGX, а также изменения в MODX и его интерфейсе Менеджера.

    Установка

    Конечно, сначала вам понадобится работающая установка MODX.Прежде чем вы начнете, если вы не собираетесь разрабатывать в облаке MODX, убедитесь, что ваше хостинговое решение соответствует минимальным требованиям для правильно функционирующего MODX. MODX Revolution довольно крупный и не очень хорошо работает с дешевыми решениями для массового хостинга.

    Есть несколько способов загрузить файлы на ваш сервер. Лучше всего загрузить архив .zip и распаковать файлы прямо на сервере. Существует простой сценарий PHP, который вы можете загрузить на свой сервер и запустить из браузера, чтобы выполнить эту задачу за вас.

    После того, как вы установили и заработали MODX, самое время приступить к настройке вашего сайта.

    Системные настройки

    Для начала установите правила перезаписи вашего веб-сервера, чтобы разрешить удобную перезапись URL. Если вы используете Apache, вы можете просто переименовать включенный файл ht.access в корне вашего сайта на .htaccess. Если ваш сайт запускается из подкаталога, обязательно отредактируйте его, чтобы отобразить подкаталог в директиве RewriteBase. Вот несколько примеров использования других веб-серверов, таких как lighttpd и nginx.

    Создайте новый ресурс, назовите его «Не найден» с псевдонимом «не найден» и установите для него публикацию, а не отображение в меню. Назначьте ему пустой шаблон и введите что-то вроде «Страница не найдена» в поле «Содержимое».

    Теперь в Диспетчере перейдите в Система -> Настройки системы. В более поздних версиях MODX это представлено в главном меню Менеджера значком шестеренки в правом разделе меню.

    В раскрывающемся списке «Фильтровать по области» выберите «Сайт».Измените параметр error_page, чтобы отразить идентификатор ресурса «Not Found», который мы создали ранее — он должен быть 2. Просто дважды щелкните поле Value, отредактируйте, затем нажмите Enter или щелкните за пределами поля ввода. Появится маленький красный треугольник, указывающий на изменение в поле, затем он исчезнет, ​​так как новое значение будет автоматически сохранено.

    Прокрутите вниз до строки «Имя сайта» и отредактируйте имя сайта таким же образом.

    Теперь в раскрывающемся списке «Фильтровать по области» выберите «Дружественный URL».Прокрутите вниз и измените Use Friendly URL на yes. В своих браузерах попробуйте использовать понятные URL-адреса для доступа к странице not-found.html и обратно на страницу index.html. Если это не работает, проверьте правила перезаписи вашего веб-сервера.

    Добавление пакетов

    Сам по себе MODX не имеет особых дополнительных функций. Это обеспечивается дополнительными пакетами. Давайте установим надстройки, которые мы будем использовать; это пакеты, наиболее часто необходимые для базовой функциональности сайта.Перейдите в Система -> Управление пакетами и нажмите кнопку Загрузить дополнительные материалы. Вы попадете в официальный репозиторий надстроек MODX. Вы можете искать надстройки в различных категориях или использовать поле поиска, чтобы найти надстройки, которые, как вы знаете, хотите загрузить.

    Мы хотим скачать несколько пакетов:

    • Ace — за приятный интерфейс редактирования для Elements
    • Formit — для обработки форм типа контактной формы
    • MIGx — для создания пользовательских переменных шаблона
    • pdoTools — для создания динамических списков всех видов
    • SimpleSearch — для поиска
    • TinyMCEWrapper — для редактора форматированного текста для ресурсов

    После загрузки нажмите «Назад к управлению пакетами».Ваши недавно загруженные пакеты будут отображаться с зелеными кнопками «Установить» для каждого из них. Идите и установите их.

    Следующим шагом будет создание шаблонов вашей темы. Я расскажу об этом в следующем выпуске

    .

    Выпущен

    MODX Revolution 2.7 — вот как установить / обновить Ubuntu 16.04 | 18.04 | 18.10

    MODX Revolution, мощная система управления контентом (CMS) с открытым исходным кодом, на которой работают многие веб-сайты и блоги в Интернете, только что была обновлена ​​до версии 2.7 , и этот пост показывает студентам и новым пользователям, как установить или обновить Ubuntu.

    В этом выпуске почти 100 улучшений, включая новый Trash Manager для выборочного удаления удаленных ресурсов, значительно улучшенную производительность Media Manager и возможность удалять старые дополнительные пакеты с вашего портала.

    Мы показали студентам и новым пользователям, как установить MODX в Ubuntu, и эти руководства должны применяться к Ubuntu 16.04 / 18.10 и 18.04. Это стандартные руководства, которые должны работать в текущей и будущих версиях Ubuntu.

    Чтобы узнать больше об этом выпуске, посетите их страницу с объявлением.

    Вот некоторые из нововведений, представленных в этом выпуске:

    • Trash Manager предлагает новый интерфейс для управления удаленными ресурсами и выборочной очистки или восстановления удаленных ресурсов
    • Добавлен системный параметр для управления automatic_template_assignment
    • Сделал возможным создать проект MODX с помощью Composer
    • Добавлен сценарий установки CLI для использования после проекта, созданного Composer
    • Добавлены настройки для автоматизации рабочего процесса статических элементов
    • Значительно улучшена производительность Media Manager и файлового браузера / дерева при отображении изображений
    • Добавлена ​​очистка кнопка для удаления старых пакетов Extras из управления пакетами
    • Включен щелчок средней кнопкой мыши для открытия ссылок в новой вкладке / окне
    • Добавлена ​​возможность копировать путь к файлу / папке в дереве файлов MODX и медиабраузере
    • Сделано путь к классу обработчика ошибок MODX настраиваемый
    • Реализован собственный PHP хеширование паролей
    • Проверка идентификатора целевого ресурса для символических ссылок
    • Включить поиск в диспетчере для возврата любого объекта по соответствующему идентификатору

    Ниже приведены руководства по установке MODX на Ubuntu с MariaDB и Apache2 или Ubuntu с веб-сервером MariaDB и Nginx.

    MODX в Ubuntu с Apache2, MariaDB и PHP

    Чтобы установить MODX в Ubuntu с Apache2, MariaDB и PHP, прочтите сообщение ниже. это отличное место для начала, когда вы решаете запускать веб-сайты и блоги на базе MODX

    MODX на Ubuntu с Nginx, MariaDB и PHP-FPM

    . Кроме того, вы можете запускать MODX с Nginx, MariaDB и PHP. сообщение ниже должно помочь вам запустить MODX с веб-сервером Nginx.

    Обновление MODX

    Если у вас уже есть существующий сайт MODX и вы хотите обновить его до последней версии, выполните следующие шаги:

    Во-первых, сделайте резервную копию содержимого вашего веб-сайта и базы данных.Перед обновлением всегда следует делать полную резервную копию своего сайта.

    Затем загрузите последнюю версию MODX и извлеките загруженный контент в корневой каталог веб-сервера.

     cd / tmp
    wget https://modx.com/download/direct?id=modx-2.7.0-pl.zip
    разархивируйте modx-2.7.0-pl.zip -d / var / www / html / modx270 

    Затем скопируйте файл конфигурации ( config.inc.php ) из старого каталога в новый.

    sudo cp / var / www / html / modx / core / config / config.inc.php /var/www/html/modx270/core/config/config.inc.php

    Также скопируйте каталог основных компонентов со старого сайта на новый.

    sudo cp -rf / var / www / html / modx / core / components / / var / www / html / modx270 / core / components /

    После этого настройте конфигурацию сайта Apache2 или Nginx в соответствии с DocumentRoot = / var / www / html / modx270

    Обновите разрешения каталога веб-сайта.

     sudo chown -R www-data: www-data / var / www / html / modx270 /
    sudo chmod -R 755 / var / www / html / modx270 / 

    Перезагрузите веб-сервер и перейдите по указанному ниже URL-адресу для обновления.

    http://example.com/setup

    На экране настройки выберите вместо этого Обновить существующую установку .

    Вот и все! Следуйте инструкциям на экране, пока не обновите свой сайт MODX.

    Рекомендуется очистить кеш браузера после обновления. Браузеры часто кешируют JS и CSS, и вы хотите убедиться, что после обновления вы загружаете в браузер самые новые файлы.

    Наслаждайтесь!

    Вам также может понравиться этот пост ниже:

    Modx: Общие сведения о ресурсах | Хостинг-центр

    Создатели описывают Modx как «платформу приложений контента» — для новичков это означает, что вы можете создавать контент в автономном режиме, а затем размещать его в сети с помощью серверной части Modx Manager.Эти операции доступны с простым интерфейсом и включают URL-адреса, оптимизированные для поисковых систем, а также удобные для поисковых систем. Элементы, которые вы публикуете и которыми управляете с помощью простых операций перетаскивания, известны как РЕСУРСЫ . Modx ссылается на ресурс как на расположение веб-страницы. Существует четыре различных типа РЕСУРСОВ в MODx: Документы , Веб-ссылки , Симлинки и Статические ресурсы . Каждая страница уникально идентифицируется идентификатором ресурса.Следующая статья знакомит вас с этой первой базовой базовой концепцией, из которой состоит веб-сайт Modx: Ресурсы.

    Определение ресурсов в MODx Revolution

    1. Чтобы идентифицировать, добавлять или удалять ресурсы в MODx, вам необходимо сначала войти в бэкэнд Modx Manager
    2. При входе в систему вы увидите следующий экран:

    3. Для поиска и управления ресурсами, которые вы можете использовать с MODx, ищите Ресурсы в верхнем левом углу экрана.Вы увидите следующее:

    4. С помощью мыши наведите указатель мыши на каждую часть меню, чтобы увидеть описание каждого значка. На следующих снимках экрана показаны различные части описываемого меню:

    Каждый отдельный ресурс, который вы определяете, создаете или связываете с вашим сайтом MODx, уникально идентифицируется. Каждым ресурсом можно управлять. Щелкните правой кнопкой мыши ресурс в дереве, затем выберите РЕДАКТИРОВАТЬ РЕСУРС . Вы увидите что-то вроде следующего снимка экрана:

    Обратите внимание, что документ ресурсов имеет 3 вкладки.Вкладка «Документ» содержит конкретную информацию о содержимом страницы, вкладка «Настройки» содержит информацию о фактическом файле (например, HTML, дату публикации, местоположение, свойства), а «Группы ресурсов» — это организационная вкладка, содержащая информацию о группе, которую ресурс может принадлежать. Для получения дополнительной информации о ресурсах см. Управление ресурсами с помощью Modx .

    Modx Revolution Development с Wampserver — Часть 07 — Создание ресурсов

    Отправлено 30 июля 2011 г. | Теги: modx, wamp, веб-разработка

    Ранее, в разделе «Разработка Modx Revolution — Часть 03 — Основные настройки системы», мы погрузились в ресурсы Modx Revolution, когда мы создали некоторые необходимые страницы для настроек сайта.Мы также предусмотрели определенные страницы, идентификаторы которых необходимы для выполнения наших упражнений в Modx Revolution Development — Часть 05 — Создание шаблонов и Modx Revolution Development — Часть 06 — Chunks, Snippets and Template Variables.

    Напоминаем, что три изображения ниже (щелкните, чтобы увеличить) дают окончательное впечатление о нашем веб-сайте MyRevo. Из изображений нам понадобятся следующие страницы:

    • Навигация:
      • Дом
      • О нас
      • Наша миссия
      • Продукты
      • Услуги
      • Свяжитесь с нами
      • Карта сайта
    • Правый нижний колонтитул:
      • RSS
      • Политика конфиденциальности

      • отказ от ответственности
    • Другие функциональные страницы:
      • Результаты поиска
      • GoogleSiteMap

    Мы запланировали, что Продукты и Услуги будут иметь свой собственный шаблон, в то время как все остальное будет использовать Базовый шаблон, за исключением того, что с RSS мы представим новый шаблон, а для GoogleSiteMap будет создан пустой.Создавая наши страницы, мы будем переключаться между Ресурсами и Элементами, чтобы завершить наши шаблоны.

    Когда мы открываем Домашнюю страницу, мы видим стандартный макет ресурсов Modx Revolution, включающий вкладки для создания / редактирования документов, настроек страницы, переменных шаблона и разрешений доступа. Когда мы наводим указатель мыши на любое из свойств в «Создание / редактирование документов» и «Параметры страницы», мы видим всплывающее окно с тегом modx и его описанием. Большинство из них говорят сами за себя. Мы обновим Home следующим образом:

    • Создание / редактирование документов:
      • Использует шаблон: Базовый шаблон — другого шаблона пока нет.
      • Опубликовал: поставил галочку — мы можем убрать галочку, чтобы отложить публикацию, пока мы не будем готовы.
      • Название: Дом
      • Длинное название: My Revo website Home
      • Описание: некоторый текст описания сайта — становится метаописанием в исходном коде.
      • Псевдоним ресурса: пустой — Мы используем дружественные URL-адреса, поэтому Modx Revolution создаст его автоматически из заголовка
      • Атрибуты ссылки: пусто — не используется, но если мы не хотим, чтобы поисковые системы переходили, например, по ссылкам на этой странице, мы добавим rel = «nofollow».
      • Резюме (интротекст): бланк — не используется.
      • Родительский ресурс: оставить пустым — у дома нет родителя.
      • Название меню: Домой — то, что мы хотим видеть в нашем меню.
      • Указатель меню: оставьте как есть — это позиция элемента в дереве ресурсов. Когда мы перемещаем элементы в дереве ресурсов, их новое положение также будет обновлено здесь.
      • Скрыть из меню: снято
      • Содержание ресурса: некоторый текст lorem ipsum с использованием TinyMCE wysiwyg для основного содержимого — мы также можем использовать представление кода в TinyMCE.
    • Настройки страницы:
      • Контейнер: без галочки — Дом не имеет детей.
      • Rich Text: отметьте, чтобы использовать TinyMCE, — снимите отметку, чтобы подавить TinyMCE, и введите код непосредственно в поле Resource Content.
      • Опубликовано: автоматический
      • Дата публикации: бланк — используется для указания даты будущей публикации.
      • Доступен для поиска: отмечен галочкой — снимите отметку, чтобы заблокировать отображение ресурса в поиске по сайту, карте сайта или карте сайта googlesitemap
      • Другие элементы, не указанные в списке: оставить значение по умолчанию
    • Переменные шаблона:
      • Ключевое слово: введите ключевые слова для конкретной страницы
    • Разрешения доступа:
      • Здесь мы будем контролировать, кто будет видеть эту страницу.Членство еще не действует, и, поскольку домашняя страница обычно является общедоступной, у нас нет разрешений для назначения.
    • Сохранить на странице

    Помимо главной страницы, три другие страницы, которые мы создали ранее, не появятся ни в одном меню, поскольку они предназначены только для системного уведомления. Мы можем отфильтровать их из меню, игнорируя их в вызовах Wayfinder, но мы просто подавим их, отметив их свойство Hide From Menu, что затем заставит их быть серыми в дереве ресурсов.Мы также должны обновить их содержимое и другие соответствующие атрибуты чем-то значимым, как показано в обновлении Home.

    В приведенном выше примере у нас должно быть достаточно опыта для создания дополнительных ресурсов. Порядок, в котором мы создаем страницы, не слишком важен, потому что мы можем переупорядочить их, как нам нравится, в дереве ресурсов, но поддержание определенного порядка в самом начале очень удобно при обращении к идентификаторам. Поэтому будем создавать наши ресурсы в следующем порядке:

    Шаблоны

    Обновление

    Теперь, когда у нас есть идентификаторы основных страниц, мы можем завершить наш базовый шаблон.Работая сверху, мы изменяем наш базовый шаблон следующим образом:

    • Позиция:
      [[SimpleSearchForm? & tpl = `MySearchForm` & method =` post` & Landing = `91` & highlightResults =` 1` & highlightTag = `strong` & highlightClass =` search-highlight`]]

      становится:

      [[SimpleSearchForm? & tpl = `MySearchForm` & method =` post` & Landing = `9` & highlightResults =` 1` & highlightTag = `strong` & highlightClass =` search-highlight`]]
    • Позиция:

      [[! Wayfinder? & startId = `0` & includeDocs =` 1,2,3,4`]]

      становится:

      [[! Wayfinder? & startId = `0` & includeDocs =` 1,5,6,7,8,14,15 `]]
    • Позиция:

      [[! Wayfinder? & startId = `0` & includeDocs =` 7,8,9`]]

      становится:

      [[! Wayfinder? & startId = `0` & includeDocs =` 11,12,13 `]]

    Завершив базовый шаблон, мы можем продублировать его, щелкнув его правой кнопкой мыши, затем «Дублировать шаблон» и присвоив ему имя «Шаблон продукта».Мы повторяем для шаблона службы.

    В нижней части шаблона продукта мы изменяем фрагмент в строке:

    [[$ mainSidebar]]

    на:

    [[ $ productSidebar ]]


    а для шаблона службы мы меняем его на:

    [[ $ serviceSidebar ]]

    .

    Затем мы переходим к Chunks. Для productSidebar мы меняем код блока на:

    Новые продукты

    [[! Wayfinder? & startId = ` 14 `]]
    Точно так же мы меняем startId в коде блока для serviceSidebar на 15 .

    Обзор и обновление товаров и услуг Страницы

    Мы хотим, чтобы продукты и услуги находились между нашей миссией и контактами в главном меню, поэтому мы перетаскиваем их на новое место в дереве ресурсов. Мы должны быть осторожны при перетаскивании, потому что мы не хотим по ошибке создать папку в процессе. Всякий раз, когда мы перетаскиваем ресурс, мы получаем направляющую линию. Когда мы перетаскиваем другой ресурс, направляющая линия исчезает, но ресурс, который появляется в поле зрения, выделяется зеленым значком +.Если мы отпустим здесь мышь, перетаскиваемый ресурс станет дочерним по отношению к выделенному ресурсу. Поэтому мы должны убедиться, что, например, когда мы опускаем ресурс о продукте, чтобы была видна направляющая линия между нашей миссией и контактами.

    Страницы продуктов и услуг теперь могут быть изменены для использования соответствующих шаблонов. Мы также гарантируем, что Контейнер отмечен в настройках страницы для обоих ресурсов. Мы делаем это для того, чтобы они стали родительскими папками, чтобы мы могли создавать страницы непосредственно под ними.

    Последняя задача в этом разделе — создать дочерние страницы для продуктов и услуг. Мы щелкаем правой кнопкой мыши каждую родительскую папку и выбираем «Быстрое создание» -> «Документы» и создаем следующие подстраницы. Следует отметить, что в режимах Quick Create или Quick Update мы не получаем преимуществ TinyMCE, поскольку все находится в коде.

    • Продукты Детские страницы:
      • Продукт 1: — используется шаблон продукта
      • Продукт 2: — используется шаблон продукта
    • Детские страницы услуг:
      • Service 1: — использует шаблон службы
      • Служба 2: — использует шаблон службы

    Нашим следующим пунктом назначения будет Modx Revolution Development Part 08 — Членство


    modx.tree.resource.js | код поиска

    PageRenderTime 76 мс
    CodeModel.GetById 12 мс
    app.highlight 55 мсек
    RepoModel.GetById 1 мс
    app.codeStats 1 мс

    /manager/assets/modext/widgets/resource/modx.tree.resource.js

    https://bitbucket.org/Fosil/modx-revolution-standard-distribution-upstream
    JavaScript | 1187 строк |
    Код 1126 |
    48 пустой |
    13 комментариев |
    117 сложность | b3d8a04f5eb6964ac879c81f11f7dadd MD5 |
    необработанный файл

     1 / **
    2 * Создает дерево ресурсов в Ext
    3 *
    4 * @class MODx.tree.Resource
    5 * @extends MODx.tree.Tree
    6 * @param {Object} config Объект настроек.
    7 * @xtype modx-tree-resource
    8 * /
    9MODx.tree.Resource = function (config) {
    10 config = config || {};
    11 Ext.applyIf (config, {
    12 url: MODx.config.connectors_url + 'resource / index.php'
    13, заголовок: ''
    14, rootVisible: ложь
    15, expandFirst: true
    16, enableDD: (MODx.config.enable_dragdrop! = '0')? правда: ложь
    17, ddGroup: 'modx-treedrop-dd'
    18, remoteToolbar: правда
    19, sortBy: this.getDefaultSortBy (конфигурация)
    20, tbarCfg: {
    21 идентификатор: config.id? config.id + '- tbar': 'modx-tree-resource-tbar'
    22}
    23, baseParams: {
    24 действие: 'getNodes'
    25, sortBy: this.getDefaultSortBy (конфигурация)
    26, currentResource: MODx.request.id || 0
    27, currentAction: MODx.request.a || 0
    28}
    29});
    30 MODx.tree.Resource.superclass.constructor.call (this, config);
    31 this.on ('render', function () {
    32 var el = Ext.получить ('modx-дерево ресурсов');
    33 el.createChild ({tag: 'div', id: 'modx-resource-tree_tb'});
    34 el.createChild ({tag: 'div', id: 'modx-resource-tree_filter'});
    35}, это);
    36 this.addEvents ('loadCreateMenus');
    37 this.on ('afterSort', this._handleAfterDrop, это);
    38 this.addSearchToolbar ();
    39};
    40Ext.extend (MODx.tree.Resource, MODx.tree.Tree, {
    41 форма: {}
    42, окна: {}
    43, магазины: {}
    44 год
    45, _initExpand: function () {
    46 var treeState = Ext.state.Manager.get (this.treestate_id);
    47 if ((Ext.isString (treeState) || Ext.isEmpty (treeState)) && this.root) {
    48 если (this.root) {this.root.expand ();}
    49 var wn = this.getNodeById ('web_0');
    50 if (wn && this.config.expandFirst) {
    51 wn.select ();
    52 wn.expand ();
    53}
    54} else {
    55 для (var i = 0; i 1 || (targetParent.attributes.id == targetParent.attributes.pk + '_0' && e.point == 'append'))) {
    404 возвращает ложь;
    405}
    406
    407 if (dropNode.attributes.type! == 'modContext' && targetParent.getDepth () <= 1 && e.point! == 'append') { 408 возвращает ложь; 409} 410 если (targetParent.attributes.hide_children_in_tree) {вернуть ложь; } 411 412 вернуть dropNode.attributes.text! = 'Root' && dropNode.attributes.text! == '' 413 && targetParent.attributes.text! = 'Корень' && targetParent.attribute.text! == ''; 414} 415 416, getContextSettingForNode: function (node, ctx, setting, dv) { 417 var val = dv || нулевой; 418 if (node.attributes.type! = 'ModContext') { 419 var t = node.getOwnerTree (); 420 var rn = t.getRootNode (); 421 var cn = rn.findChild ('ctx', ctx, ложь); 422 if (cn) { 423 val = cn.attributes.settings [настройка]; 424} 425} else { 426 val = node.attributes.настройки [настройка]; 427} 428 return val; 429} 430 431, quickCreate: function (itm, e, cls, ctx, p) { 432 cls = cls || 'modDocument'; 433 var r = { 434 class_key: cls 435, context_key: ctx || "паутина" 436, "родитель": p || 0 437, 'шаблон': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'default_template', MODx.config.default_template)) 438, 'richtext': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'richtext_default', MODx.config.richtext_default)) 439, 'hidemenu': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'hidemenu_default', MODx.config.hidemenu_default)) 440, 'с возможностью поиска': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'search_default', MODx.config.search_default)) 441, 'cacheable': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'cache_default', MODx.config.cache_default)) 442, 'опубликовано': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'publish_default', MODx.config.publish_default)) 443, 'content_type': parseInt (this.getContextSettingForNode (this.cm.activeNode, ctx, 'default_content_type', MODx.config.default_content_type)) 444}; 445 if (this.cm.activeNode.attributes.type! = 'ModContext') { 446 var t = this.cm.activeNode.getOwnerTree (); 447 var rn = t.getRootNode (); 448 var cn = rn.findChild ('ctx', ctx, ложь); 449 if (cn) { 450 р ['шаблон'] = сп.attributes.settings.default_template; 451} 452} else { 453 r ['шаблон'] = this.cm.activeNode.attributes.settings.default_template; 454} 455 456 var w = MODx.load ({ 457 xtype: 'modx-окно-быстрое-создание-modResource' 458, запись: r 459, слушатели: { 460 'успех': {fn: function () { 461 var node = this.getNodeById (this.cm.activeNode.id); 462 if (node) { 463 var n = узел.parentNode? node.parentNode: узел; 464 this.getLoader (). Load (n, function () { 465 п. Развернуть (); 466}, это); 467} 468}, область действия: это} 469, 'скрыть': {fn: function () {this.destroy ();}} 470, 'шоу': {fn: function () {this.center ();}} 471} 472}); 473 w.setValues ​​(r); 474 w.show (e.target, function () { 475 Ext.isSafari? ш.setPosition (нуль, 30): w.center (); 476}, это); 477} 478 479, quickUpdate: function (itm, e, cls) { 480 MODx.Ajax.request ({ 481 URL: MODx.config.connectors_url + 'resource / index.php' 482, params: { 483 действие: 'получить' 484, идентификатор: this.cm.activeNode.attributes.pk 485} 486, слушатели: { 487 'успех': {fn: function (r) { 488 var pr = r.object; 489 пр.class_key = cls; 490 491 var w = MODx.load ({ 492 xtype: 'modx-окно-быстрое-обновление-modResource' 493, запись: пр. 494, слушатели: { 495 'успех': {fn: function () { 496 this.refreshNode (this.cm.activeNode.id); 497}, область действия: это} 498, 'hide': {fn: function () {this.destroy ();}} 499} 500}); 501 Вт.setValues ​​(r.object); 502 w.show (e.target, function () { 503 Ext.isSafari? w.setPosition (нуль, 30): w.center (); 504}, это); 505}, область действия: это} 506} 507}); 508} 509 510, _getModContextMenu: function (n) { 511 var a = n.attributes; 512 var ui = n.getUI (); 513 var m = []; 514 515 m.push ({ 516 текст: '' + a.text + ''
    517, обработчик: function () {return false;}
    518, заголовок: true
    519});
    520 м.толкать('-');
    521 if (ui.hasClass ('pedit')) {
    522 m.push ({
    523 текст: _ ('edit_context')
    524, обработчик: function () {
    525 var at = this.cm.activeNode.attributes;
    526 this.loadAction ('a =' + MODx.action ['context / update'] + '& key =' + at.pk);
    527}
    528});
    529}
    530 m.push ({
    531 текст: _ ('context_refresh')
    532, обработчик: function () {
    533 это.refreshNode (this.cm.activeNode.id, истина);
    534}
    535});
    536 if (ui.hasClass ('pnewdoc')) {
    537 м. Толкание ('-');
    538 this._getCreateMenus (m, '0', ui);
    539}
    540 if (ui.hasClass ('pnew')) {
    541 m.push ({
    542 текст: _ ('context_duplicate')
    543, обработчик: this.duplicateContext
    544});
    545}
    546 if (ui.hasClass ('pdelete')) {
    547 m.push ('-');
    548 m.push ({
    549 текст: _ ('context_remove')
    550, обработчик: this.removeContext
    551});
    552}
    553 м возврата;
    554}
    555
    556, overviewResource: function () {this.loadAction ('a =' + MODx.action ['resource / data'])}
    557, quickUpdateResource: function (itm, e) {
    558 Ext.getCmp ("дерево ресурсов-modx"). QuickUpdate (itm, e, itm.classKey);
    559}
    560, editResource: function () {this.loadAction ('a =' + MODx.action ['resource / update']);}
    561
    562, _getModResourceMenu: function (n) {
    563 var a = n.attributes;
    564 var ui = n.getUI ();
    565 var m = [];
    566 m.push ({
    567 текст: '' + a.text + ''
    568, обработчик: function () {return false;}
    569, заголовок: true
    570});
    571 m.push ('-');
    572 if (ui.hasClass ('pview')) {
    573 m.push ({
    574 текст: _ ('resource_overview')
    575, обработчик: this.overviewResource
    576});
    577}
    578 if (ui.hasClass ('pedit')) {
    579 m.push ({
    580 текст: _ ('resource_edit')
    581, обработчик: this.editResource
    582});
    583}
    584 if (ui.hasClass ('pqupdate')) {
    585 m.push ({
    586 текст: _ ('quick_update_resource')
    587, classKey: a.classKey
    588, обработчик: this.quickUpdateResource
    589});
    590}
    591 if (ui.hasClass ('pduplicate')) {
    592 m.push ({
    593 текст: _ ('resource_duplicate')
    594, обработчик: this.duplicateResource
    595});
    596}
    597 г.толкать({
    598 текст: _ ('resource_refresh')
    599, обработчик: this.refreshResource
    600, объем: это
    601});
    602
    603 if (ui.hasClass ('pnew')) {
    604 м. Толкание ('-');
    605 this._getCreateMenus (m, null, ui);
    606}
    607
    608 if (ui.hasClass ('psave')) {
    609 m.push ('-');
    610 if (ui.hasClass ('ppublish') && ui.hasClass ('unpublished')) {
    611 m.push ({
    612 текст: _ ('resource_publish')
    613, обработчик: this.publishDocument
    614});
    615} else if (ui.hasClass ('punpublish')) {
    616 m.push ({
    617 текст: _ ('resource_unpublish')
    618, обработчик: this.unpublishDocument
    619});
    620}
    621 if (ui.hasClass ('pundelete') && ui.hasClass ('удалено')) {
    622 m.push ({
    623 текст: _ ('resource_undelete')
    624, обработчик: this.undeleteDocument
    625});
    626} иначе, если (ui.hasClass ('pdelete') &&! ui.hasClass ('удалено')) {
    627 m.push ({
    628 текст: _ ('resource_delete')
    629, обработчик: this.deleteDocument
    630});
    631}
    632}
    633 if (ui.hasClass ('pview')) {
    634 м.пуш ('-');
    635 m.push ({
    636 текст: _ ('resource_view')
    637, обработчик: this.preview
    638});
    639}
    640 м возврата;
    641}
    642
    643, refreshResource: function () {
    644 это.refreshNode (this.cm.activeNode.id);
    645}
    646
    647, createResourceHere: function (itm) {
    648 var at = this.cm.activeNode.attributes;
    649 var p = itm.usePk? itm.usePk: at.pk;
    650 Ext.getCmp ('дерево-ресурсов-modx'). LoadAction (
    651 'a =' + MODx.action ['ресурс / создать']
    652 + '& class_key =' + itm.classKey
    653 + '& parent =' + p
    654 + (at.ctx? '& Context_key =' + at.ctx: '')
    655);
    656}
    657, createResource: function (itm, e) {
    658 var at = this.cm.activeNode.attributes;
    659 var p = itm.usePk? itm.usePk: at.pk;
    660 Ext.getCmp ('дерево ресурсов-модx'). QuickCreate (itm, e, itm.classKey, at.ctx, p);
    661}
    662
    663, _getCreateMenus: function (m, pk, ui) {
    664 var types = MODx.config.resource_classes;
    665 var o = this.fireEvent ('loadCreateMenus', типы);
    666 if (Ext.isObject (o)) {
    667 Внеш. Заявка (типы, о);
    668}
    669 var coreTypes = ['modDocument', 'modWebLink', 'modSymLink', 'modStaticResource'];
    670 var ct = [];
    671 вар qct = [];
    672 для (var k в типах) {
    673 если (coreTypes.indexOf (k)! = -1) {
    674 if (! Ui.hasClass ('pnew _' + k)) {
    675 продолжить;
    676}
    677}
    678 ct.push ({
    679 текст: типы [k] ['text_create_here']
    680, классKey: k
    681, используйте PK: pk? pk: false
    682, обработчик: this.createResourceHere
    683, объем: это
    684});
    685 if (ui && ui.hasClass ('pqcreate')) {
    686 qct.push ({
    687 текст: типы [k] ['text_create']
    688, классKey: k
    689, обработчик: this.createResource
    690, объем: это
    691});
    692}
    693}
    694 m.push ({
    695 текст: _ ('создать')
    696, обработчик: Ext.emptyFn
    697, меню: {items: ct}
    698});
    699 if (ui && ui.hasClass ('pqcreate')) {
    700 m.push ({
    701 текст: _ ('quick_create')
    702, обработчик: Ext.emptyFn
    703, меню: {items: qct}
    704});
    705}
    706 м возврата;
    707}
    708});
    709Ext.reg ('modx-tree-resource', MODx.tree.Resource);
    710
    711
    712
    713MODx.window.QuickCreateResource = function (config) {
    714 config = config || {};
    715 this.ident = config.ident || 'qcr' + Ext.id ();
    716 Ext.applyIf (config, {
    717 заголовок: _ ('quick_create_resource')
    718, идентификатор: this.ident
    719, ширина: 700
    720, высота: ['modSymLink', 'modWebLink', 'modStaticResource']. IndexOf (config.record.class_key) == -1? 640: 498
    721, autoHeight: false
    722, компоновка: 'якорь'
    723, URL: MODx.config.connectors_url + 'ресурс / index.php'
    724, действие: «создать»
    725, тень: ложь
    726, поля: [{
    727 xtype: 'modx-tabs'
    728, bodyStyle: {background: 'transparent'}
    729, граница: true
    730, deferredRender: false
    731, autoHeight: false
    732, autoScroll: false
    733, привязка: "100% 100%"
    734, шт .: [{
    735 title: _ ('ресурс')
    736, макет: 'форма'
    737, cls: 'modx-панель'
    738, bodyStyle: {background: 'transparent', padding: '10px'}.
    739, autoHeight: false
    740, привязка: '100% 100%'
    741, ширина этикетки: 100
    742, шт .: [{
    743 макет: 'колонна'
    744, граница: ложь
    745, шт .: [{
    746 columnWidth:.6
    747, граница: ложь
    748, макет: 'форма'
    749, шт .: [{
    750 xtype: 'текстовое поле'
    751, имя: 'pagetitle'
    752, id: 'modx -' + this.ident + '- pagetitle'
    753, fieldLabel: _ ('pagetitle')
    754, привязка: "100%"
    755}, {
    756 xtype: 'текстовое поле'
    757, имя: 'longtitle'
    758, id: 'modx -' + это.identity + '- longtitle'
    759, fieldLabel: _ ('длинное_заголовок')
    760, привязка: «100%»
    761}, {
    762 xtype: 'textarea'
    763, имя: 'описание'
    764, id: 'modx -' + this.ident + '- описание'
    765, fieldLabel: _ ('описание')
    766, привязка: "100%"
    767, рост: ложь
    768, высота: 50
    769}, {
    770 xtype: 'textarea'
    771, имя: 'интротекст'
    772, id: 'modx -' + это.идент + '- интротекст'
    773, fieldLabel: _ ('интротекст')
    774, привязка: "100%"
    775, высота: 50
    776}]
    777}, {
    778 Ширина столбца: 0,4
    779, окантовка: ложь
    780, макет: 'форма'
    781, шт .: [{
    782 xtype: 'modx-combo-template'
    783, имя: 'шаблон'
    784, id: 'modx -' + это.идентификатор + '- шаблон'
    785, fieldLabel: _ ('шаблон')
    786, редактируется: ложь
    787, привязка: "100%"
    788, baseParams: {
    789 действие: 'getList'
    790, комбо: '1'
    791, лимит: 0
    792}
    793, значение: MODx.config.default_template
    794}, {
    795 xtype: 'текстовое поле'
    796, имя: 'псевдоним'
    797, id: 'modx -' + это.идентификатор + '- псевдоним'
    798, fieldLabel: _ ('псевдоним')
    799, привязка: "100%"
    800}, {
    801 xtype: 'текстовое поле'
    802, имя: 'menutitle'
    803, id: 'modx -' + this.ident + '- menutitle'
    804, fieldLabel: _ ('resource_menutitle')
    805, привязка: "100%"
    806}, {
    807 xtype: 'xcheckbox'
    808, boxLabel: _ ('resource_hide_from_menus')
    809, описание: _ ('resource_hide_from_menus_help')
    810, имя: 'hidemenu'
    811, id: 'modx -' + это.identity + '- hidemenu'
    812, inputValue: 1
    813, проверено: MODx.config.hidemenu_default == '1'? 1: 0
    814}, {
    815 xtype: 'xcheckbox'
    816, имя: 'опубликовано'
    817, id: 'modx -' + this.ident + '- опубликовано'
    818, boxLabel: _ ('опубликованный_ресурс')
    819, описание: _ ('resource_published_help')
    820, inputValue: 1
    821, проверено: MODx.config.publish_default == '1'? 1: 0
    822}]
    823}]
    824}, MODx.getQRContentField (this.ident, config.record.class_key)]
    825}, {
    826 id: 'modx -' + this.ident + '- настройки'
    827, заголовок: _ ('настройки')
    828, макет: 'форма'
    829, cls: 'modx-панель'
    830, autoHeight: true
    831, forceLayout: истина
    832, ширина этикетки: 100
    833, по умолчанию: {autoHeight: true, border: false}
    834, стиль: 'фон: прозрачный;'
    835, bodyStyle: {background: 'transparent', padding: '10px'}.
    836, предметов: MODx.getQRSettings (this.ident, config.record)
    837}]
    838}]
    839, ключи: [{
    840 ключ: Ext.EventObject.ENTER
    841, сдвиг: истина
    842, fn: this.submit
    843, объем: это
    844}]
    845});
    846 MODx.window.QuickCreateResource.superclass.constructor.call (this, config);
    847};
    848Ext.extend (MODx.window.QuickCreateResource, MODx.Window);
    849Ext.reg ('modx-window-quick-create-modResource', MODx.window.QuickCreateResource);
    850
    851MODx.window.QuickUpdateResource = function (config) {
    852 config = config || {};
    853 this.ident = config.ident || qur + Ext.id ();
    854 Ext.applyIf (config, {
    855 заголовок: _ ('quick_update_resource')
    856, идентификатор: this.ident
    857, ширина: 700
    858, высота: ['modSymLink', 'modWebLink', 'modStaticResource']. IndexOf (config.record.class_key) == -1? 640: 498
    859, autoHeight: false
    860, макет: 'якорь'
    861, url: MODx.config.connectors_url + 'ресурс / индекс.php '
    862, действие: «обновить»
    863, тень: ложь
    864, поля: [{
    865 xtype: 'modx-tabs'
    866, bodyStyle: {background: 'transparent'}
    867, граница: true
    868, autoHeight: false
    869, autoScroll: false
    870, привязка: '100% 100%'
    871, deferredRender: false
    872, шт .: [{
    873 title: _ ('ресурс')
    874, макет: 'форма'
    875, cls: 'modx-панель'
    876, bodyStyle: {background: 'transparent', padding: '10px', overflow: 'hidden'}
    877, autoHeight: false
    878, привязка: '100% 100%'
    879, ширина этикетки: 100
    880, шт .: [{
    881 xtype: 'скрытый'
    882, имя: 'id'
    883, id: 'modx -' + это.идентификатор + '- идентификатор'
    884}, {
    885 макет: 'колонна'
    886, граница: ложь
    887, шт .: [{
    Ширина столбца 888: 0,6
    889, граница: ложь
    890, макет: 'форма'
    891, шт .: [{
    892 xtype: 'текстовое поле'
    893, имя: 'pagetitle'
    894, id: 'modx -' + this.ident + '- pagetitle'
    895, fieldLabel: _ ('pagetitle')
    896, привязка: "100%"
    897}, {
    898 xtype: 'текстовое поле'
    899, имя: 'longtitle'
    900, id: 'modx -' + это.identity + '- longtitle'
    901, fieldLabel: _ ('длинное_заголовок')
    902, привязка: "100%"
    903}, {
    904 xtype: 'текстовое поле'
    905, имя: 'описание'
    906, id: 'modx -' + this.ident + '- описание'
    907, fieldLabel: _ ('описание')
    908, привязка: "100%"
    909, рост: ложь
    910, высота: 50
    911}, {
    912 xtype: 'textarea'
    913, имя: 'интротекст'
    914, id: 'modx -' + это.идент + '- интротекст'
    915, fieldLabel: _ ('интротекст')
    916, привязка: "100%"
    917, высота: 50
    918}]
    919}, {
    920 Ширина столбца: 0,4
    921, граница: ложь
    922, макет: 'форма'
    923, шт .: [{
    924 xtype: 'modx-комбо-шаблон'
    925, имя: 'шаблон'
    926, id: 'modx -' + это.идентификатор + '- шаблон'
    927, fieldLabel: _ ('шаблон')
    928, редактируется: ложь
    929, привязка: "100%"
    930, baseParams: {
    931 действие: 'getList'
    932, комбо: '1'
    933, лимит: 0
    934}
    935}, {
    936 xtype: 'текстовое поле'
    937, имя: 'псевдоним'
    938, id: 'modx -' + это.идентификатор + '- псевдоним'
    939, fieldLabel: _ ('псевдоним')
    940, привязка: «100%»
    941}, {
    942 xtype: 'текстовое поле'
    943, имя: 'menutitle'
    944, id: 'modx -' + this.ident + '- menutitle'
    945, fieldLabel: _ ('resource_menutitle')
    946, привязка: "100%"
    947}, {
    948 xtype: 'xcheckbox'
    949, boxLabel: _ ('resource_hide_from_menus')
    950, описание: _ ('resource_hide_from_menus_help')
    951, имя: 'hidemenu'
    952, id: 'modx -' + это.identity + '- hidemenu'
    953, inputValue: 1
    954}, {
    955 xtype: 'xcheckbox'
    956, имя: 'опубликовано'
    957, id: 'modx -' + this.ident + '- опубликовано'
    958, boxLabel: _ ('опубликованный_ресурс')
    959, описание: _ ('resource_published_help')
    960, inputValue: 1
    961}]
    962}]
    963}, MODx.getQRContentField (this.ident, config.record.class_key)]
    964}, {
    965 id: 'modx -' + this.ident + '- настройки'
    966, заголовок: _ ('настройки'), макет: 'форма'
    967, cls: 'modx-панель'
    968, autoHeight: true
    969, forceLayout: true
    970, ширина этикетки: 100
    971, по умолчанию: {autoHeight: true, border: false}
    972, стиль: 'фон: прозрачный;'
    973, bodyStyle: {background: 'transparent', padding: '10px'}.
    974, предметы: MODx.getQRSettings (this.ident, config.record)
    975}]
    976}]
    977, ключи: [{
    978 ключ: Ext.EventObject.ENTER
    979, сдвиг: истина
    980, fn: this.submit
    981, объем: это
    982}]
    983, кнопки: [{
    984 текст: config.cancelBtnText || _('Отмена')
    985, объем: это
    986, обработчик: function () {this.hide (); }
    987}, {
    988 текст: config.saveBtnText || _('спасти')
    989, объем: это
    990, обработчик: function () {this.отправить (ложь); }
    991}, {
    992 текст: config.saveBtnText || _('сохрани и закрой')
    993, объем: это
    994, обработчик: this.submit
    995}]
    996});
    997 MODx.window.QuickUpdateResource.superclass.constructor.call (this, config);
    998};
    999Ext.extend (MODx.window.QuickUpdateResource, MODx.Window);
    1000Ext.reg ('modx-window-quick-update-modResource', MODx.window.QuickUpdateResource);
    1001
    1002
    1003MODx.getQRContentField = function (id, cls) {
    1004 id = id || 'qur';
    1005 cls = cls || 'modDocument';
    1006 var dm = Ext.getBody (). getViewSize ();
    1007 var o = {};
    1008 switch (cls) {
    1009 case 'modSymLink':
    1010 o = {
    1011 xtype: 'текстовое поле'
    1012, fieldLabel: _ ('символическая ссылка')
    1013, имя: 'содержание'
    1014, идентификатор: 'modx -' + id + '- контент'
    1015, привязка: "100%"
    1016, макс. Длина: 255
    1017, allowBlank: false
    1018};
    1019 перерыв;
    1020 case 'modWebLink':
    1021 o = {
    1022 xtype: 'текстовое поле'
    1023, fieldLabel: _ ('ссылка')
    1024, имя: 'содержание'
    1025, идентификатор: 'modx -' + id + '- контент'
    1026, привязка: "100%"
    1027, макс. Длина: 255
    1028, значение: 'http: //'
    1029, allowBlank: false
    1030};
    1031 перерыв;
    1032 случай 'modStaticResource':
    1033 o = {
    1034 xtype: 'modx-combo-браузер'
    1035, browserEl: 'modx-browser'
    1036, prependPath: false
    1037, prependUrl: ложь
    1038, hideFiles: правда
    1039, fieldLabel: _ ('статический_ресурс')
    1040, имя: 'содержание'
    1041, идентификатор: 'modx -' + id + '- контент'
    1042, привязка: "100%"
    1043, макс. Длина: 255
    1044, значение: ''
    1045, слушатели: {
    1046 'select': {fn: function (data) {
    1047 если (data.url.substring (0,1) == '/') {
    1048 Ext.getCmp ('modx -' + id + '- content'). SetValue (data.url.substring (1));
    1049}
    1050}, область действия: это}
    1051}
    1052};
    1053 перерыв;
    1054 case 'modResource':
    1055 case 'modDocument':
    1056 по умолчанию:
    1057 o = {
    1058 xtype: 'textarea'
    1059, имя: 'содержание'
    1060, идентификатор: 'modx -' + id + '- контент'
    1061, hideLabel: true
    1062, labelSeparator: ''
    1063, привязка: "100% -274"
    1064};
    1065 перерыв;
    1066}
    1067 return o;
    1068};
    1069
    1070MODx.getQRSettings = function (id, va) {
    1071 id = id || 'qur';
    1072 возврат [{
    Макет 1073: 'столбец'
    1074, граница: ложь
    1075, привязка: '100%'
    1076, по умолчанию: {
    1077 этикеткаРазделитель: ''
    1078, labelAlign: 'вверху'
    1079, граница: ложь
    1080, макет: 'форма'
    1081}
    1082, позиции: [{
    1083 Ширина столбца: 0,5
    1084, позиции: [{
    1085 xtype: 'скрытый'
    1086, имя: 'родитель'
    1087, идентификатор: 'modx -' + id + '- родитель'
    1088, значение: va ['родительский']
    1089}, {
    1090 xtype: 'скрытый'
    1091, имя: 'context_key'
    1092, идентификатор: 'modx -' + id + '- context_key'
    1093, значение: va ['context_key']
    1094}, {
    1095 xtype: 'скрытый'
    1096, имя: 'class_key'
    1097, идентификатор: 'modx -' + id + '- class_key'
    1098, значение: va ['class_key']
    1099}, {
    1100 xtype: 'скрытый'
    1101, имя: 'опубликовано'
    1102, идентификатор: 'modx -' + id + '- опубликовано'
    1103, значение: va ['опубликовано']
    1104}, {
    1105 xtype: 'modx-combo-content-type'
    1106, fieldLabel: _ ('тип_контента_ресурса')
    1107, имя: 'content_type'
    1108, hiddenName: 'content_type'
    1109, id: 'modx -' + id + '- тип'
    1110, привязка: «100%»
    1111, значение: va ['content_type']! = Undefined? va ['content_type']: (MODx.config.default_content_type || 1)
    1112
    1113}, {
    1114 xtype: 'modx-combo-content-disposition'
    1115, fieldLabel: _ ('resource_contentdispo')
    1116, имя: 'content_dispo'
    1117, скрытое имя: 'content_dispo'
    1118, идентификатор: 'modx -' + id + '- dispo'
    1119, привязка: '100%'
    1120, значение: va ['content_dispo']! = Undefined? va ['content_dispo']: 0
    1121}, {
    1122 xtype: 'modx-combo-class-производные'
    1123, fieldLabel: _ ('ключ_класса')
    1124, описание: ' [[* class_key]]
    '
    1125, имя: 'class_key'
    1126, скрытое имя: 'class_key'
    1127, id: 'modx -' + id + '- класс-ключ'
    1128, привязка: "100%"
    1129, значение: va ['class_key']! = Undefined? va ['class_key']: 'modDocument'
    1130}]
    1131}, {
    1132 columnWidth:.5
    1133, позиции: [{
    1134 xtype: 'xcheckbox'
    1135, boxLabel: _ ('папка_ресурсов')
    1136, описание: _ ('resource_folder_help')
    1137, имя: 'isfolder'
    1138, идентификатор: 'modx -' + id + '- isfolder'
    1139, inputValue: 1
    1140, проверено: va ['isfolder']! = Undefined? va ['isfolder']: ложь
    1141}, {
    1142 xtype: 'xcheckbox'
    1143, boxLabel: _ ('resource_richtext')
    1144, описание: _ ('resource_richtext_help')
    1145, имя: 'richtext'
    1146, идентификатор: 'modx -' + id + '- richtext'
    1147, inputValue: 1
    1148, проверено: va ['richtext']! == undefined? (va ['richtext']? 1: 0): (MODx.config.richtext_default == '1'? 1: 0)
    1149}, {
    1150 xtype: 'xcheckbox'
    1151, boxLabel: _ ('поиск_ресурсов')
    1152, описание: _ ('resource_searchable_help')
    1153, имя: "доступный для поиска"
    1154, id: 'modx -' + id + '- доступен для поиска'
    1155, inputValue: 1
    1156, проверено: va ['для поиска']! = Undefined? va ['с возможностью поиска']: (MODx.config.search_default == '1'? 1: 0)
    1157, слушатели: {'check': {fn: MODx.handleQUCB}}
    1158}, {
    1159 xtype: 'xcheckbox'
    1160, boxLabel: _ ('кэш_ресурсов')
    1161, описание: _ ('resource_cacheable_help')
    1162, имя: 'cacheable'
    1163, id: 'modx -' + id + '- кешируемый'
    1164, inputValue: 1
    1165, проверено: va ['cacheable']! = Undefined? va ['cacheable']: (MODx.config.cache_default == '1'? 1: 0)
    1166}, {
    1167 xtype: 'xcheckbox'
    1168, имя: 'clearCache'
    1169, идентификатор: 'modx -' + id + '- clearcache'
    1170, boxLabel: _ ('clear_cache_on_save')
    1171, описание: _ ('clear_cache_on_save_msg')
    1172, inputValue: 1
    1173, проверено: true
    1174}]
    1175}]
    1176}];
    1177};
    1178MODx.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *