Вывод документов помеченных теми же ключевиками

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

Аватар пользователя Dec0der Dec0der 12 января 2009 в 15:33

На странице статьи должен выводится блок с похожими материалами.
Вывод статей из того же термина не подойдёт.
Нужна именно такая схема: при создании ноды в какое-то поле вписываешь ключевик. Если есть ещё ноды с таким же ключевиком, то на странице созданной ноды должен выводится список этих статей.
Как это сделать?

Комментарии

Аватар пользователя Nikit Nikit 12 января 2009 в 16:03

Всё равно термины. Добавь блок, видимый только на просмотре этих материалов. А потом делай код, ищущий и показывающий нужные ноды по термину.

Аватар пользователя goodboy goodboy 12 января 2009 в 22:55

Может, правильнее ключевик вписывать в словарь таксономии (свободный ввод)?

Для таксономии, есть например такой сниппет (не помню, откуда взял)

<?php
/**
* Сниппет блока для отображения статей с терминами, аналогичными
* отображаемой статьи. Статьи отсортированы по времени создания.
* Текущая статья из списка удаляется.
*
* Если необходимо не отображать блок при отсутствии статей, надо
* задать $no_items_text = '';
*
*/

// номера словарей для поиска терминов
$vids = array(2);
// количество ссылок на статьи
$list_length = 5;
// текст при отсутствии найденых статей
$no_items_text = '';

$tids = array();

foreach($vids as $vid)
foreach(taxonomy_node_get_terms_by_vocabulary(arg(1), $vid) as $tid)
$tids[] = $tid->tid;

if(!count($tids))
return $no_items_text;

$tids = join($tids, ',');

$list_length++;
$query = "SELECT DISTINCT(n.nid), n.title, n.created FROM {node} n
INNER JOIN {term_node} tn ON n.nid = tn.nid
WHERE tn.tid in ($tids) AND n.status = 1
ORDER BY n.created DESC LIMIT $list_length";
$sql = db_rewrite_sql($query);
$result = db_query($sql);
$items = array();
$current_find = false;
while ($item = db_fetch_object($result))
if($item->nid == arg(1))
$current_find = true;
else
$items[]= l($item->title, "node/".$item->nid);

if(!$current_find)
array_pop($items);

return (count($items))? theme('item_list',$items) : $no_items_text;
?>