Modx TV (дополнительные поля)

Modx TV поля (дополнительные поля) MODX Revo

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

Что это такое

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

По идее TV — это обычные поля, единственно вы создаете их и выводите сами. У этих дополнительных полей также имеются типы ввода и вывода, которые дают возможность быть не просто полями текста, а полями тегов, изображений, да практически любого контента. Вы даже можете самостоятельно создавать свои пользовательские типы полей. До этого дойдем позже. Сейчас мы рассмотрим только основы. В дальнейшем мы будем еще возвращаться к TV, так как они являются достаточно гибким инструментом.

Стандартные переменные шаблона

Как я говорил в прошлом уроке, каждый ресурс MODX имеет стандартный набор TV полей.

стандартные tv

И их как обычно не хватает, и нужны новые, разберем как их создать.

Создание TV

Чтобы создать новые поля, в дереве с боку перейдите на вкладку «Элементы» и нажмите на значок «Новый TV», либо щелкните ПКМ на «Дополнительные поля» и выберите «Новое дополнительное поле» для создания новой TV.

Создаем новое TV MODX

Откроется окно создания переменной шаблона. Вводите имя (en) и заголовок (подпись, описание и категорию по желанию).

заполнение общей информации о TV

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

Далее переходим во вкладку «Параметры ввода» и указываем тип поля.

Краткий разбор стандартных типов ввода

  • URL — ввод URL адресов.
  • Авто-метка — обычно используют для создания тегов к ресурсам (можно вводить незаполненные в значениях по умолчанию метки).
  • Дата — ввод дат.
  • Изображение — для изображений.
  • Переключатели (radio) — можно использовать для включения (отключения) каких-нибудь блоков.
  • Списки (одиночный и множественный выбор).
  • Список ресурсов — для ввода/вывода ресурсов.
  • Тег — почти то же самое что авто-метка (но можно выбирать только из введенных значений).
  • Текст — для ввода небольшого текста.
  • Текстовая область — то же самое что текст, только окошко ввода побольше.
  • Текстовый редактор — текстовая область, но уже с редактором.
  • Файл — для различных файлов (которые разрешены в системной настройке upload_files), можно использовать для загрузки видео и различных документов.
  • Флажки (checbox) — по сути почти то же самое, что переключатели.
  • Число — ввод цифр.
  • Электронная почта — ввод электронной почты.

Заполнение возможных значений для radio, списков, checbox

Возможные значения вводятся в таком формате:

Мышка||Кошка||Собака

либо:

Белый==#ffffff||Черный==#000000

Все это более подробно мы будем разбирать в последующих уроках.

В моем случае я создаю поле для добавления изображений “Изображение”. Да у каждого типа ввода свой набор параметров ниже (можете пощелкать разны типа ввода ради интереса), в случае с Изображением и многими другими типами ввода, есть поля: Может быть не заполнено — Да и Нет — с этим думаю понятно, если поставить Нет, то ресурс сохранятся не будет, пока не заполнят это поле.

И «Значение по умолчанию» — оно не обязательное, но часто нужно. Если заполнить значение по умолчанию, то при создании ресурса, это поле уже будет заполнено этим значением (соответственно его можно будет поменять). В данном случае можно поставить путь до какой-нибудь обще тематической картинки, вот так:

Путь до изображения

Путь указывается относительно источника файлов (что это такое и зачем они нужны следующий урок). В общем думаю доступно объяснил, можете заполнять, а можете не заполнять, идем далее.

«Параметры вывода» оставляем по умолчанию (их вообще как в 90+% случаях трогать не нужно).

Переходим во вкладку «Доступно для шаблонов» и установите галочку напротив своего шаблона (шаблонов) в которых понадобиться данное TV.

указываем шаблоны

У нас сейчас только 1 шаблон.

Данное поле будет отображаться только на страницах с указанными шаблонами.

Вкладку «Права доступа» пропускаем.

Ну и последняя вкладка «Источники файлов» — у нас их пока нет, поэтому пропускаем и сохраняем поле.

Поле создано, теперь таким же образом можете создать сколько угодно переменных шаблона. К примеру если вам нужны текстовые области (с текстовым редактором, то в поле, «параметры ввода» указываем «Текстовый редактор».

Небольшая подсказка: Если какое-либо TV, которое вы хотите создать, похоже на ранее созданное, то вы можете просто-напросто дублировать его, вместо того чтобы создавать идентичное, тем самым ускорить процесс их создания. Для этого используйте опцию «Копировать».

Где располагаются

Дополнительные поля по умолчанию располагаются во вкладке «Дополнительные поля», при редактировании страниц.

Дополнительные поля в ресурсах

Можно включить системную настройку «Разместить TV ниже контента — tvs_below_content — Да» и они будут располагаться под контентом «Во вкладке документ»:

TV ниже контента

Вывод tv в шаблонах и чанках

В шаблонах и чанках стандартные поля ресурсов и созданные TV вызываются одинаково, вот такой конструкцией: [[*name_polya]]. Либо на fenom так: {$_modx->resource.name_polya}.

Примечания: в чанках которые используются вызовах сниппетов, TV вызываются немного иначе: [[+name_polya]], либо на fenom: {$name_polya}.

Проверка tv на пустоту

К примеру мы создали еще одно дополнительное поле «keywords» и соответственно мета тег к нему и мы не хотим выводить его в код, если поле пустое, тогда вывод будет следующим.

[[*keywords:!empty=`<meta name="keywords" content="[[*keywords]]">`]]

И тоже самое на fenom:

{if $_modx->resource.keywords?}<meta name="keywords" content="{$_modx->resource.keywords}">{/if}

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

Создаем TV, с именем, пусть будет: milti-resorses, в качестве типа ввода выбираем — Множественный выбор или Флажки (Checbox), а в возможных значениях указываем следующую конструкцию:

@SELECT pagetitle, id FROM modx_site_content WHERE parent=30

Modx TV (дополнительные поля)

Здесь мы делаем запрос в базу (from) данных к таблице modx_site_content где modx_ префикс таблиц в базе данных, можно заменить на [[+PREFIX]], тогда префикс подставится автоматом, и получаем pagetitle у родительских элементов (30 — это id родителя).

А в параметрах вывода выбираем разделитель запятую

разделитель

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

выбор нужных пареметров

Вызов TV

Вызываем как обычное tv: [[*milti-resorses]] — выведет id родительских ресурсов, через запятую. Далее берем к примеру pdoResources и выводите в любом формате, к примеру вызов может выглядеть так:

[[pdoResources? 
    &parents=`0` 
    &resources=`[[*milti-resorses]]` 
    &includeContent=`1` 
    &includeTVs=`img` 
    &tpl=`tpl-milti-resorses`
]]

Сейчас мы рассмотрели малую часть основ, но мы ещё не раз будем возвращаться к ним.

Важно! Старайтесь не плодить кучу доп. полей — они не особо быстро выводятся. Для однотипных и сложных конструкций из доп. полей есть пакет MIGX.

В следующем уроке создадим источник файлов для Изображений, чтобы не делать лишние клики в админке (например при выборе фото нам нужно перейти сейчас в папку access, затем в img, а с источником мы будем сразу попадать в img (- 2 клика).

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 5 оценок, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Константин

    Подскажите пожалуйста как подтянуть превьюшку $thumb miniShop в вызове записи pdoResources. ставлю так {set $tmp = ‘pdoResources’|snippet:[
    «parents» => $_modx->resource.id,
    ‘sortby’ => [‘menuindex’=>’asc’]|json_encode
    ‘return’ => ‘json’
    ]|json_decode}

    {foreach $tmp as $row first=$first}
    [[!pdoPage? &element=`msProducts` &tpl=`tpl.msProducts.row.custom`]]

    {$row.pagetitle}

    {/foreach}
    выводит все фотки в каждой стороке а надо каждую фотку в своей строке.

    Ответить
    1. Алексей автор

      Вы явно темой ошиблись и не совсем понятно что у вас там сейчас выводится) вам вместо pdoPage &element=`msProducts` скорее всего нужно использовать msProducts.

      Ответить
  2. петя

    к сожалению не получается вывести , ссылку не выводит

    Ответить
    1. Алексей автор

      Здравствуйте. Что конкретно у вас в код выводится?

      Ответить
  3. Айнур

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

    Ответить
    1. Алексей автор

      Пожалуйста)

      Ответить