Modx вывести TV в шаблоне

pdoTools — это набор удобных инструментов (сниппетов) для повседневной работы. Дополнительно включает небольшую библиотеку, которая увеличивает скорость работы сниппета.

Cистема построена на собственной ORM под названием xPDO. Она очень упрощает работу, позволяет писать один универсальный код для разных БД, и еще много чего.

Особенности:

  • Быстрая работа с БД (запросы составляются на xPDO, а выбираются без объектов — на PDO).
  • Предварительная обработка простых плейсхолдеров в чанках (парсер MODX задействован только при работе со сложными вызовами.
  • Код чанков можно указывать прямо при вызове сниппета, загружать обычным образом или из статичных файлов.
  • Предусмотрена сортировка, подготовка, обработка и вывод ТВ параметров.
  • Ведение подробного журнала работы сниппета с отметками времени, для отладки.
  • Возможность загрузки классов и множество функций, которые можно применять в своих разработках.
  • Встроенный шаблонизатор Fenom в версии 2.0
  • В настоящее время в комплект входит 10 универсальных сниппетов (со временем появляются новые инструменты)

Набор универсальных сниппетов:

MODX tv (дополнительные поля / переменные)

  • pdoResources — инструмент для выборки ресурсов (очень быстрая замена для getResources, совместимая по параметрам). Он поддерживает почти все его возможности, и бладает особенностями:
    — подключение других таблиц через разные JOIN
    — можно указывать, что именно выбирать из колонок таблиц
    — гибкие условия выборки, вплоть до указания чистого SQL
  • pdoMenu — инструмент для постоения различных меню (замена для Wayfinder)
  • pdoUsers — выборка и вывод пользователей сайта, с фильтрацией по ролям и группам.
  • pdoCrumbs — генерация хлебных крошек (замена BreadCrumb).
  • pdoSitemap — генерация карты сайта (очень быстрая замена GoogleSiteMap
  • pdoNeighbors — инстумент вывода ссылок на соседние документы.
  • pdoField — инструмент получающий любое поле ресурса или его родителя, включая ТВ параметр. Имеет возможность вывода по умолчанияю. Отличная замена getResourcesField и UltimateParent.
  • pdoPage — постраничный вывод результатов (замена getPage).
  • pdoTitle — выводит оформленный тег title на страницу сайта, который состоит из имени страницы, имён родителей этой страницы и, других параметров. Предназначен для визульного различия документов с постраничной навигацией.
  • pdoArchive — предназначен для вывода архива документов сайта с разбивкой на годы, месяцы и дни.

Классы pdoTools

Ядро компонента разделено на 3 класса: общий pdoTools, работа с БД — pdoFetch и работа с оформлением, то есть pdoParser.

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

$pdoTools = $modx->getService(‘pdoTools’); $pdoFetch = $modx->getService(‘pdoFetch’); $pdoParser = $modx->getService(‘pdoParser’);

pdoFetch наследует pdoTools, так что не нужно вызывать эти два класса вместе. Если вы хотите работать с БД, вызывайте один Fetch, а если нет — Tools.

Дополнительные поля (TV) в MODX Revolution

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

Установка pdoTools осуществляется стандартным образом из официального репозитория modx.com или c modstore.pro

Общие параметры для сниппетов, основанных на pdoTools/pdoFetch.

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

Эти параметры определяют, какие объекты будут получены.

Название По умолчанию Описание
parents Текущий ресурс Список родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
resources Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
context Ограничение выборки по контексту ресурсов.
showHidden 0 Показывать ресурсы, скрытые в меню.
showDeleted 0 Показывать удалённые ресурсы.
hideUnsearchable Отключает вывод спрятанных от поиска ресурсов.
modResource»:»id,pagetitle,content»}.
rightJoin Аналог SQL оператора right join
joinSequence innerJoin,leftJoin,rightJoin Порядок подключения таблиц, через зяпятую.
includeTVs. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()»
groupby Указывает поле, по которому группируются результаты
groupby
offset 0 Пропуск результатов от начала.
last Автоматически, по формуле (total + first — 1) Номер последней итерации вывода результатов.
loadModels=`ms2gallery,msearch2`.
tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ.
Разделитель для условий AND в параметре tvFiltersOrDelimiter «||» Разделитель для условий OR в параметре sortbyTV Дополнительное поле, по которому нужно сортировать результаты. Может быть указано напрямую в параметре sortdirTV Направление сортировки по дополнительному полю, указанному в sortby
checkPermissions Укажите, какие разрешения нужно проверять у пользователя при выводе объектов.
fenomModifiers список сниппетов-модификаторов через запятую, для подключения в Fenom.
Еще по теме:  Нет канала history на Триколор ТВ
Параметры шаблонов

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

Название Описание
tplFirst Имя чанка для первого ресурса в результатах.
tplOdd Имя чанка для каждого чётного ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов).
tpl_4=`tpl4th` установит шаблон для 4-го ресурса.
tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу.
conditionalTpls.
tplCondition с массивом значений и чанков в conditionalTpls JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться tplOperator. Для операторов типа isempty можно использовать массив без ключей.
return chunks Определяет способ вывода результатов. См. ниже.
nestedChunkPrefix pdotools_ Префикс для «быстрых плейсхолдеров», включаемых параметром idx Вы можете указать стартовый номер итерации вывода результатов.
includeContent 0 Включаем поле «content» в выборку.
includeTVList Псевдоним prepareTVs 1 Список ТВ параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить в «1», будут подготовлены все ТВ, указанные в processTVs Список ТВ параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить в «1», будут обработаны все ТВ, указанные в tvPrefix tv. у pdoResources и пусто у других сниппетов Префикс для ТВ параметров.
decodeJSON Разбирает поля типа JSON вместо вывода в виде строки
useWeblinkUrl Генерировать ссылку с учетом класса ресурса.
additionalPlaceholders Устанавливает дополнительные плейсхолдеры
cache_handler Значение системной настройки cache_resource_handler или xPDOFileCache Обработчик кеша
return . В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать parents=`0` Array».
  • ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр https://amy.ru/web/pdotools-dlya-modx.html» target=»_blank»]amy.ru[/mask_link]

    Modx вывести tv в шаблоне

    Заказчик хочет получить сайт на MODx. Изучаю его по русским обучалкам, параллельно превращая верстку заказчика в живой сайт. В целом, MODx — это отличный конструктор, нацеленный на обычного юзера с нормальной тягой к саморазвитию. Я понял его идеологию «с разбега», но с таким трудом до меня доходил смысл TV, что скрип мыслей слышали соседи 😀 Читал несколько разных источников с объяснениями, и все равно не понимал. В итоге осенило 🙂 А когда написал эту заметку, вернулся на сайт разработчиков MODx и без проблем нашел следующее определение:

    «Переменные шаблона (template variable, TV) — настраиваемое поле ресурса в MODx. TV используется для расширения заданных по умолчанию атрибутов ресурса. Нормальный ресурс MODx обладает определенным количеством дефолтных полей: pagetitle, content, description и т.д.» (перевод официального RTFM)

    Это все, что нужно знать о TV, когда видишь их в первые. Но проблема в том, что дальше в том же RTFM (как и в русских источниках) начинается сдвиг понятий 🙁 «Если вам нужно добавить несколько полей на ваши страницы, например второе поле контента или выпадающий список месяцев или еще что-угодно, вы делаете это добавлением Переменной Шаблона (TV) в ваш шаблон.» Так вот не надо так это объяснять.

    Подходим к переменным шаблона (TV). На самом деле — это поля ресурса! Как раз когда под хотелки разраба не хватает предусмотренных по умолчанию полей, он заводит TV и связывает ее с ресурсом. Но черт возьми, какого ж фига это делается через шаблон!? Вот это долго сбивало с толку.

    Вообщем логика простая: нужно в вашей записи блога/магазина/еще-чего-то новое поле для каких-то данных — заведите TV и свяжите ее с ресурсом. Но делается это через указание шаблонов, имеющих доступ к TV. Шаблоны в свою очередь назначены для отображения записей (ресурсов).

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

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

    IMHO, зря создатели MODx отошли от общепринятых понятий и создали свой словарь. К примеру «атрибуты» — это на самом деле «поля». И раз уж ресурс — это запись в таблице, то можно было его так и называть. И логичнее было бы «переменные шаблона» называть «полями ресурса». Но это мое мнение.

    Понравилась статья? Расскажите о ней друзьям:

    Источник: waredom.ru

    MODx Revo API (xpdo)

    Небольшое описание, о том как пользоваться modx revo api

    8359 23 August 2016 1 документация, modx revo, xPDO

    Текущий ресурс / Текущий пользователь

    $currentResource = $modx->resource; $currentUser = $modx->user;

    Если пользователь не залогинен в контексте, имя пользователя будет ‘(anonymous)’.

    Поля для каждого объекта доступны через метод get(). getContent() для содержания (контента) ресурса.

    $intro = $modx->resource->get(‘introtext’); $UserID = $modx->user->get(‘id’); $content = $modx->resource->getContent();

    Ищем другие объекты.

    $resource = $modx->getObject(‘modResource’, $id);

    Ссылки на все объекты MODx можно получить с помощью метода $modx->getObject().

    $object = $modx->getObject(‘object-class-name’, array(‘name’ => ‘object-name’ ));
    $object = $modx->getObject(‘object-class-name’, $object-id);

    Получить ссылку на чанк по имени.

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

    Получить ссылку на чанк по id.

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

    Получить опубликованный ресурс по имени (pagetitle).

    $document = $modx->getObject(‘modResource’,array( ‘published’ => 1, ‘pagetitle’ => ‘Джузеппе’ ));
    $name = ‘modResource’; $criteria = array( ‘published’ => 1, ‘pagetitle’ => ‘Джузеппе’ ) $document = $modx->getObject($name,$criteria);

    Для получения массива документов, отвечающих вашим критериям, вы можете использовать getCollection() вместо getObject().

    Такой пример выведет все опубликованные и доступные для поиска ресурсы.

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

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

    $phpArray = $object->toArray();

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

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

    Чтобы получить дочерние ресурсы:

    $children = $resource->getMany(‘Children’);

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

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

    $modx->getObject(‘modResource’,$criteria);

    И по отдельности.

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

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

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

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

    $modx->getOption(‘site_name’);

    Получение поля объекта с помощью $object->get()

    После того как вы получили объект с помощью getObject(), getCollection(), или getMany(), вы можете использовать с $object->get() для получения любого поля объекта по названию.

    $resource = $modx->getObject(‘modResource’,1); $pagetitle = $resource->get(‘pagetitle’); $longtitle = $resource->get(‘longtitle’); $id = $resource->get(‘id’); .

    Связи $object->getOne() и $object->getMany() с объектами.

    Чтобы получить родительский ресурс как объект MODx.

    $parentRes = $resource->getOne(‘Parent’);

    Получения пользователем объекта пользователя, который создал ресурс.

    $user = $resource->getOne(‘CreatedBy’);

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

    $user->getOne(‘Profile’);

    Выпихнуть поля можно так.

    $profile->get(‘fullname’); $profile->get(‘website’); .

    ТВшки (Template Variables)

    Получение обработанного значение TV текущего документа.

    $modx->resource->getTVValue(‘image’);
    $modx->resource->getTVValue($id); // Указываем id TV

    Или получить значение TV по pagetitle нужного нам ресурса.

    Такой код выведет значение image ресурса со значением pagetitle = Джузеппе.

    $resource = $modx->getObject(‘modResource’,array( ‘pagetitle’=>’Джузеппе’ )); $val = $resource->getTVValue(‘image’);
    // id ресурса из которого получим TV $id = ’17’; // какое TV $tv = $modx->getObject(‘modTemplateVar’, array( ‘name’=>’image’ )); // получаем значение TV ресурса. $value = $tv->getValue($id); // Обрабатываем TV и получачем что хотели. $processed = $tv->renderOutput($id);

    Изменение объектов

    После получения ссылки на объект с помощью $modx->getObject(), вы можете изменить значение ее поля.

    $resource = $modx->getObject(‘modResource’, ‘1’); $resource->set(‘pagetitle’, ‘Джузеппе’); $resource->save(); // теперь у ресурса с id 1 значение поля pagetitle = Джузеппе
    $object->setContent(‘Джузеппе’); $object->save();

    Создание нового объекта

    $object = $modx->newObject(‘modChunk’); $object->set(‘name’, ‘juzeppe’); $object->setContent(‘Тут у нас Джузеппе.’); $object->set(‘description’, ‘Эт я’); $object->save(); // теперь у нас есть чанк «juzeppe» с контентом «Тут у нас Джузеппе.» и описанием «Эт я»

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

    Вот список наиболее часто используемых объектов с их имена классов и имена некоторых из своих полей и типов. Связанных объектов, доступных с getOne() и getMany() приведены ниже поля для каждого объекта.

    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)
    • donthit (int 0/1) (устарел)
    • haskeywords (int 0/1) (устарел)
    • hasmetatags (int 0/1) (устарел)
    • hidemenu (int 0/1)
    Связанные объекты доступны getOne()
    Связанные объекты доступны в getMany()
    • Children (class = «modResource»)
    • TemplateVars (class = «modTemplateVar»)
    • TemplateVarTemplates (class = «modTemplateVarTemplate»)

    modChunk

    • name (text)
    • description (text)
    • category (int — category id number)
    • snippet (text — chunk’s contents)
    • locked (int 0/1- то есть заблокирован для редактирования)
    Связанные объекты доступны getOne()
    • Category (class = «modCategory»)
    Связанные объекты доступны в getMany()
    • PropertySets (class = «modElementPropertySet»)

    modSnippet

    • name (text)
    • description (text)
    • category (int — category id number)
    • snippet (text — snippet’s contents)
    • locked (int 0/1 — AKA locked for editing)
    • properties (text)
    Связанные объекты доступны getOne()
    • Category (class = «modCategory»)
    Связанные объекты доступны в getMany()
    • PropertySets (class = «modElementPropertySet»)

    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()
    • Category (class = «modCategory»)
    Связанные объекты доступны в getMany()
    • PropertySets (class = «modElementPropertySet»)

    modTemplate

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

    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()
    • Category (class = «modCategory»)
    Связанные объекты доступны в getMany()
    • PropertySets (class = «modElementPropertySet»)
    • TemplateVarTemplates (class = «modTemplateVarTemplate»)
    • TemplateVarResources (class = «modTemplateVarResource»)
    • TemplateVarResourceGroups (class = «modTemplateVarResourceGroup»)

    modUser

    • username (text)
    • password (text)
    • cachepwd (text)
    Связанные объекты доступны getOne()
    • Profile» (class = «modUser»)
    Связанные объекты доступны в getMany()

    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()
    • User (class = «modUser»)
    • UserRole (class = «modUserRole»)

    Источник: pitrooo.ru

    Оцените статью
    Добавить комментарий