Динамический список значений в TV-параметре
Если Вы используете в своих проектах TV-параметры, то наверняка знаете, что для них можно задавать список возможных значений. А что же делать, если список должен быть динамическим? Для чего это нужно, лучше проиллюстрировать на примере.
На сайте есть раздел "Каталог авто". Каждый дочерний документ в каталоге – это марка машины. Кроме этого, есть раздел «Статьи», конечно же на тему автомобилей:) В каждой статье может упоминаться об одной или нескольких марках машин. И мы решили, для лучшей навигации сайта, указывать, о каких марках идёт речь в конкретной статей (можно провести аналогию с тегами).
Рис.1 - Дерево документов
Создаём TV-параметр, назовём его autolist. В поле "Возможные значения" можем просто перечислить все марки из нашего каталога. Но у этого способа есть ряд недостатков. Во-первых, нам лень делать это вручную. Во-вторых, если в каталог добавится ещё хоть одна марка, мы должны не забыть дописать ее в этот списке. В-третьих, используя статический список (например, BMW||Honda||Porshe) в базе данных значение параметра autolist будет хранится в таком же (словесном) виде. И если вдруг придётся переименовать, или исправить ошибку в названии марки авто, такие записи в таблице станут нерабочими.
Рис.2 - Статический список значений TV-параметра
Чтобы забыть про все эти проблемы создадим динамический список автомобилей. В списке авто, на странице статьи, будут выводится все текущие документы (марки) из папки "Каталог авто". Для этого в поле "Возможные значения" в режиме редактирования TV-параметра, вызовем сниппет:
- @EVAL — это @-привязка, которая позволяет вставлять php-код
- $modx->runSnippet() — метод вызова сниппета
- 'print_autolist' — сниппет, который вернёт динамический список марок
Рис.3 - Динамический список значений TV-параметра
Скорее всего, для многих уже стало всё предельно ясно, но я продолжу. Итак создаём сниппет формирования списка авто:
<?php
//----------------------------------------------------------------------------
// выбираем неудалённые документы их папки "каталог авто" (3)
//----------------------------------------------------------------------------
$query="SELECT id, pagetitle
FROM modx_site_content
WHERE parent=3 AND deleted=0
ORDER by pagetitle";
$result=mysql_query($query) or die('Database query error!');
$Autos=array();
while ($Data=mysql_fetch_object($result)){
$Autos[$Data->id]=$Data->pagetitle;
}
//----------------------------------------------------------------------------
// формируем строку для вывода в поле "Возможные значения"
// в формате (||название==id||название==id)
//----------------------------------------------------------------------------
$list='';
foreach ($Autos as $id=>$auto)
{
$list.='||'.$auto.'=='.$id;
}
return $list;
?>
Стоит пояснить формат вывода: ||название==id||название==id:
- первый разделитель с строке «возможные значения» даст в результате пустой первый элемент списка
- || - разделить (отделяет один пункт списка от другого)
- название – видимая часть пункта списка
- id — значение пункта списка
То есть html-код вывода TV-параметра autolist на странице документа будет следующий:
<select id="tvauto[]" name="tvauto[]" multiple="multiple"
onchange="documentDirty=true;" size="8">
<option value=""></option>
<option value="10">Audi</option>
<option value="4">BMW</option>
...
<option value="15">Volkswagen</option>
</select>
Рис.5 - TV-параметр с динамическим списком значений на странице документа
В базе данных значение TV-параметра будет следующим:
Рис.6 - Запись в базе данных
Автор: Татьяна
Полезное
- Подсветка php-кода для сайта
- Сколько зарабатывают веб-разработчики?
- Рассуждения о задачах разработчика
- Правила работы с UTF-8
- Подходы к реализации меню
CMS MODx
- Перенос сайта на новый хостинг (на примере CMS Modx)
- Динамический список значений в TV-параметре
CMS MODx — админка
PHP
- Слияние массивов в PHP
- Задачки на знание PHP для начинающих
- Unable to load dynamic library php_curl.dll
- Изображение [] не может быть показано, так как содержит ошибки.
БД
JS, jQuery
Партнёрам по цеху
Copyright © 2008 scabbiaza.net
PHP-программист: программирование сайтов, интернет-магазинов, порталов