Как реализовать привязку к ресурсам на MODx (Evo)
Все читатели наверняка видели на многих сайтах (в первую очередь, в интернет-магазинах) такой функционал, как "рекомендуемые товары", "смотрите также" и т.д. Смысл такого функционала в том, что к товару привязывается несколько других товаров, и на странице с подробным описанием товара выводится какая-то информация об этих "привязанных" товарах - ну например, название, маленькое фото и ссылка на детальное описание.
Простой способ сделать такой функционал, как "привязка к ресурсам" на MODx с помощью API, я и хочу рассмотреть в данной статье. Способ действительно очень простой, т.к. вы сами указываете системе, какой товар рекомендуем для данного.
Итак, создаем шаблон под названием "Единица товара".
Затем создаем новый TV-параметр с именем RECOMMEND, "Тип ввода" указываем "Text", и назначаем его шаблону "Единица товара".
Создаем новый ресурс, выбираем для него шаблон "Единица товара".
Заполняем параметр "Рекомендуемые товары" так - ID рекомендуемых товаров через запятую. Например: 115,45,78
Сохраняем документ.
В принципе, все, осталось написать небольшой сниппет, чтобы вывести рекомендуемые товары.
Создаем новый сниппет под названием Advance, в коде которого нам надо реализовать следующий алгоритм:
- получить строку с ID привязанных товаров
- преобразовать строку в массив ID'шников
- обойти в цикле этот массив и вытащить нужную инфу по каждому ID (будем вытаскивать тайтл, например).
<?php
$str = $modx->getTemplateVar('RECOMMEND'); // получили строку
$arLinks = explode(',', $str["value"]); //массив ссылок на связанные документы
foreach ($arLinks as $pageId){ //Начали цикл
$page = $modx->getDocument($pageId);
$pageTitle = $page["pagetitle"];
?><a href="[~<?=$pageId?>~]"><?=$pageTitle?></a><br /><? //показали ссылки на "привязанные" ресурсы
}
?>
Здесь я рассмотрела самый простой вывод,который может быть вообще. На деле, в рекомендуемых товарах неплохо было бы показывать фото и ценник. Если фото и ценник вы задали как TV-параметры, то вытащить их совершенно несложно при помощи API-метода:
<?$vars = $modx->getTemplateVars(array('SMALL_PHOTO', 'PRICE'), '*', $pageId);?>
в том же цикле.
Подключаем наш сниппет. Заходим в шаблон "Единица товара" и подлючаем в нужном месте вывод рекомендуемых товаров - вот так . Если по каким-либо причинам вы не хотите показывать заголовок "рекомендуемые товары" у товара, к которому ничего не привязано - то код после первой строчки заключите в проверку по условию:
<?if($str["value"] != '') ?>