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` [[!+page. nav]] и чанк blogListPost:[[+pagetitle]]
Сниппет getResources — статья от web студии разработки WitechBy Максим Леонов 13 Декабря, 2017 В этой статье мы разберемся что такое getResources MODx Revolution, выясним, какие у него параметры, вывод и сортировка — с примерами и пояснениями. Приятного чтения.
Что такое getResoursesВозвращает список используемых ресурсов (общее), играет роль фрагмента обобщения. Как использоватьСниппет getResources может быть вызван через тег: [[getResources]] До версии 1.6.1-pl вызовы без указанного свойства debug=`1`» для получения полного ответа. Пример: [[getResources? parents=`choose_an_id` sortby=«, по умолчанию createdon). Похожие публикацииЧитайте нас на Яндекс Дзен Источник: schtirlitz.ru Ajax фильтр на MODx RevolutionПриветствую, друзья! Сегодня мы научимся создавать фильтр ресурсов в MODx Revolution с возможностью сортировки по любому TV полю и подгрузкой результатов по клику «Загрузить еще». Для вывода результатов будем использовать сниппет pdoResources. Поделиться Отправить Класснуть Запинить Скачать все сниппеты и необходимые файлы урока. Для начала необходимо установить пакет pdoResources, который входит в состав пакета pdoTools. Вы можете установить или весь набор пакетов pdo (pdoTools) или только pdoResources отдельным пакетом для создания фильтра на MODx Revolution. После установки пакетов, давайте подключим сниппет, который вы скачали в ваш проект. Если вы разрабатываете каталог сейчас с нуля, то советую придерживаться использования определенных классов для Ajax фильтрации. Схема именования классов:
Однако если у вас уже готовый каталог, вы можете определить классы элементов 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(); >); >);
Я постарался сделать данный скрипт максимально универсальным, поэтому если вы используете стандартные селекторы элементов 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
Пример вывода радиокнопок во фронтенд: Здесь именование name=»floor» соответствует строкам 6-8 нашего сниппета catalogFilter. Аналогично реализована обработка других полей формы. Я думаю, это понятно и создание своих собственных полей не будет для вас проблемой. Вывод сниппета осуществляется в шаблоне каталога следующим образом: [[!catalogFilter? limit=`3` fields=`image,area,floor,garage,price`]]
Пример чанка tplCatItem
[[+pagetitle]]
Комплексный пример вывода во фронтенд можете посмотреть в репозитории проекта на гитхабе в файле demo.html. Ajax сортировка по TVВ нашем скрипте имеется готовое решение для сортировки результатов фильтрации по любому TV полю. В форму фильтра вставьте следующие скрытые поля и не меняйте их значение, они просто должны быть в форме фильтра: В любом месте вашего HTML шаблона сделайте вывод кнопки и в data атрибуте укажите поле, по которому хотите фильтровать выдачу: Сортировать по цене: По возрастанию При клике тогглится класс button-sort-asc, который можете использовать для оформления кнопки при смене направления сортировки, добавления стрелочек и т. д. в атрибут data-sort-by можно писать любой TV, учавствующий в фильтрации. С сортировкой все. Итак, мы рассмотрели создание несложного Ajax фильтра ресурсов в MODx с выводом результатов в сниппет pdoResources. Премиум уроки от WebDesign MasterСоздание сайта от А до Я. Комплексный курс Создание современного интернет-магазина от А до Я Я — фрилансер! Базовый курс для начинающих Другие уроки по теме «CMS»
Источник: 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()); Объяснение |