Все для создания и продвижения сайтов

Верстка, программирование, SEO

TV для выбора ресурса с нужным родителем и поиском в MODX Revolution

количество просмотров
TV для выбора ресурса с нужным родителем и поиском в MODX Revolution

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

Приступим к созданию такой TV.

Создадим сниппет «listMyResources».

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

<?php
$output[]= '-==-';
$parents = $modx->getCollection('modResource',array(
    'parent' => $modx->getOption('parent',$scriptProperties),
    'published' => 1,
));

foreach ($parents as $res) {
    $output[]= $res->get('pagetitle').'=='.$res->get('id');
}

$out = implode("||",$output);
return $out;

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

Тип ввода: Список (одиночный выбор).

В «Возможные значения» пишем следующее:

@EVAL return $modx->runSnippet('listMyResources',array('parent' => 2));

Вместо «2» указываем нужного родителя из которого мы хотим брать ресурсы.

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

После этого присвойте ТВ конкретному шаблону и работайти с ним.

На сайт же выводится не заголовок,а id ресурса. Единственная особенность при выводе это то, что если ресурс не выбран, вместо пустоты выводися «-».

Поэтому проверку на пустоту делать требуется так:

Через плейсхолдеры:

[[*mytv:is=`-`:then=`Поле не заполнено`:else=`ID ресурса: [[*mytv]]`]]

Через Fenom

{if $_modx->resource.mytv != '-'}
    ID ресурса: {$_modx->resource.mytv}
{else}
    Поле не заполнено
{/if}

Собственно и всё, думаю, как выводить информацию о ресурсе через его ID вы знаете как, если нет, пишите в комментариях.

Последние статьи

Инструменты

Отблагодарить и поддержать автора
Если вы нашли ошибку, выделите её и нажмите Ctrl+Enter
Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.