Modx evolution

Создание шаблона

После загрузки папок с файлами мы можем начать создание нашего MODX шаблона. В админке нажмите на вкладку Elements слева, откроется панель с различными элементами сайта — шаблонами, чанками, переменными шаблона и другими. Нажмем на templates и увидим, что уже есть в наличии один базовый шаблон с названием Base Template. Если вы на него нажмете, то вы можете увидеть код данного шаблона. Видим HTML код с тегами ], ].

Эти тэги трансформируют статичный HTML/CSS код в динамичный MODX шаблон и мы собираемся узнать как его сделать и приложить к этому свои руки.

Давайте продолжим и сделаем наш шаблон. Для создания нового MODX Revolution шаблона нажмите правой кнопкой мышки Templates, а далее New Template.

Можете также нажать на иконке New Template:

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

Для создания категории, нажмите правой кнопкой мыши на Categories в закладке Elements.

Ну вот можно добавить код в наш новый шаблон. Начнем мы с создания шаблона для главной страницы. Сейчас я могу сказать, что дизайн главной страницы будет отличаться от дизайна внутренних страниц, поэтому я назову этот шаблон каким-то своим именем, например «7in1 Home». Код домашней страницы находится в файле index.html в папке с шаблонами, которую мы загрузили с Themeforest, поэтому открываем этот файл в редакторе (я использую Notepad++) и копируем его содержимое в наш новосозданный шаблон в MODX. Можно (и это на мой взгляд даже более удобнее) отредактировать вначале код вне MODX Revolution и только потом перенести отредактированный код исправленного шаблона, но исходя из целей данного урока, все эти действия проведём внутри редактора MODX.

Нахождение других объектов

Ссылки на все объекты MODX могут быть получены используя метод $modx->getObject().
Вы можете «получить» объект MODX вот так:

$object = $modx->getObject('object-class-name',array(
       'name' => 'object-name' ));

Или получить объект по его ID номеру:

$object = $modx->getObject('object-class-name',$object-id);

Для получения ссылки на чанк, например, вам нужно использовать:

$chunk = $modx->getObject('modChunk',array(
       'name' => 'chunkName' ));

Чанк также можно получить по его ID, что даже быстрее. Этот способ также более надёжен, так как имя чанка может измениться, а вот его ID никогда:

$chunk = $modx->getObject('modChunk',$chunkId);

Использование ID сработает с любым типом объекта.

Для получения ресурса, который опубликован и имеет имя «Телефоны», вам нужно сделать это:

$document = $modx->getObject('modResource',array(
    'published' => 1,
    'pagetitle' => 'Телефоны'
));

Вот другой способ сделать это же:

$name = 'modResource';
$criteria = array(
    'published' => 1,
    'pagetitle' => 'Телефоны'
)
$document = $modx->getObject($name,$criteria)

Примечание: Общей ошибкой при получении ресурса является использование ‘name’ или ‘title’ вместо ‘pagetitle’. Ресурсы не имеют поля ‘name’ или ‘title’, но всё равно описание панели Create/Edit ресурса для поля название страницы — это ‘title.’

Вы можете также найти ресурс по его id, alias, menu title, и/или любому из полей с таблицы ниже. Если вы хотите, чтобы массив документов соответствовал вашему критерию, вы можете использовать getCollection() вместо getObject():

$docArray = $modx->getCollection('modResource',array(
    'published' => 1,
    'searchable' => 1
));

Помните, что getCollection() не возвращает пхп массив. Он возвращает массив объектов. Если вы хотите оперировать с полями объектов, как с пхп массивом, то вы должны использовать метод toArray():

$phpArray = $object->toArray();

Вы также можете использовать метод объекта get(), чтобы получить отдельное поле:

$resource->get('pagetitle');

С getObject() вы также можете использовать запрос как ваш критерий для getCollection() или getMany():

$tvCollection = $modx->getCollection('modTemplateVar', 
    "`name` IN ('" . implode("','", array('footer', 'header')) . "')");

Обратите внимание, что вы должны использовать поля показанные ниже в таблице с getObject(). Например, вам следует использовать ‘pagetitle’ для нахождения документов, но ‘name’ для нахождения сниппета или чанка.. Только если вы ходите получить объекты связанные с единственным объектом вы можете использовать метод getMany()

Подразумевая, что вы использовали getObject() для получения ссылки на ресурс или шаблон, вы можете получить их ТВ следующим образом:

Только если вы ходите получить объекты связанные с единственным объектом вы можете использовать метод getMany(). Подразумевая, что вы использовали getObject() для получения ссылки на ресурс или шаблон, вы можете получить их ТВ следующим образом:

$tvs = $template->resource->getMany('TemplateVars');

Похожим образом вы можете получить наследников:

$children = $resource->getMany('Children');

getObject() и getOne() возвращает null если запрошенный объект не найден, в то же время getMany() и getCollection() возвращают пустой массив, если нет соответствий заданному критерию.

Индивидуальные ресурсы (документы, вебссылки, внутренние ссылки и статические ресурсы) могут быть получены так:

$modx->getObject('modResource',$criteria);

Но также вы можете искать их отдельно:

$modx->getObject('modDocument',$criteria);
$modx->getObject('modWeblink',$criteria);
$modx->getObject('modSymlink',$criteria);
$modx->getObject('modStaticResource',$criteria);

Отдельные элементы (чанки, сниппеты, плагины, шаблоны, переменные шаблонов и категории) должны получаться используя ключ класса получаемого объекта:

$modx->getObject('modChunk',$criteria);
$modx->getObject('modSnippet',$criteria);
$modx->getObject('modPlugin',$criteria);
$modx->getObject('modTemplate',$criteria);
$modx->getObject('modTemplateVar',$criteria);
$modx->getObject('modCategory',$criteria);

Деплой

  1. На своей локальной машине нужно сделать синхронизацию файлов с удалённым репозиторием, чтобы убедиться, что в локальном репозитории все файлы в актуальном состоянии.
  2. Создаём метку, например «v1.0.666-pre», обозначая таким образом коммит, предшествующий сборке версии v1.0.666, для быстрого и удобного отката в случае неудачного деплоя.
  3. С помощью Gulp собираем новую версию проекта.

    Приводу пример gulp файла. Здесь я описал лишь одну задачу для копирования файлов из core/elements/dev в core/elements/web/, остальные таски, наверняка, сможете написать и сами.

  4. В результате сборки будут добавлены новые или изменены старые файлы в папках /assets/web/ и /core/elements/web/. Делаем коммит, назначем ему метку и делаем push с флагом —tags, чтобы отправить в удалённый репозиторий созданные метки.
  5. Через SSH подключаемся к серверу и переходим в корневую директорию сайта, подтягиваем данные из удалённого репозитория и делаем hard reset, чтобы привести все файлы сайта к тому виду, в котором они хранятся в репозитории.
  6. Смотрим результат в продакшене. Если я правильно представляю как устроен мир разработки и программирования, то примерно в 10 из десяти случаев что-то пойдёт не так. Поэтому переходим обратно в консоль, выполняем команду

    т.е. переводим продакшн-файлы в состояние до сборки и начинаем разбираться что не так.

прим. Пример дерева коммитов.

А что с ресурсами?

НовостиАрхив новостейdevdev.example.comdevwebwebdevdev

pdoTools. ПарсерpdoTools. Файловые элементыСинтаксис FenomПереключение контекстов в зависимости от URLContexts | MODX RevolutionUsing One Gateway Plugin to Manage Multiple DomainsНастройка IDE PHPStormПриятная сборка frontend проекта8 двухколёсных советов по MODX RevolutionGenerating a new SSH key and adding it to the ssh-agentGitHub. vanyaraspopov/start-code-modx

Расширенные настройки¶

Добавление группы модераторов

Итак, ранее в нашем вызове QuipReply мы указали группу модераторов ‘Moderators’. Давайте продолжим и создадим эту группу пользователей сейчас.

Перейдите в Безопасность -> Контроль доступа и создайте новую группу пользователей под названием «Модераторы». Добавьте в группу любых пользователей (включая себя!) И назначьте им любую роль.

Затем перейдите на вкладку «Доступ к контексту». Добавьте ACL (в основном строку), который предоставляет этой группе пользователей доступ в контексте «mgr» с минимальной ролью Member (9999), и политику доступа «QuipModeratorPolicy».

Это позволяет любому пользователю в группе «Модераторы» модерировать сообщения в ваших темах, а также уведомляет их по электронной почте о появлении новых сообщений. Затем они могут либо войти в систему менеджера, чтобы модерировать комментарии, либо щелкнуть ссылки прямо в письмах, чтобы одобрить или отклонить комментарии. Ваш ACL должен выглядеть примерно так:

Сохраните свою группу пользователей, и все! Возможно, вам придется сбросить сессии (Безопасность -> Сброс сессий) и повторно войти в систему, чтобы перезагрузить ваши разрешения, но Quip будет обрабатывать остальное.

Добавление виджета «Последние сообщения»

Возможно, вам понадобятся «Последние сообщения» где-то на сайте, и не бойтесь — добавить их довольно просто.

Во-первых, вы захотите сделать этот звонок везде, где вы хотите, чтобы появился список:

Итак, мы говорим getResources отобразить список из 5 лучших ресурсов в разделе ресурсов (34,35) и отсортировать их по дате публикации.

Затем создайте чанк , который вы указали с помощью вызова ‘tpl’ в вызове сниппета getResources. Поместите это как содержимое чанка:

И бум! Последние записи блога, отображаемые на вашем сайте:

Добавление виджета «Последние комментарии»

А как насчет виджета, который показывает несколько последних комментариев в ваших сообщениях? Просто — Quip вызываает маленький снипет под названием QuipLatestComments который с этим легко справиться.

Разместите вызов там, где вы хотите, чтобы список комментариев отображался:

Теперь создайте чанк с именем ‘latestCommentTpl’:

Прежде чем мы продолжим, следует отметить несколько вещей: QuipLatestComments автоматически обрежет комментарий и добавит многоточие после переданного в него свойства &bodyLimit, значение которого по умолчанию равно 30 символам

Во-вторых, обратите внимание на использованный здесь «назад» фильтр вывода «Фильтры ввода и вывода (модификаторы вывода)»). Этот фильтр встроен в MODX Revolution и переводит временную метку в красивый, симпатичный формат «два часа, 34 минуты» (или две другие метрики времени, такие как мин/сек, год/месяц, месяц/месяц)

Обратите внимание, что по умолчанию будет отображаться 5 последних. Результат:

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

Добавление виджета «Самые популярные теги»

Эта часть смехотворно проста tagLister делает это для вас. Просто поместите это куда хотите

А tagLister проверит TV ‘tags’ и создаст ссылки, которые идут к цели (здесь ID ресурса 1) с использованием 10 лучших тегов. Есть еще варианты конфигурации, но мы оставим вас с этим.

Проблемы и решения

При работе с pdoParser, при использовании fenom шаблонизатора, разработчики часто встречаются с выводом белого экрана вместо страниц сайта. Сергей Шлоков в своей статье — Почему не работает тег ignore, подробно расписал механику работы pdo парсера и объяснил, что именно вызывает ошибку.

Если front-end вашего сайта лег (белая страница или ошибка 500), а в логах вы встречаете подобные ошибки:

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

Пробелы вокруг фигурных скобок

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

Тег {ignore}

Часто не удобно проставлять пробелы вокруг скобок, так как кода может быть много, он может добавляться постоянно, очень просто пропустить какую-то скобку. В таких случаях удобно использовать тег {ignore}

Но надо помнить, что внутри этого тега fenom не работает. Тег {ignore} должен присутствовать в итерации, после которой больше не будет тегов Fenom. К сожалению, добиться этого не всегда получается. В новой версии pdoTools эта ошибка исправлена, но она всё равно возникает при использовании файловых элементов.

От автора сайта modzone

  1. Указать в шаблоне кэшируемый тег ] вместо {$_modx->resource.content}.
  2. Перенести блок с тегом {ignore} в ресурс (зачастую такие теги размещают в чанках).

Встроенные модификаторы

Это удобно когда вы подключаете JS-код. Например можно воспользоваться модификатором jsToBottom. @iWatchYouFromAfar приводит в пример следующий код:

Свой модификатор ignore

Можно так же написать свой модификатор ignore с помощью события pdoToolsOnFenomInit. Это намного лучше, чем делать ради этого отдельно сниппет. Этот вариант удобен, когда вы используете {} вне JS кода, например в разметке элемента.

Использование:

Контекст

WebsiteКонтекстMgr

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

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

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

Набор параметров

Набор параметров – это MODX объект, который содержит ассоциативный массив ключей и значений (схожих с Системными настройками). Набор параметров может быть прикреплён к элементам на вкладке Свойства элемента (доступные при редактировании элемента в Менеджере) или из Инструментов — Набор параметров в Основном меню Менеджера. Элемент может иметь более одного Набора параметров прикреплённых к нему и Набор параметров может быть прикреплён более, чем к одному элементу. Прикрепление набора параметров делает его доступным к элементу, это делается следующим образом:

]
]

Прикреплённый к сниппету Набор параметров играет роль набора параметров сниппета (бывших параметров). Для чанка или другого элемента, значения в Наборе параметров будут заменены тегами плейсхолдера в чанке, который использует ключ от Набора параметров. Например, чанк «MyChunk» с набором параметров «MyProperties» будет выглядеть так:

]

Если есть параметр «make» со значением «Ford,» плейсхолдер будет заменён на Ford в отображаемом чанке.

Когда вы вызываете сниппет с набором параметров в теге:

]

Значения в выбранном Наборе параметров перезапишут значения Набора параметров по-умолчанию сниппета и параметра отправятся в тег сниппета (&property1 и &property2) и перезапишут значения на значения названного набора параметров. Конечно, это справедливо для параметров с одинаковыми именами
То же самое происходит с другими элементами с прикреплёнными Наборами параметров. Значения Набора параметров перезапишут любые параметры по-умолчанию с теми же именами.

Настройка modx revolution после установки

https://youtube.com/watch?v=okA5oZTVs88Video can’t be loaded because JavaScript is disabled: Настройка MODX Revolution после установки (https://youtube.com/watch?v=okA5oZTVs88)

Заходим в админку MODX и переходим на панель настроек «Системные настройки».

Здесь можно фильтровать настройки, относящиеся к тому или иному компоненту системы MODX, а также настройки, относящиеся к одному и тому же компоненту, но сгруппированные по категориям в зависимости от выполняемой функции.

Идем по порядку (по категориям).

Настраиваем (правим) следующие параметры для ядра (core).

Авторизация и безопасность

Кеширование пропускаем

Визуальный редактор

Редактор — which_editor — TinyMCE RTE (он сам должен поставиться если вы его установили)

Редактор для элементов — which_element_editor — Ace (он тоже сам должен поставиться если вы его установили)

Файловая система

Максимальный размер загрузки — upload_maxsize — 629145600 или какой вам нужно (я установил данный параметр в 600 МБ для возможности загружать видео файлы).

Дружественные URL

Пока что пропускаем, по их настройке будет отдельная статья: Настройка ЧПУ MODX (откроется в новом окне).

Шлюз пропускаем.

Словарь и язык 

Локаль — locale — ru_RU.utf8

Почта — здесь вы можете настроить отправку почты через SMTP, пока пропускаем.

Система управления

Источник файлов по умолчанию — default_media_source стоит 1, но рекомендую создать новый источник файлов и указать его)

Понедельник в России.

Разместить TV ниже контента — tvs_below_content — Да

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

Поле для названия узла в дереве ресурсов — resource_tree_node_name — menutitle

Делается для того, чтобы названия ресурсов в дереве с лева были покороче.

Поле для подсказки для узла в дереве ресурсов. — resource_tree_node_tooltip — alias

Делается для того, чтобы можно было понять, какой у ресурса адрес

Показывать экран приветствия — welcome_screen — нет

Прокси, сессии и куки пропускаем.

Сайт

Шаблон по умолчанию — default_template — ставим наиболее часто используемый шаблон (пока их еще не создавали, но создадим)

Скрыть из меню по умолчанию — hidemenu_default — Да

У вновь создаваемых ресурсов (страниц) по умолчанию будет снята галочка «Отображать в меню». В любой момент её можно будет включить. Но зачем лишний раз снимать галочку, ведь не все создаваемые в дальнейшем страницы сайта будут отображаться в меню. Установив опцию в «Да» вам в дальнейшем не нужно будет совершать лишних действий.

Схема URL — link_tag_scheme — full. Будут генерится полные пути до ресурсов.

Публиковать по умолчанию — publish_default — Да

Та же история, что и с предыдущей опцией, только наоборот. При создании страницы уже будет стоять отметка «Опубликовать». Если ресурс не опубликован, то он будет недоступен посетителям сайта. Но мы же создаём публичные страницы – так ведь?

Название сайта — site_name — введите название сайта, доступное в дальнейшем для вставки плэйсхолдером ]. Любое название, например, Строительная компания ООО «Рога и копыта».

Сообщение о недоступности сайта — site_unavailable_message — Сайт находится на техническом обслуживании. Пожалуйста, зайдите чуть позже.

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

В Страница ошибки 404 «Документ не найден» — error_page, Страница «Сайт не доступен» site_unavailable_page и Страница ошибки 403 «Доступ запрещен» unauthorized_page стоят единицы (т.е. переадресовывается все на главную страницу, рекомендую создать для этих ошибок отдельные страницы и назначить их в настройках)

Статические элементы — тех кто работает с файлами можете настроить.

Система и сервер

К остальным настройкам MODX мы будем возвращаться по необходимости.

В следующем уроке мы настроим ЧПУ MODX.

MODX pdoField — получение и вывод полей родителя (ей)
MODX Revolution уроки для начинающих >

QuadBraces — по мотивам парсера MODx

Recovery Mode

Доброго здравия хабражителям!
Когда я заглянул в исходники MODx Evolution, меня едва ли не хватил удар. Рефакторить, рефакторить и рефакторить, как, наверное, сказал бы Ильич. По сему меня хватило едва ли на пару недель рефакторинга, после чего я забросил это дело, ибо времени откровенно не было. Но разговор пойдёт не об этом.
Система шаблонизации MODx на мой взгляд — одна из самых лучших. Особенно хорошо постарались разработчики в MODx Revolution. Всё логично, расширяемо, гибко и прям-таки пасторально. Можно сказать, синтаксис шаблонизации MODx — это почти что отдельный язык разметки. Именно такое вот восхищение стало причиной, по которой я стал использовать эту методику в других проектах. И для того, чтобы не заколачивать микроскопом гвозди, то есть не ставить для лендингов MODx, но иметь возможность использовать эту шаблонизацию, я написал отдельный класс шаблонизатора. И даже дал название — QuadBraces.

Настройка ЧПУ для сайта

Но перед тем как переходить к настройке ЧПУ, давайте разберёмся что означает этот термин.

Понятие ЧПУ

ЧПУ – это понятный для человека веб-адрес страницы сайта, т.е. тот который Вы видите в адресной строке браузера.

Например, адрес веб-страницы на MODX без ЧПУ выглядит следующим образом:

Этот адрес содержит страницу (ресурс), которая имеет идентификатор 2 во внутренней структуре CMS MODX Revolution. Такая запись не является понятным пользователю, да и поисковым машинам Google и Yandex она не очень понятна, что в итоге может привести к более низким позициям при выдаче сайта в этих системах.

Совсем другое дело, когда адрес веб-страницы выводится с помощью ЧПУ, такой адрес отражает понятную для человека иерархию данных на сервере, например:
Данный адрес отображает страницу «labels-and-icons», которая находится в контейнере «bootstrap-3», а он, в свою очередь, содержится в контейнере «articles».

Настройка файла .htaccess для ЧПУ

Настройка веб-сервера для работы с ЧПУ осуществляется посредством конфигурационного файла :

  1. Переименовываем файл в .
  2. Открываем файл , находящийся в корневой директории MODX (например, в «») с помощью текстового редактора.
  3. Проверяем, чтобы 3 следующие строчки, идущие после комментария (The Friendly URLs part), были разкомментированы:
    # The Friendly URLs part
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 

    Эти строчки обеспечивают интерпретацию адресов в ЧПУ на сервере.Для работы вышеприведённых преобразований в файле должна быть включена (до вышеприведённых строчек) директива .

    RewriteEngine on
  4. Кроме этого сразу же можно настроить ещё одно преобразование, которое будет выполнять редирект с на или обратно (с на ). Это осуществляется в зависимости от того, какое имя имеет ваш сайт, а именно с или без .
  5. Изменяем строчку на имя домена, в нашем случае на . А строку на . Так же не забываем убрать знак , чтобы раскомментировать данные строки. После выполнения вышеперечисленных действий эти строки должны выглядеть следующим образом:
  6. Сохраняем изменения в файле.

Настройка параметров системы MODX Revolution для ЧПУ

Для настройки ЧПУ в CMS MODX Revolution необходимо перейти в раздел «Настройка системы» и в поле «Фильтр по разделу…» выбрать из списка пункт «Дружественные URL».

В открывшейся таблице необходимо изменить значения следующих параметров:

  1. Использовать дружественные URL -> Да.
  2. Проверять на дублирование URI во всех контекстах -> Да.
  3. Использовать вложенные URL -> Да. Данный параметр рекомендую использовать, т.к. в этом случае в URL адрес будут включаться названия всех контейнеров на пути к выводимому ресурсу, что будет более наглядно и для веб-разработчика и для посетителей сайта. Также при использовании данного параметра необходимо применять либо полные пути к файлам (изображения, css, javascript и т.д.), либо использовать тег <base /> () в заголовке веб-страницы.
  4. Строгий режим дружественных URL -> Да. Данный параметр тоже рекомендую использовать, т.к. это исключит дублирование контейнеров (например: и ).
  5. Автоматически генерировать псевдонимы ->Да. Данному параметру необходимо установить значение «Да», если вы не хотите вручную вводить для ресурсов, которые вы будете создавать.
    Примечание: Для автоматической транслитерации псевдонимов необходимо установить пакет «yTranslit» или «translit».
  6. Транслитерация псевдонимов -> . Данный параметр установите в , если на сайте Вы хотите использовать транслитерацию для псевдонимов ресурсов (например: -> ).

В итоге для настройки ЧПУ в CMS MODX Revolution мы выполнили следующие действия:

Основные Объекты и их свойства

Хотел сделать этот список таблицей, но пока показываю в виде списка. Во всей статье на данный список идёт сноска как на таблицу…

Document/Resource (class name = ‘modResource’)

  • id (int – Идентификатор ресурса)
  • pagetitle (text)
  • isfolder (int 0/1)
  • longtitle (text)
  • description (text)
  • alias (text)
  • published (int 0/1)
  • introtext (text — аннотация)
  • content (text)
  • template (int – id номер шаблона)
  • menuindex (int)
  • searchable (int 0/1)
  • cacheable (int 0/1)
  • createdby (int id номер пользователя)
  • editedby (int id номер пользователя)
  • deleted (int 0/1)
  • deletedby (int id номер пользователя)
  • publishedby (int id номер пользователя)
  • createdon (date – дата первого сохранения)
  • publishedon (date – дата последней смены статуса ресурса на опубликованный)
  • editedon (date – дата последнего редактирования ресурса)
  • menutitle (text)
  • hidemenu (int 0/1)
  • Связанные объекты, доступные через getOne()
    1. Parent (class=»modResource»)
    2. Template (class=»modTemplate»)
    3. CreatedBy (class=»modUser»)
    4. EditedBy (class=»modUser»)
    5. DeletedBy (class=»modUser»)
    6. PublishedBy (class=»modUser»)
    7. ContentType (class=»modContentType»)
  • Связанные объекты, доступные через getMany()
    1. Children (class=»modResource»)
    2. TemplateVars (class=»modTemplateVar»)
    3. TemplateVarTemplates (class=»modTemplateVarTemplate»)

Чанк (class name = ‘modChunk’)

  • name (text)
  • description (text)
  • category (int — id номер категории)
  • snippet (text – содержимое чанка)
  • locked (int 0/1 – закрытое для редактирования)
  • Связанные объекты доступные через getOne()
  • Category (class=»modCategory»)
  • Связанные объекты доступные через getMany()
    1. PropertySets (class=»modElementPropertySet»)

Сниппет (class name = ‘modSnippet’)

  • name (text)
  • description (text)
  • category (int — id номер категории)
  • snippet (text – содержимое сниппета)
  • locked (int 0/1 – заблокирован для редактирования)
  • properties (text)
  • Связанные объекты доступные через getOne()
  • Category (class=»modCategory»)
  • Связанные объекты доступные через getMany()
    1. PropertySets (class=»modElementPropertySet»)

Плагин (class name = ‘modPlugin’)

  • name (text)
  • description (text)
  • category (int — category id number)
  • plugincode (text — plugin’s contents)
  • locked (int 0/1 — AKA locked for editing)
  • properties (text)
  • disabled (int 0/1)
  • Связанные объекты доступные через getOne()
    1. Category (class=»modCategory»)
    2. Связанные объекты доступные через getMany()
    3. PropertySets (class=»modElementPropertySet»)
    4. PluginEvents (class=»modPluginEvent»)

Шаблон (class name = ‘modTemplate’)

  • templatename (text)
  • description (text)
  • category (int — id категории)
  • content (text)
  • icon (text)
  • locked (int 0/1)
  • Связанные объекты доступные через getOne()
    1. Category (class=»modCategory»)
    2. Связанные объекты доступные через getMany()
    3. PropertySets (class=»modElementPropertySet»)
    4. TemplateVarTemplates (class=»modTemplateVarTemplate»)

Переменная шаблона (class name = ‘modTemplateVar’)

  • type (text)
  • name (text)
  • caption (text)
  • description (text)
  • category (int — category id)
  • locked (int 0/1)
  • elements (text)
  • rank (int)
  • display (text)
  • display_params (text)
  • default_text (text)
  • Связанные объекты доступные через getOne()
    1. Category (class=»modCategory»)
  • Связанные объекты доступные через getMany()
    1. PropertySets (class=»modElementPropertySet»)
    2. TemplateVarTemplates (class=»modTemplateVarTemplate»)
    3. TemplateVarResources (class=»modTemplateVarResource»)
    4. TemplateVarResourceGroups (class=»modTemplateVarResourceGroup»)

User (class name = ‘modUser’)

  • username (text)
  • password (text)
  • cachepwd (text)
  • Связанные объекты доступные через getOne()
    1. Profile (class=»modUserProfile»)
  • Связанные объекты доступные через getMany()
    1. CreatedResources (class=»modResource»)
    2. EditedResources (class=»modResource»)
    3. DeletedResources (class=»modResource»)
    4. PublishedResources (class=»modResource»)
    5. SentMessages (class=»modUserMessage»)
    6. ReceivedMessages (class=»modUserMessage»)
    7. UserSettings (class=»modUserSetting»)
    8. UserGroupMembers (class=»modUserGroupMember»)

Профиль пользователя (class name = ‘modUserProfile’)

  • fullname (text)
  • role (int)
  • email (text)
  • phone (text)
  • mobilephone (text)
  • blocked (int 0/1)
  • blockeduntil (int — date)
  • blockedafter (int — date)
  • logincount (int)
  • lastlogin (int — date)
  • thislogin (int — date)
  • failedlogincount (int)
  • sessionid (text)
  • dob (int — date)
  • gender (int 0/1)
  • country (text)
  • state (text)
  • zip (text)
  • fax (text)
  • photo (text)
  • comment (text)
  • Связанные объекты доступные через getOne()
    1. User (class=»modUser»)
    2. UserRole (class=»modUserRole»)

Параметры тегов

К тегам можно применять параметры и фильтры и таким образом изменять их вывод. Например, можно добавить несколько параметров к автоматически сгенерированному URL-адресу:

<a href="]">Здесь</a>

Из примера видно, что синтаксис с применением параметров слегка отличается от параметров в привычной строке запроса URL. Вопросительный знак обозначает начало списка параметров, и каждый параметр начинается со знака &, а значение заключаются в обратные кавычки.

Вывод приведенного выше тега будет выглядеть следующим образом:

<a href="yourpage?section=food&sort=asc">Здесь</a>

Сниппет также можно снабдить дополнительными данными, если запустить его подобным образом:

]

Мы запускаем сниппет с названием MyCustomSnippet, и задаем ему дополнительные данные через поле input со значением something tasty. В PHP автоматически создается переменная с именем $input, которую позже можно использовать в сниппете.

Теги можно встраивать друг в друга. Один из популярных тегов выглядит следующим образом:

<a href="]]]">Ссылка на страницу</a>

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

В иных случаях можно запускать HTML-код и выводить динамические данные, извлекаемые из сниппета. Выглядеть это будет так:

]`]]

Тег chunk использует сниппет для того, чтобы знать, о каких именно данных идет речь.

Так как приведенный выше тег запускает фрагмент, состоящий только из HTML-кода, то как он считывает значения данных? Они доступны автоматически благодаря тегу placeholder:

<h2>Заголовок</h2>
<p>]</p>

Заглушки (placeholders) чаще всего используют именно так.

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

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

Adblock
detector