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

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

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 11 февраля 2011 в 22:58

Hello world))

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

Суть метода

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

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

Комментарии

Аватар пользователя anartist anartist 11 февраля 2011 в 23:56

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

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

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

Аватар пользователя RayB RayB 10 ноября 2015 в 11:47

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

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

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

Аватар пользователя mkudrin mkudrin 25 марта 2011 в 12:51

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

Аватар пользователя kodo kodo 12 февраля 2011 в 15:24

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

Аватар пользователя kodo kodo 12 февраля 2011 в 15:28

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

Аватар пользователя kodo kodo 12 февраля 2011 в 16:10

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

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

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 12 февраля 2011 в 18:30

"xxandeadxx" wrote:

views?

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

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

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 16 апреля 2011 в 16:46

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

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

Аватар пользователя divined divined 8 сентября 2011 в 15:58

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

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

Аватар пользователя protis protis 24 мая 2012 в 13:53

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

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


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

Аватар пользователя divined divined 28 мая 2012 в 10:07

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

Аватар пользователя protis protis 28 мая 2012 в 19:28

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

Аватар пользователя protis protis 29 мая 2012 в 23:47

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

Аватар пользователя divined divined 30 мая 2012 в 10:16
<?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 нод с датой создания меньше текущей и с одинаковыми терминами таксономии, упорядоченный от более нового к более старому.

Аватар пользователя protis protis 30 мая 2012 в 15:23

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

Аватар пользователя divined divined 30 мая 2012 в 15:43

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

Эх ладно...
Вот код, поместите его в шаблон ноды вашего типа материала в самый конец.
Теперь у нас есть переменная $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>'
}
?>