modx дополнительное поле список ресурсов

Вывод списка определенных ресурсов в TV-поле MODX Revolution

Иногда при создании каталога на MODX требуется сделать возможность выводить один и тот же ресурс в разных категориях. Сделать это совсем не сложно, т.к. мы знаем, что MODX это очень гибкая система. Расскажу как это сделать на MODX Revolution, но в Evo этот принцип тоже применим.

Создаём дополнительное поле (TV).

Тип ввода: Флажки(checkbox) или Список (множественный выбор)

В поле «Возможные значения» вводим такой код:

Присваиваем это дополнительное поле шаблону ресурса.

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

Осталось вывести ресурсы из этих категорий. Для этого нам понадобится всё тот же getResources (+ getPage) и дополнительный небольшой сниппет.

Я назвал этот сниппет getIDLikeByTV. Вот его код:

Сниппет ищет подстроку (параметр &like) в значениях дополнительных полей с определённым ID (параметр &tmplvarid). Теперь выводим ресурсы:

[ [!getPage?
&elementClass=`modSnippet`
&element=`getResources`
$depth=`1`
&hideContainers=`1`
&resources=`[ [getIDLikeByTV?tmplvarid=`6`&like=`:32:`]]`
&tplPath=`[ [++core_path]]components/shopkeeper/elements/chunks/ru/`
&tpl=`@FILE product1.tpl`
&includeTVs=`1`
&includeTVList=`image,price`
&processTVs=`0`
&limit=`10`
&sortby=`<"pagetitle":"ASC">`
&pageVarKey=`page`
&pageFirstTpl=` Первая `
&pageLastTpl=` Последняя `
]]

[ [!+page.nav]]

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

Источник

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

Отредактировано: 15 Ноября 2019

Дополнительные поля (Template Variables) — элементы для расширения стандартных полей ресурса.

Вкладка «Параметры ввода»

Параметры ввода — тот вид поля, который будет отображаться в админ панели, при редактировании ресурса. Есть несколько заранее предустановленных параметров, но если их не хватает, можно добавить разнообразия с помощью дополнительных компонентов, вроде MIGX.

Стандартные варианты параметров ввода:

Значения полей

Чтобы добавить в дополнительное поле значение, надо указать его в поле “Input Option Values”.

Если значений несколько, варианты записываются с разделителем: Значение1||Значение2||Значение3

Возможна запись формата ключ => значение: Значение1==cod1||Значение2==cod2||Значение3==cod3

Проще говоря, формат записи таков DISPLAY VALUE==VALUE

Варианты по умолчанию

Запись параметров по умолчанию делается с помощью поля “Default Value”, а формат записи зависит от типа поля.

Варианты привязок для полей (@binding)

Примеры вывода дополнительных полей

С помощью тегов MODX и phx

Если у поля одно значение:

Если у поля множество значений:

Дополнительные поля в БД

Работа с доп. полями при помощи xPDO

Создание текстового доп. поля:

У каждого типа поля свой набор настроек, соответственно, код местами будет отличаться:

TV списка одиночного выбора

TV чекбокса множественного выбора

TV для компонента FastUploadTV

TV для компонента MIGX

TV для компонента YandexMaps

Назначение шаблонов доп полям (если создается несколько доп полей, данный блок кода должен идти последним):

Читайте также:  дача в нижегородской области павловский район

Заполнение дополнительного поля через xPDO:

Получение значения дополнительного поля через xPDO:

Источник

Modx дополнительное поле список ресурсов

Ресурс в modx это объект, содержащий стандартный набор полей, который может быть расширен за счёт TV-параметров. Отличительной особенностью ресурса является наличие уникального URL адреса по которому к нему можно обратиться.

Так как modx является фреймворком в оболочке движка, с ресурсами можно работать как через панель администрирования, так и посредством API (xPDO). API код в modx может выполняться в сниппетах, плагинах и даже PHP файлах, если предварительно в них подключить modx класс. Я же рекомендую начать изучение с выполнения команд через «Console». Этот компонент позволяет выполнять код не создавая сниппетов и плагинов. После его установки во вкладке «Приложения» появляется ссылка на редактор кода.

Получение значения полей конкретного ресурса

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

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

Пример получения TV-переменных.

Изменение значения полей в modx

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

Особенностью является то, что сначала мы производим действия над полями и только затем сохраняем изменения.

Выборка и обработка множества ресурсов

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

Для примера давайте выберем все ресурсы родителя с идентификатором 26, опубликованные, не удалённые и доступные для поиска. Заменим у них в тексте все одинарные кавычки на двойные.

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

Нахождение связанных объектов

В modx все построено на объектах. Ими являются ресурсы, пользователи, чанки, TV-параметры. И всё это между собой связано. Получая в качестве объекта ресурс, мы можем найти связанный с ним чанк или родителя и работать уже с ним опять как с объектом. Есть два способа получения связанных объектов:

Разница в том, что у объекта могут быть связи с другими объектами множественные и одинарные. Например, у ресурса может быть несколько TV-параметров, чтобы получить их все (в массив) необходимо использовать метод getMany(), а вот родитель может быть только один, поэтому для его получения используется getOne().

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

API modx позволяет программно создавать новые ресурсы. Для этого достаточно запустить стандартный процессор (функцию). В качестве параметров передаём любые значения полей создаваемого ресурса.

Если требуется заполнить TV-поля, то процессору дополнительно передаются параметры вида tv1 = ‘значение’, где 1 — это идентификатор TV-поля.

Читайте также:  Приправа как елка для мяса

Источник

Расширение стандартных полей ресурса через свою таблицу в MODX

Статья, в которой рассмотрим способ добавления дополнительных полей к ресурсу без использования TV.

Для представления дополнительных полей в админке, а именно на страницах создания и редактирования ресурсов, напишем плагин. Если вам это действие не нужно, то создание этого элемента можно опустить.

Добавление таблицы в базу данных

Добавление новых объектов в базу данных можно осуществить, например, с помощью инструмента phpmyadmin.

SQL дамп таблицы «modx_site_content_extend» можно скачать по этой ссылке.

Создание директории для компонента

После этого создадим ещё несколько папок, чтобы получился следующий путь:

Создание XML схемы компонента

В каталоге schema компонента extendresource поместим файл extendresource.mysql.schema.xml со следующим содержимым:

XML схема в MODX Revolution – это описание объектов базы данных компонента и их связей. Она нужна только для того, чтобы выполнить генерацию рабочей модели компонента.

Генерирование модели компонента

На этом шаге создадим модель. Для выполнения этого действия воспользуемся скриптом parse_schema.php.

Принцип работы со скриптом parse_schema.php :

После выполнения скрипта в каталоге «core/components/extendresource/model/» будут созданы php файлы (модель компонента).

Принцип работы с компонентом extendresource

Примеры, в которых показано, как можно осуществить получение значений расширенных полей ресурса и сохранение данных в них.

Сохранение данных в расширенные поля ресурса

Получение значений расширенных полей ресурса

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

Код плагина ExtendResource (php):

В качестве события, при котором будет происходить выполнения плагина, установим OnLoadWebDocument. Данное событие возникает после загрузки документа, но перед тем как теги MODX будут обработаны.

Вывод значений расширенных полей текущего ресурса (в чанке или шаблоне):

Другой вариант получить значения дополнительных полей – это воспользоваться сниппетом (например, getExtendResource ):

Использование сниппета getExtendResource для получения значения расширенных полей ресурса (например, keywords ):

Представление расширенных полей ресурса в админке

Для того чтобы представить расширенные поля ресурса на страницах создания и редактирования ресурса, необходимо создать плагин (например, ExtendedResource). Плагин будет выполнять действия, при наступлении 2 событий: OnDocFormPrerender и OnDocFormSave. Поэтому на странице создания плагина во вкладке «Системные события» необходимо установить галочки напротив них.

Данный плагин (ExtendedResource) нужен только для того, чтобы с данными полями можно было взаимодействовать при создании и редактирования ресурсов в админке. Если это вам не нужно, то этот плагин можно не добавлять в систему MODX Revolution.

Как добавить checkbox поле к компоненту и отобразить его в админке

Процесс добавления checkbox поля к компоненту и представление его в админке состоит из следующих шагов:

Читайте также:  kia seltos желтая с черной крышей

2. Обновить XML схему компонента, т.е. добавить в неё описание этого поля:

4. Обновить плагин ExtendedResource:

Как в админке MODX создать поля с одиночным и множественным выбором из списка

1. Добавим в таблицу site_content_extend 2 поля.

2. Добавим эти поля в XML схему компонента extendresource:

4. Добавим в плагин ExtendedResource код, который предоставит возможность работать с этими полями в админке MODX:

Источник

TV в MODX: создание и использование дополнительных полей

Разберём и научимся использовать TV в MODX Revo.

К примеру, вывести миниатюру изображения ресурса его родителю (рубрике), как в обычном блоге. Простой текст, который нужно выводить в определённое место, видеоролики, флешролики, простые метки и многое другое.

Пример работы, миниатюра статьи

1. Для начала создадим наше TV, для этого во вкладке «Элементы» создадим дополнительное поле.

2. На первой вкладке указываем имя, его мы будем использовать для вывода.

3. Далее заходим во вкладку «Параметры ввода» и здесь мы указываем в каком формате мы будем записывать наше tv. Выберем изображение, тем самым при создании, мы сможем через диспетчер файлов загружать и выбирать изображения.

4. Заходим в пункт «Параметры вывода», где мы будем выбирать, в каком формате будем выводить наше tv. Указываем текст и при выводе мы будем получать адрес на наше изображение, к примеру: images/img.jpg.

5. Заходим во вкладку «Доступно для шаблонов» и и выбираем шаблон для наших статей. Вы сможете писать tv во всех записях, у которых выбран данный шаблон.

6. Наше дополнительное поле создано, сохраняем его.

7. Заходим в редактирование нашего ресурса (шаблон которого мы указали выше) и переходим в новую вкладку «Дополнительные поля», где у нас появляется наше поле.

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

8. Сохраняем запись, теперь мы сможем вывести наше изображение, как в самой статье, так и в рубрике.

9. Чтобы вывести в самой статье, заходим в шаблон статей и в нужном месте вызываем миниатюру:

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

Также прошу рассмотреть следующий вариант вызова

10. Теперь выведем наше tv в родителе (рубрике), для этого заходим в его шаблон и вызываем наши рубрики с дополнительными полями:

Вывели мы через PdoResurses, кто не знает, как с ним работать, читайте тут.

Теперь в чанке оформления blog, мы вызываем наше поле:

Вот так просто и работать с дополнительными полями в modx, все они работают по аналогии с этим примером.

Источник

Познавательно-развлекательный портал