Элементы

    Любой, кто начнет разбираться в Evolution, столкнется с новыми терминами.

    Здесь мы отметим небольшие моменты, которые периодически можно подсматривать.

    Терминология

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

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

    Чанк - маленький шаблон, который может использоваться как просто для вывода какого-то содержимого (телефона на всех страницах), так и для обработки (шаблон отправляемого письма eForm, шаблон каталога выводимого Ditto и т.д.). Таким образом, вид (представление) информации отделяется от места обработки и легко управляется.

    Сниппет - код для обработки информации. Анализируют полученную информацию (например, сообщение пользователя) и предоставляют результат (например, отправляют сообщение по почте, а пользователю показывают сообщение о результате). Сниппеты формируют меню (Wayfinder), выводят списки статей с разбиением на страницы (Ditto), строят формы (eForm). Для вывода используют Чанки.

    Плагин - код, который запускается при наступлении какого-то события. Например, подсвечивает искомые слова (Search Highlighting) при переходе со страницы поиска. Событий много и их рассмотрение стоит отдельной статьи.

    Специальные теги

    Для вывода динамических данных используются специальные теги.

    Системные

    • [(site_name)] - название сайта
    • [(base_url)] или [(site_url)] - адрес сайта (https://www.evolutioncms.org)
    • [(modx_charset)] - используемая кодировка
    • [(lang_code)] - код языка, используемого на сайте
    • [^m^] - количество использованной памяти
    • [^qt^] - время на запросы к базе данных
    • [^q^] - количество запросов к базе данных
    • [^p^] - время на работу PHP скриптов
    • [^t^] - общее время на генерацию страницы
    • [^s^] - источник содержимого (база или кэш)

    Стандартные

    • [*pagetitle*] - заголовок документа
    • [*longtitle*] - расширенный заголовок документа
    • [*description*] - описание документа
    • [*introtext*] - аннотация документа
    • [*content*] - содержимое документа
    • [*alias*] - псевдоним документа
    • [*id*] - идентификатор (номер) документа
    • [*pub_date*] - дата публикации дкоумента
    • [*unpub_date*] - дата завершения публикации
    • [*createdby*] - Идентификатор пользователя создавшего документ
    • [*createdon*] - Дата создания документа
    • [*editedby*] - Идентификатор пользователя редактировавшего документ
    • [*editedon*] - Дата редактирования документа
    • [~идентификатор~] - URL указанного документа

    Дополнительные

    • [*type*] - вариант (документ, папка или ссылка)
    • [*contentType*] - тип содержимого (например, text/html)
    • [*published*] - опубликован ли документ (1|0)
    • [*parent*] - номер (ID) родительского документа
    • [*isfolder*] - является ли документа папкой (1|0)
    • [*richtext*] - используется ли при редактировании документа визуальный редактор
    • [*template*] - номер (ID) используемого шаблона для документа
    • [*menuindex*] - порядковый номер отображения в меню
    • [*searchable*] - доступен ли документ для поиска (1|0)
    • [*cacheable*] - Кэшируется ли документ (1|0)
    • [*deleted*] - Документ удален (1|0)
    • [*deletedby*] - Идентификатор пользователя удалившего документ
    • [*menutitle*] - Заголовок меню. Если не используется, то заголовок документа
    • [*donthit*] - Слежение за количеством посещений отключено (1|0)
    • [*haskeywords*] - Документ содержит ключевые слова (1|0)
    • [*hasmetatags*] - Документ имеет метатеги (1|0)
    • [*privateweb*] - Документ входит в частную группу пользовательских документов (1|0)
    • [*privatemgr*] - Документ входит в частную группу менеджерских документов (1|0)
    • [*content_dispo*] - Вариант выдачи содержимого (1 - для отображения | 0 - для скачивания)
    • [*hidemenu*] - Документ не отображается в меню (1|0)

    Параметры TV, сниппеты и чанки

    [\*НазваниеПараметраTV\*] - выводит значение параметра в документе.
    {{НазваниеЧанка}} - возвращает содержимое чанка.
    [[название сниппета]] - возвращает результат работы сниппета. 

    Можно передавать сниппету дополнительные параметры, перечисляя их при вызове. Допустим, если мы хотим получить id текущего документа и обработать его в сниппете, то вызов может быть похож на этот:

    [[название сниппета?docId=`[+id+]`]]

    [+НазваниеПеременной+] - плейсхолдер - встречается в чанках, которые используются для обработки результатов работы сниппетов. После обработки вместо них вставляются значения. В примере выше вы видите, как в параметр docId для сниппета мы подставили системный плейсхолдер [+id+], в котором будет id текущего документа. Плейсхолдеры можно создавать самому.

    Нюансы

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

    1. [[название сниппета]] - кэшируемый вызов сниппета
    2. [!НазваниеСниппета!] - некэшируемый вызов сниппета

    Где использовать

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

    Пример шаблона

    <!DOCTYPE html>
    <html lang="[(lang_code)]">
    {{head_tags}}
    <body>
        [*content*]
    </body>
    </html>

    где head_tags это чанк со следующим содержимым:

    <head>  
        <base href="[(site_url)]" />
        <meta charset="[(modx_charset)]" />
        <title>[*pagetitle*] / [(site_name)]</title>
    </head>

    А в поле [*content*] будет выведено содержимое страницы, заданное из админки.