Как вывести список похожих материалов?

Главные вкладки

Аватар пользователя xox xox 15 января 2012 в 6:35

Делаю первый сайт на Друпал в своей жизни. Использую тему 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. Чего там подправить надо? Как это сделать? Может, кто свой скрипт предложит? Или какой-то ещё способ вывода списка похожих материалов есть? Совсем запарился.

Комментарии

Аватар пользователя xox xox 15 января 2012 в 9:16

Да, у меня каждый тип материала привязан к нескольким терминам таксономии. Насколько я понимаю, по этим терминам должен осуществляться поиск, но этого не происходит.

Аватар пользователя ilyin.eugene ilyin.eugene 15 января 2012 в 10:16

Если в одной теме выводится а в другой нет, то запрос скорее всего верный и дело во входящих переменных. Пробовали проверять в разных темах что попадает в запрос?

Я бы предложил:
1. Написать обычный запрос через db_query и использовать IN и строку термов.
2. Вынести в отдельную функцию - писать запросы в препроцессе не тру.

Аватар пользователя xox xox 15 января 2012 в 11:18

Спасибо, но я в этом не секу. Кинули бы инструкцию, я бы изучил, а так непонятно, что делать. Может, у zen какая-то особая специфика? Может, в файл тимплэйт чего добавить?

Аватар пользователя Айдар Айдар 15 января 2012 в 13:06

"ilyin.eugene" wrote:
1. Написать обычный запрос через db_query и использовать IN и строку термов.
2. Вынести в отдельную функцию - писать запросы в препроцессе не тру.

Создать вьюху с контекстным фильтром термина(ов). Но сниппет Андеда делает это лучше, и он рабочий - у меня работает.