четверг, 6 марта 2014 г.

Drupal 7 похожие материалы к статье без заморочек

Искала возможность вывести похожие материалы к статье и встречала разные модули и настройки к ним. В частности поставила Views, но не подружилась с ним, т.к. по мануалу все настроила, 3 ссылки на статьи получила, но они были везде одинаковые. Может у меня руки не правильно приделаны)
Но вот нашла вполне подходящий и легкий способ. С помощью сниппета
В файл template.php вашей темы нужно вставить этот код:

function [THEMENAME]_preprocess_node(&$vars) {
  if (!$vars['page'] || !$vars['node'] || !isset($vars['field_tags']) || !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;
}
При этом [THEMENAME] нужно заменить на название вашей темы, а field_tags на ваш словарь таксономии.
И еще у меня в этом файле уже был кусок кода с function [THEMENAME]_preprocess_node(&$vars) и чтобы не вышло ошибок и пустого листа нужно вставить дополнение после окончания того куска. И удалить закрывающую скобку того куска и у вставляемого удалить function [THEMENAME]_preprocess_node(&$vars) {
Надеюсь понятно)

Комментариев нет:

Отправить комментарий