Внутренняя перелинковка

11 февраля 2011 в 22:58

Hello world))

Нашел пост о интересном методе внутренне перелинковке, читать здесь.

Суть метода

[#]Под текстом каждой статьи на своих и клиентских сайтах я делаю список из 5-ти ранее опубликованных статей из рубрики. Замечу, что многие делают подобные списки, но зачастую в них ссылки на последние статьи. Я же линкую именно предыдущие, грубо говоря если у текущей статьи ID = 10, то в списке предыдущих будут статьи с ID 9,8,7,6,5. Каждая статья получает минимум 4 вечных внутренних ссылки.
[/#]

Подскажите как это реализовать на Drupal?

Комментарии

Как-то искал подобный модуль, и не нашёл, потому что все, что ни попадались, понимали перелинковку как преобразование заданных слов в ссылки.

В итоге под статьёй сделал ссылки на все статьи (их было немного), просто добавив дополнительное меню. Мне кажется, это было удачное решение, и без лишнего модуля обошлось, и быстро, и просто.

Но, если найдётся модуль, добавляющий ссылки под статьями, буду признателен.

11 февраля 2011 в 23:56

Заказывал себе подобный модуль.

Создает блок со ссылками на предыдущие и последующие ноды определенных типов материалов. Как работает можно посмотреть здесь http://irkutskmemorial.ru/kirovskii-raion/ul-chehova-23 там внизу под нодой блок с четырьмя ссылками-картинками, одна на следующую, одна на текущую и 2 на предыдущие ноды. Что конкретно выводится (картинки ли или заголовки или еще что) настраивается через tpl файл.

Если кому будет интересен модуль, поделюсь.
Во вложение скрин настроек блока.

10 ноября 2015 в 11:47

Здравствуйте.
А как вы делаете перелинковку в тексте на другие страницы? Это ручная обработка текста или с помощью какого либо модуля?

25 марта 2011 в 12:51

Когда-то разбирался с модулями перелинковки в Друпал - Модули Друпал. Похожие материалы.
Обычно привык делать с помощью http://drupal.org/project/relevant_content.
Но вот задумался что не всегда действительно правильно делать "похожие материалы" динамическими по общим тегам, в некоторых случаях логично к примеру просто предыдущие... надо обдумать.

12 февраля 2011 в 15:24

Даже так скажу, для вывода товара желательно, чтобы выводились разные варианты (как новые товары, так и что-то из старого), а вот со статьями возможно логичнее действительно постоянные ссылки...

12 февраля 2011 в 15:28

"Valeratal" wrote:
обычно выводят "похожие материалы" а не тупо последние 5

Да, похожие материалы, но из последних пяти, а тут как бы смысл, чтобы выводить не последние пять по нужной тематике, а близкие по ID материалы соответствующей тематики, т.е. ссылки будут статичными, что вообщем-то "мае сенс". Smile

12 февраля 2011 в 16:10

"xxandeadxx" wrote:

views?

Подскажите настройки?

Делал во views, просто блок "похожие записи", там они просто по таксономии отбирались, а как сделать такую логику?

12 февраля 2011 в 18:30

"mkudrin" wrote:
А как вы делаете перелинковку в тексте на другие страницы?

Конечно же вручную, машина сама никак не поймет где вы хотите поставить ссылку.

16 апреля 2011 в 16:46

А просто блок + немного php?

Наипростейщий запрос к базе и темизация по вкусу в одном флаконе, можно справится за 5-10 строчек кода.

8 сентября 2011 в 15:58

"divined" wrote:
А просто блок + немного php?

Наипростейщий запрос к базе и темизация по вкусу в одном флаконе, можно справится за 5-10 строчек кода.


А может есть пара минут написать этот запрос для блока? Без темизации, естественно)

24 мая 2012 в 13:53

Дело в том что я не только не знаю названия ваших типов материалов, а следовательно и имена таблиц БД, но так же и не знаю по какому термину или полю фильтровать похожие, так что считаю просьбу невыполнимой.

28 мая 2012 в 10:07

А возможно написать в запросе "таблица_нужный_тип_материала"? Также и с термином? Или в каждом конкретном случае индивидуально?

28 мая 2012 в 19:28

Да, на основании чего-то будет гораздо проще переделать под себя, чем писать с нуля, особенно, если ни разу не писал под Drupal

29 мая 2012 в 23:47
<?php
$similar_sql 
sprintf('SELECT node.nid as nid, node.created AS date FROM node node
                    LEFT JOIN term_node tnode on tnode.vid = node.vid
                    LEFT JOIN term_node tnode2 on tnode2.vid = node.vid
                    WHERE node.created < %s AND
                    tnode.tid = %s AND
                    tnode2.tid = %s AND
                    node.language = "ru" AND node.status <> 0
                    ORDER BY date DESC LIMIT 0,5;'
,$node->created$node->field_propertytype[0]['value'], $node->field_cityloc[1]['value']);
?>

Вот мой код..

Запрос к БД, возвращающий 5 нод с датой создания меньше текущей и с одинаковыми терминами таксономии, упорядоченный от более нового к более старому.

30 мая 2012 в 10:16

Спасибо! Сейчас попробую.
Попробовал - не получилось))) Что именно изменять на свое, можете подсказать?

30 мая 2012 в 15:23

Что именно "не получилось" и где вы это вставляли в чистой виде? о_О

Эх ладно...
Вот код, поместите его в шаблон ноды вашего типа материала в самый конец.
Теперь у нас есть переменная $node с которой можно работать...

<?php
$similar_sql 
sprintf('SELECT node.nid as nid, node.created AS date FROM node node
               LEFT JOIN term_node tnode on tnode.vid = node.vid
               LEFT JOIN term_node tnode2 on tnode2.vid = node.vid
               WHERE node.created < %s AND
               tnode.tid = %s AND
               tnode2.tid = %s AND
               node.language = "ru" AND node.status <> 0
               ORDER BY date DESC LIMIT 0,5;'
,$node->created$node->field_propertytype[0]['value'], $node->field_cityloc[1]['value']);

//здесь меняем поля $node->field_propertytype[0]['value'] и $node->field_cityloc[1]['value'] на
//название ваших полей с терминами таксономии, если без них то запрос будет выглядеть так:

$similar_sql sprintf('SELECT node.nid as nid, node.created AS date FROM node node
               WHERE node.created < %s AND
               node.language = "ru" AND node.status <> 0
               ORDER BY date DESC LIMIT 0,5;'
,$node->created);

//Для начала можете попробовать такой запрос

//Далее осуществляем сам запрос:

$result db_query($similar_sql);

//И теперь выводим результат:

if ($result->num_rows 0) {
  print (
'<p><h3>похожие объекты</h3><div>');
  while (
$data db_fetch_object($result)) {
    
$snode node_load($data->nid);
    print 
node_view($snode,true);
  }
  print 
'</div></p>'
}
?>
30 мая 2012 в 15:43