Modx вывести значение TV

Понадобилось мне навесегда избавиться от дублей (заказчику это очень не нравилось и Яндексы всякие с ним были солидарны), в общем погуглил-погуглил, нашел решение, но для Revolution.

По сути, получается очень удобный выбор категорий, в которых товар может содержаться. Выбирать можно как галочками, так и списком с множественным выбором (с помощью Ctrl+click). Красота да и только.

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

Ну, начнем, пожалуй. Все создаем по очереди.

Чанк >

Чанк я сделал для более красивого и информативного вывода чекбоксов. Показывает окошко чекбокса, имя категории и серым ее ID (иногда чтобы не искать полезно делжать перед глазами — заказчика не парит и мне в помощь)

[+pagetitle+] (id: [+id+])==:[+id+]:||

Параметр (TV) [*catMultiCheck*]

Тип ввода: CheckBox (можно поставить и «Множественный выбор» — это уж кому как больше нравится)

Возможные значения:

Доступ шаблонов: products

modx tv

После сохранения — в админке появятся категории. Теперь подробно разжую зачем это нужно (новичкам пригодится):

Теперь про то, что мы суем в массив.

  • ‘startID’=>0, — откуда ничинаем. У меня все категории в корне лежат, так что стоит ноль.
  • ‘depth’=>2, — глубина. Как много в этом слове. Если поставить 1 — будем копаться только в текушем уровне, т.е. подкатегории не найдутся. Поэтому два. Если есть под-подкатегории — ставьте три.
  • ‘where’=>’isfolder=1’, — проверяем на категорию (контейнер). Мне нужны только контейнеры, поэтому 1. Если нужны НЕ контейнеры — ставим ноль. Вообще, where здесь (кстати, регистр следует соблюдать) указывает на то, что дальше будет реальный WHERE SQL-запроса на тот случай, если нужно руками выбрать что-то как в нашем случае.
  • ‘sortBy’=>’’, — сортировка. Тут особо даже сказать нечего.
  • ‘tpl’=>’tplCatMultiCheck’ — показываем пальцем на шаблон (тут указан чанк, но можно и имя файла указать).

Все это добро должно быть одной строкой.

Сниппет [[getIDLikeByTV]]

Отдельное спасибо комментатору Сергей со страницы автора решения для [Revo]- часть кода предложена им, допилена мной.

else < $this_all_url = $like; >$ids_arr = array(); $query = $modx->db->query(» SELECT `id`, `contentid` FROM `».$modx->db->config[‘table_prefix’].»site_tmplvar_contentvalues` WHERE tmplvarid=».intval($tmplvarid).» AND value LIKE ‘%:$like:%’ «); $result = $modx->db->makeArray($query); foreach ($result as $ar) < array_push($ids_arr,$ar[‘contentid’]); >$ids_str = implode(‘,’,$ids_arr); $res = $modx->runSnippet(‘Ditto’, array( ‘parents’ => $like, ‘tpl’ => ‘shopStuff’, ‘paginate’ => ‘1’, ‘sortBy’ => ‘menuindex’, ‘sortDir’ => ‘ASC’, ‘documents’ => $ids_str )); return $res.$item.$all_prod; ?>

Шаблоны (вызов сниппета для вывода товаров)

Шаблоны main, category (опять же, у меня).

Создание корпоративного сайта на MODX Revolution 4 урок Управление контентом на MODX Revo TV ТВ поля

Здесь вот что стоит отметить — tmplvarid=`23` — это ID TV-параметра catMultiCheck. Какой у вас показывает — тот и ставьте вместо 23.

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

pdoTools для MODx

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

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

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

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

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

  • 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.

Парсер вызывать вообще не нужно, он или включен в настройках 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.
Параметры шаблонов

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

Еще по теме:  Что такое ТВ в батле
Название Описание
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 Revolution — принципы работы, создание, вызов, передача параметров

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

    Автор статьи - Олег Толочко

    Олег Толочко , 30 Апреля 2023
    513 просмотрели, 0 комментировали

    В CMF MODX Revolution сниппет (snippet) — это фрагмент PHP-кода, который может быть вызван в полях ресурса, чанке, шаблоне или другом сниппете для выполнения определенной функции. Они используются для добавления динамического контента, манипулирования данными в базе данных или выполнения сложных операций.

    Создание сниппета

    Вызовите контекстное меню в дереве элементов во вкладке «Сниппеты». Можно воспользоваться кнопкой «Новый» — тогда откроется новая страницы. «Быстро создать» — появится форма во всплывающем окне.

    Также можно использовать кнопки в дереве ресурсов.

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

    Чтобы не путаться в нейминге, можно использовать php в начале названия — так сразу будет понятно, что вызываете именно сниппет. Еще упрощает жизнь создание структуры, наподобие объектной модели, например:

    php.Article.GetTags php.Article.UpdateHitsCount php.Article.GetRating php.Article.Articles.GetPopular php.Tags.GetList php.Author.GetRating

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

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

    Сниппет всегда должен возвращать какое-то значение в return. Если фактически он возвращает пустое значение — можно вернуть true. Например, вы создали сниппет php.snippetName и написали код, который отображает текущую дату и время.

    return date(«F j, Y, g:i a»);
    Вы можете вызвать его на странице или в шаблоне с помощью следующего тега:
    [[php.snippetName]]

    Когда страница будет отображена, результат будет вставлен в место расположения тега, если скрипт возвращает результат. Бывают случаи, когда скрипт не возвращает результат сам по себе, а записывает его в плейсхолдеры — тогда сначала нужно вызвать сниппет, а затем указать плейсхолдер в месте, где нужно вывести результат. Зададим плейсхолдер date:

    $modx->setPlaceholder(‘date’, date(«F j, Y, g:i a»));
    А затем вызовем его на странице:
    [[php.snippetName]]

    Текущая дата: [[+date]]

    Кеширование

    Сниппеты могут вызываться в кешированном и некешированном виде.

    [[php.snippetName]] [[!php.snippetName]]

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

    Некешируемый будет выполняться каждый раз при загрузке страницы. Правило простое — используем кешируемые везде, где можно. Некешируемые вызываем только когда постоянно нужны актуальные данные или выполнение действия в момент загрузки страницы (получить get параметры; увеличить счетчик просмотров страницы и тд). Также некешируемый вызов можно использовать на этапе разработки сайта, чтобы не пропускать ошибки, но не забудьте потом везде включить кеш.

    Модификаторы

    Сниппет можно использовать как модификатор вывода. Если кратко — мы можем добавить модификатор к тегу (чанку или полю ресурса, например), и этот модификатор поменяет значение этого тега при выводе. В MODX есть встроенные модификаторы и фильтры, но если мы хотим создать свой — используем сниппеты. Например, создадим скрипт phpH1 , который выведет pagetitle страницы в теге h1 :

    $input = $modx->getOption(‘input’, $scriptProperties, »); $output = $input; if ($output != ») { $output = ‘

    ‘ . $output . ‘

    ‘; } return $output;
    И используем его в шаблоне:
    [[*pagetitle:phpH1]]

    xPDO и MODX API

    С помощью MODX API можно получать поля и TV поля текущего ресурса:
    // значение поля $pagetitle = $modx->resource->get(‘pagetitle’); // значение tv по имени tv $tvValue = $modx->resource->getTVValue(‘tvName’); // значение tv по id tv $tvValue = $modx->resource->getTVValue(1);

    Или другого ресурса по его ID:
    $res = $modx->getObject(‘modResource’, 1); $tvValue = $res->getTVValue(‘tvName’);

    Также мы можем строить продвинутые запросы xPDO. К примеру, получить ресурсы с шаблоном и вывести их заголовки на странице:

    $q = $modx->newQuery(‘modResource’); $q->where(array( ‘template’ => ‘2’ )); $q->select(array( ‘id’, ‘pagetitle’ )); $res = $modx->getCollection(‘modResource’, $q); foreach ($res as $r) { echo $r->get(‘pagetitle’); }

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

    Вызов чанка

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

    $html = $modx->getChunk(‘tplSomeChunk’, array( ‘placeholderName’ => ‘Oleg’, ‘placeholderAge’ => 23 ) );

    В 1 параметре указывается название чанка, во втором — массив данных, которые могут быть использованы как плейсхолдеры в самом чанке, условно:

    Привет, я [[+placeholderName]], мне [[+placeholderAge]] года

    Когда мы получаем какие-то данные из базы данных, как правило каждая строка (если получаем ресурсы — то строка равна ресурсу), представлена как раз в виде массива данных:

    [ 0 => [ ‘id’ => 1, ‘pagetitle’ => ‘value’, . ], 1 => [ ‘id’ => 2, ‘pagetitle’ => ‘value2’, . ] ]

    Поэтому мы можем передавать в вызов чанка прямо этот массив данных. В этом примере мы получаем ресурсы методом getCollection:

    $output = »; $q = $modx->newQuery(‘modResource’); $q->select(array( ‘id’, ‘pagetitle’ )); $resources = $modx->getCollection(‘modResource’, $q); if ($resources) { foreach ($resources as $res) { $resArr = $resources->toArray(); // Приводим объект в обычный массив $output .= $modx->getChunk(‘tplSomeChunk’, $resArr); } } return $output;

    Как видите, чтобы передать ресурс в качестве аргумента, сначала нужно привести его из объекта в массив. Если же получать не объекты, а сразу массив данных — такая манипуляция не нужна:

    $output = »; $q = $modx->newQuery(‘modResource’); $q->select(array( ‘id’, ‘pagetitle’ )); $q->prepare(); $q->stmt->execute(); $resources = $q->stmt->fetchAll(PDO::FETCH_ASSOC); if ($resources) { foreach ($resources as $resource) { $output = $modx->getChunk(‘tplSomeChunk’, $resource); } } return $output;

    Передача параметров

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

    [[snippetName? parameter2=`[[*pagetitle]]` parameter4=`[[+placeholder]]` getOption() . При этом можно задать значение по умолчанию. Например:

    $parameter1 = $modx->getOption(‘parameter1’, $scriptProperties); // Задать значение по умолчанию $parameter2 = $modx->getOption(‘parameter2’, $scriptProperties, ‘Привет’);

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

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

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