Modx получить значение TV в сниппете

getResources — это многоцелевой сниппет MODX Revolution, который может извлекать содержимое полей из других ресурсов и выводить его в любом удобном виде. Это не замена Ditto, а скорее альтернатива, сниппет, который может выполнять функции более специализированных компонент, таких как Ditto, Wayfinder, Breadcrumbs; фактически любых компонент, которые выполняют вывод данных из списка ресурсов.

Требования

  • MODX Revolution 2.0.0 или выше
  • PHP5 или выше

Установка getResources

Установка производится из панели управления MODX Revolution стандартным способом через Система->Управление пакетами->Загрузить дополнения.

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

Снипет getResourses может быть вызван с использованием тега:

вызов без в этом релизе добавляется поддержка фильтрации, включая значения по умолчанию). Поэтому, если у вас tv-параметр «авто-метка», это означает, что необработанное значение представляе собой список, ограниченный запятыми, и он не разделен на теги, как вы это видите в панели управления.

MODX сниппеты — как создать и вывести

Начиная с версии 1.4.2-pl, возможно использование новых операторов фильтра. Имеется целый ряд новых операторов сравнения, которые можно использовать при создании условий фильтрования. Кроме того, при использовании многих из этих операторов перед сравнением tv-параметры приводятся к числовым величинам. Вот перечень допустимых операторов :

Оператор фильтра SQL оператор Числовое преобразование
(безопасное сравнение с NULL) Да
=== = Да
!== != Да
<> <> Да
== LIKE Да
!= NOT LIKE Да
Да
Да
= = Да
>> > Да
>= >= Да
=> => Да
sortby Позволяет выполнять сортировку по любому полю ресурса (исключая tv-параметры). Некоторыми обычными полями, по которым возможна сортировка, являются : publishedon, munuindex, pagetitle и другие. Указывайте только имя поля, не используя синтаксис тега. Отметим, что при использовании для сортировки полей, подобных template, publishedby, они будут сортироваться по необработанным значениям, а не по их именам.

Вы также можете использовать случайную сортировку, указав параметр RAND ():

Начиная с версии 1.3.0 для сортировки по нескольким полям может использоваться массив JSON, например:

Если вы хотите выполнить сортировку в определенном особом порядке, вы можете сделать это, указав список идентификаторов (ID) ресурсов, подобно следующему :

Дополнителеьные поля / TV параметры в ModX Evo #7

tvPrefix).

Кроме того имеется следующий плейсхолдер :

[[+idx]] Увеличивается с каждой итерацией, начиная с 1 (или со значения, заданного параметром parents=`71` parents=`5` tpl=`myRowTpl`]]

Вывод указанных ресурсов с использованием чанка ‘myRowTpl’

[[!getResources? resources=`10,11,12` parents=`5` tpl=`blogPost` parents=`71` elementClass=`modSnippet`
parents=`17`
limit=`10`
includeTVs=`1`
tpl=`blogListPost`
]]


    [[!+page. nav]]

и чанк blogListPost:

[[+pagetitle]]

Назад Вперёд

Сниппет getResources — статья от web студии разработки Witech

By Максим Леонов

13 Декабря, 2017

В этой статье мы разберемся что такое getResources MODx Revolution, выясним, какие у него параметры, вывод и сортировка — с примерами и пояснениями. Приятного чтения.

  • Что такое getResourses
  • Как использовать
  • Параметры
  • Свойства

Что такое getResourses

Возвращает список используемых ресурсов (общее), играет роль фрагмента обобщения.

Как использовать

Сниппет getResources может быть вызван через тег:

[[getResources]]

До версии 1.6.1-pl вызовы без указанного свойства debug=`1`» для получения полного ответа. Пример:

[[getResources? parents=`choose_an_id` sortby=«, по умолчанию createdon).

  • sortbyAlias — сортировка по алиасу.
  • sortbyTV — сортировка по TV параметру.
  • limit — лимит выводимых ресурсов. Используйте 0 для снятия ограничения (по умолчанию 5).
  • Похожие публикации

    Читайте нас на Яндекс Дзен

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

    Ajax фильтр на MODx Revolution

    Приветствую, друзья! Сегодня мы научимся создавать фильтр ресурсов в MODx Revolution с возможностью сортировки по любому TV полю и подгрузкой результатов по клику «Загрузить еще». Для вывода результатов будем использовать сниппет pdoResources.

    Поделиться Отправить Класснуть Запинить

    Скачать все сниппеты и необходимые файлы урока.

    Для начала необходимо установить пакет pdoResources, который входит в состав пакета pdoTools. Вы можете установить или весь набор пакетов pdo (pdoTools) или только pdoResources отдельным пакетом для создания фильтра на MODx Revolution.

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

    MODx Revolution Ajax Filter

    Однако если у вас уже готовый каталог, вы можете определить классы элементов Ajax фиьтра в JS файле (см. ниже).

    Обратите внимание, что .ajax-item должен быть непосредственным потомком .ajax-container. Если вы используете сетку Bootstrap для разметки колонок, можете определить класс контейнера как «row ajax-container», а колонки айтема как «col-md-4 ajax-item».

    Подключение JS скрипта Ajax фильтра

    Подключим скрипт JS к проекту. Вы можете подключить его как отдельным файлом, так и непосредственно в файл кастомных скриптов проекта. Для работы скрипта требуется jQuery.

    $(function() < //MODx pdoResources Ajax Filter //Filter Settings var fadeSpeed = 200, // Fade Animation Speed ajaxCountSelector = ‘.ajax-count’, // CSS Selector of Items Counter ajaxContainerSelector = ‘.ajax-container’, // CSS Selector of Ajax Container ajaxItemSelector = ‘.ajax-item’, // CSS Selector of Ajax Item ajaxFormSelector = ‘.ajax-form’, // CSS Selector of Ajax Filter Form ajaxFormButtonStart = ‘.ajax-start’, // CSS Selector of Button Start Filtering ajaxFormButtonReset = ‘.ajax-reset’, // CSS Selector of Button Reset Ajax Form sortDownText = ‘По убыванию’, sortUpText = ‘По возрастанию’; function ajaxCount() < if($(‘.ajax-filter-count’).length) < var count = $(‘.ajax-filter-count’).data(‘count’); $(ajaxCountSelector).text(count); >else < $(ajaxCountSelector).text($(ajaxItemSelector).length); >>ajaxCount(); function ajaxMainFunction() < $.ajax(< data: $(ajaxFormSelector).serialize() >).done(function(response) < var $response = $(response); $(ajaxContainerSelector).fadeOut(fadeSpeed); setTimeout(function() < $(ajaxContainerSelector).html($response.find(ajaxContainerSelector).html()).fadeIn(fadeSpeed); ajaxCount(); >, fadeSpeed); >); > $(ajaxContainerSelector).on(‘click’, ‘.ajax-more’, function(e) < e.preventDefault(); var offset = $(ajaxItemSelector).length; $.ajax(< data: $(ajaxFormSelector).serialize()+’).done(function(response) < $(‘.ajax-more’).remove(); var $response = $(response); $response.find(ajaxItemSelector).hide(); $(ajaxContainerSelector).append($response.find(ajaxContainerSelector).html()); $(ajaxItemSelector).fadeIn(); >); >) $(ajaxFormButtonStart).click(function(e) < e.preventDefault(); ajaxMainFunction(); >) $(ajaxFormButtonReset).click(function(e) < e.preventDefault(); $(ajaxFormSelector).trigger(‘reset’); $(‘input[name=sortby]’).val(‘pagetitle’); $(‘input[name=sortdir]’).val(‘asc’); setTimeout(function() < $(‘[data-sort-by]’).data(‘sort-dir’, ‘asc’).toggleClass(‘button-sort-asc’).text(sortUpText); >, fadeSpeed); ajaxMainFunction(); ajaxCount(); >) $(»+ajaxFormSelector+’ input’).change(function() < ajaxMainFunction(); >) $(‘[data-sort-by]’).data(‘sort-dir’, ‘asc’).click(function() < var ths = $(this); $(‘input[name=sortby]’).val($(this).data(‘sort-by’)); $(‘input[name=sortdir]’).val($(this).data(‘sort-dir’)); setTimeout(function() < $(‘[data-sort-by]’).not(this).toggleClass(‘button-sort-asc’).text(sortUpText); ths.data(‘sort-dir’) == ‘asc’ ? ths.data(‘sort-dir’, ‘desc’).text(sortDownText) : ths.data(‘sort-dir’, ‘asc’).text(sortUpText); $(this).toggleClass(‘button-sort-asc’); >, fadeSpeed); ajaxMainFunction(); >); >);

    • Строки 5-13: определение переменных для CSS селекторов Ajax фильтра. Не меняем, если используем стандартные значения, как на рисунке выше;
    • Строки 15-22: скрипт счетчика ресурсов в результатах фильтрации;
    • Строки 24-35: основная функция Ajax фильтрации;
    • Строки 37-49: обработчик события по клику на кнопку «Загрузить еще»;
    • Строки 51-54: обработчик события по клику на кнопке «фильтровать». Данная кнопка может отсутствовать, так как фильтрация происходит автоматически. Автоматическая фильтрация может быть отключена путем удаления строк 68-70;
    • Строки 56-66: обработчик события очистки формы и сброса фильтра. Строки 59-63 отвечают за сброс параметров сортировки;
    • Строки 68-70: функция автоматической сортировки при изменении полей формы фильтра;
    • Строки 72-82: универсальная функция сортировки по tv параметру.

    Я постарался сделать данный скрипт максимально универсальным, поэтому если вы используете стандартные селекторы элементов Ajax фильтра, то редактировать ни чего не нужно.

    Подключение PHP сниппета в MODx Revolution

    Создайте новый сниппет в панели управления MODx catalogFilter и заполните его следующим содержимым:

    Между комментариями //Filter Fields Settings и //End Settings находятся параметры, которые вам необходимо отредактировать под свой проект. Тут ни чего сложного, просто прописываете name полей input и проверяете их условием if. Для полей типа Radio, Select и Text используем пример из строк 5-8. Для определения промежуточного значения от и до можно воспользоваться примером из строк 11-16. Для чекбоксов подойдет пример из строк 19-21.

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

    Пример возможных значений в панели управления MODx для радиокнопок: Первый==1||Второй==2||Третий==3

    Возможные значения радиокнопок MODx

    Пример вывода радиокнопок во фронтенд:

    Здесь именование name=»floor» соответствует строкам 6-8 нашего сниппета catalogFilter. Аналогично реализована обработка других полей формы. Я думаю, это понятно и создание своих собственных полей не будет для вас проблемой.

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

    [[!catalogFilter? limit=`3` fields=`image,area,floor,garage,price`]]

    • tpl=`tplCatItem` — чанк айтема в списке каталога;
    • limit=`3` — Сколько записей выводить и по сколько записей подгружать при клике на кнопке «Загрузить еще»;
    • parents=`5` — указываем id роительского документа для каталога ресурсов;
    • fields=`image,area,floor,garage,price` — перечисляем TV’s, которые необходимо показать в чанке tplCatItem и которые необходимо обрабатывать при фильтрации.

    Пример чанка tplCatItem

    [[+pagetitle]]

    [[+pagetitle]]

    [[+tv.area:isnot=«:then=`

    `]]

    Этаж [[+tv.floor]]
    Площадь [[+tv.area]] кв.м.
    Гараж [[+tv.garage:is=`1`:then=`Есть`:else=`Нет`]]
    Цена: [[+tv.price]]

    Комплексный пример вывода во фронтенд можете посмотреть в репозитории проекта на гитхабе в файле demo.html.

    Ajax сортировка по TV

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

    В любом месте вашего HTML шаблона сделайте вывод кнопки и в data атрибуте укажите поле, по которому хотите фильтровать выдачу:

    Сортировать по цене: По возрастанию

    При клике тогглится класс button-sort-asc, который можете использовать для оформления кнопки при смене направления сортировки, добавления стрелочек и т. д. в атрибут data-sort-by можно писать любой TV, учавствующий в фильтрации. С сортировкой все.

    Итак, мы рассмотрели создание несложного Ajax фильтра ресурсов в MODx с выводом результатов в сниппет pdoResources.

    Премиум уроки от WebDesign Master

    Курс по созданию сайта от А до Я на Jekyll

    Создание сайта от А до Я. Комплексный курс

    Курс по созданию интернет-магазина на OpenCart

    Создание современного интернет-магазина от А до Я

    Фриланс для начинающих

    Я — фрилансер! Базовый курс для начинающих

    Другие уроки по теме «CMS»

    • Посадка типовой секции Landing Page на MODx с использованием MIGX (добавляемые поля)
    • Настройка прав доступа для контент-менеджера в MODX Revolution
    • MODX Revolution — Базовый урок
    • Как создать шаблон для WordPress. Грамотная посадка верстки на WordPress (Right Way)
    • Быстрое создание красивых сайтов на WordPress. Layers Style Kit на реальном примере

    Источник: webdesign-master.ru

    MODX Revolution: как быстро получить значение поля

    Очень быстрый и эффективный способ получения значения поля в MODX Revolution от Джейсона Коварда.

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

    $resource = $modx->getObject(‘modResource’, [‘id’ => 1]); return $resource->get(‘pagetitle’);

    Пока всё просто: происходит выборка ресурса с из базы данных, а затем возвращается его заголовок.

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

    Но стоит добавить немного магии и всё станет работать чуточку быстрее.

    Конкретный пример

    Давайте улучшим последний пример.

    $query = $modx->newQuery(‘modResource’, array(‘id’ => 1)); $query->select(‘pagetitle’); return $modx->getValue($query->prepare());

    Объяснение

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