Делаю первый сайт на Друпал в своей жизни. Использую тему Zen. Задача, казалось бы, стандартная - вывести список похожих материалов к каждому посту. Но - вот непёр! - скачал целых два модуля Relevant Content и Similar By Terms. Ни тот, ни другой не фурычит, хотя блоки вывел, как полагается, в нужные регионы. Может, делаю чего не так?
На следующий день начал с начала, накопал сниппет для вывода похожих материалов от xandeadx. Вот он:
function [THEMENAME]_preprocess_node(&$vars) {
if (!$vars['page'] || !$vars['node'] || !count($vars['field_tags'])) {
return;
}
$tids = array();
foreach ($vars['field_tags'] as $tag) {
$tids[] = $tag['tid'];
}
$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title'));
$query->addExpression('COUNT(*)', 'hits');
$query->leftJoin('taxonomy_index', 'ti', 'n.nid = ti.nid');
$query->condition('n.type', $vars['type']);
$query->condition('n.status', NODE_PUBLISHED);
$query->condition('ti.tid', $tids, 'IN');
$query->condition('n.nid', $vars['nid'], '<>');
$query->groupBy('n.nid');
$query->orderBy('hits', 'DESC');
$query->orderBy('n.created', 'DESC');
$query->range(0, 3);
$vars['content']['similar'] = node_title_list($query->execute(), 'Похожие материалы');
$vars['content']['similar']['#weight'] = 2;
}
Вставил его в файл template.php своей темы Zen. Не фурычит, хоть вешайся. Но что удивительно, проверил на теме Batrik - и там сниппет заработал - выводит список похожих материалов, как мне и нужно.
Обидно, ведь мне надо, чтобы этот код работал именно в Zen. Чего там подправить надо? Как это сделать? Может, кто свой скрипт предложит? Или какой-то ещё способ вывода списка похожих материалов есть? Совсем запарился.
Комментарии
у вас таксономия определена в нодах?
Да, у меня каждый тип материала привязан к нескольким терминам таксономии. Насколько я понимаю, по этим терминам должен осуществляться поиск, но этого не происходит.
Если в одной теме выводится а в другой нет, то запрос скорее всего верный и дело во входящих переменных. Пробовали проверять в разных темах что попадает в запрос?
Я бы предложил:
1. Написать обычный запрос через db_query и использовать IN и строку термов.
2. Вынести в отдельную функцию - писать запросы в препроцессе не тру.
Спасибо, но я в этом не секу. Кинули бы инструкцию, я бы изучил, а так непонятно, что делать. Может, у zen какая-то особая специфика? Может, в файл тимплэйт чего добавить?
Создать вьюху с контекстным фильтром термина(ов). Но сниппет Андеда делает это лучше, и он рабочий - у меня работает.
на http://kinobobr.ru/ - у меня ели получилось сделать. но работает всеравно через раз