Допустим, у меня есть блог, и я публикую две статьи о разведении черепах в домашних условиях. Дальше я хочу сделать так, чтобы под каждой из статей под заголовком «Ссылки по теме» была ссылка на другую статью. Как мне это сделать?
Вариант со ссылками из текста
Заканчивая вторую статью, я нахожу первую, копирую ее заголовок в конец второй и оформляю его как ссылку, сохраняю. Затем открываю первую в режиме редактирования, копирую заголовок второй в конец первой и оформляю его как ссылку, сохраняю.
Представьте, сколько времени уйдет на то, чтобы связать пять статей.
Вариант с прямым связыванием статей (улучшение предыдущего)
Можно избежать копирования заголовков и оформления их ссылками. Для этого в базе данных придется завести таблицу, которая будет хранить связи между статьями. Действия по связыванию будут выглядеть так: заканчивая третью статью, я выбираю из списка всех статей заголовки первой и второй, сохраняю.
Так я связываю статьи друг с другом в этом блоге
Если связи сделать двусторонними, то редактировать остальные статьи вообще не придется.
Этот способ хорош, однако, при добавлении четвертой статьи придется найти три других, при добавлении пятой — четыре других. То есть никак не учитывается уже существующее связывание статей.
Вариант с категориями
Статьи можно привязывать к категориям, а не друг к другу. В этом случае редактору сайта вообще не нужно делать лишних движений. Побочный эффект — ссылки по теме становятся неконтролируемыми. Так устроены сайты многих интернет-изданий.
Если в блоге есть категория «Разведение черепах», то проблем не возникнет. Если же есть только категория «Домашние питомцы», то содержание блока «Ссылки по теме» будет непредсказуемым.
Вариант с тегами
Если для классификации материалов сайта используются многочисленные теги, то контроль над составом ссылок возвращается. Но все теги не предусмотришь, поэтому придется возиться с привязкой старых статей к новым тегам.
Этот вариант хуже второго (с прямым связыванием статей), поскольку теги — это абстрактная надстройка, следить за которой сложнее, чем за прямыми связями.
Вариант с поиском
Пусть у нас есть поисковый движок с морфологией и ранжированием. В этом случае под каждой статьей можно выводить блок с результатами выдачи, где запросом будет заголовок статьи или те же теги. По похожему принципу показывается контекстная реклама.
Редактору не нужно делать ничего, но контроль над составом ссылок исчезает.
Заключение
С одной стороны — трудоемкие методы с контролируемыми результатами, с другой — методы для ленивых с неточными результатами. По собственному опыту скажу, иногда хочется ставить двусторонние ссылки, а иногда односторонние. Соответственно варианты с тегами, категориями и поиском обладают недостатком — не позволяют ставить односторонние ссылки.
Вопрос знатокам
Предположим, у меня есть форум. Тематика разделов достаточно узкая, темы тегами не размечаются. Я хочу к каждому топику прикрутить блок «Ссылки по теме», состоящий из ссылок на похожие темы этого же форума. Как бы лучше это сделать?
Комментарии
Алексей Новиков, 27.08.2007 22:31
Сделать это лучше посредством редактора. Редактор — это такой умный человек, который обеспечивает качество.
Алексей, 27.08.2007 23:19
Я предполагаю, что для объединения схожих тем на форумах и придумали кроме разделов еще и категории (выражаюсь в терминологии phpBB). Но, увы, с помощью категорий сетевую иерархию не реализовать, а для кросс-сылок нужна (в общем случае по крайней мере).
Для форума мне кажется разумной некая комбинация технологий. Администратор задаёт жестко категорию(ии) форума, может быть даже сами разделы (форумы — в терминологии phpBB) и поисковый запрос. Таким образом, в «ссылки по теме» помещаются только те результаты поиска, которые находятся в выбранных форумах и категориях.
Это снова не позволит жестко контролировать состав ссылок, но раз тематика разделов узкая, то, по крайней мере, получится предсказуемый набор ссылок.
Дмитрий Сергеев, 28.08.2007 00:04
Да, я тоже о чем-то таком подумываю. А значит буду искать поисковый движок. Кстати, может есть что-нибудь на примете?
Алексей, 28.08.2007 00:17
Google :)
Если серьезно, то, увы, никогда не пытался прицепить внешний поисковый движок с форуму или CMS из, так сказать, концептуальных соображений: на мой взгляд, поиск довольно-таки массовая функция, чтобы входить в стандартный набор подобного ПО.
Другое дело, что с русской морфологией поисковые модули популярных форумов и CMS, насколько я знаю, не дружат и не собираются.
Буду рад, если отстал от времени.
Дмитрий Сергеев, 28.08.2007 00:32
В принципе можно и выдачу большого поисковика «подёргать», но пока я попробую поискать какой-нибудь скрипт с морфологией. Шансы, на мой взгляд, неплохие. О результатах расскажу.
a.sysoev, 05.09.2007 12:32
Попробуйте mnogoSearch
Дмитрий Сергеев, 05.09.2007 14:24
Спасибо, в моем случае не подходит.
Дмитрий Сергеев, 28.08.2007 12:31
Я поискал поисковые движки (простите за каламбур), и оказалось, что они либо стоят денег (RiSearch PHP), либо требуют хостинга с «развязанными руками» (DataparkSearch Engine, Яндекс.Сервер), либо вообще не внушают доверия (iSearch PHP).
В итоге сделал простейший поиск через LIKE '%keyword%', где keyword -- привязываемое модератором к каждой теме ключевое слово без окончания. Например, «тренир» для охвата тем со словами «тренироваться» и «тренировка».
70 тем форума я описал ключевыми словами минуты за три. Результаты выдачи сейчас меня вполне устраивают. Если появится потребность, сделаю кеширование и ранжирование по количеству употребления слов в топиках.
Сурин Александр, 29.08.2007 00:22
Я обычно предлагаю на информационно насыщенных ресурсах использовать многоуровневую категоризацию.
Если брать в качестве основы Drupal, то получается следующая схема:
1. Словарь "Категории" - категории материалов, в том виде как они обычно используются в блогах.
2. Словарь "Теги" - список ключевых слов, можно в свойствах этого словаря поставить free-taging и дать возможность пользователям указывать свои теги, сделать это можно с помощью модуля "Community_tags". При этом пользователь видит и все теги присвоенные материалу, и свои персональные, то есть в принципе может сам выстраивать свою персональную структуру сайта.
3. Словарь "Темы". Это как раз термины для увязывания статей по одной теме.
Остается только в коде нода прописать, чтобы он смотрел какой термин из словаря "Темы" присвоен статье и выводил внизу список всех материалов привязанных к этому же термину.
Подозреваю, что проще всего это сделать с помощью Views.
Дмитрий Сергеев, 29.08.2007 00:34
Несколько словарей и Views -- получаем подборки ссылок на любой вкус. Не хватает только интерфеса для массовой привязки тегов к нодам. В этом смысле хорош PHPMyAdmin, который позволяет редактировать сразу несколько записей на одной странице.
snow_wons, 30.08.2007 11:37
Связывать статьи вручную - это, наверно, лучший вариант.
Только должно быть несколько взаимосвязей между статьями:
1. Статья 1 ревалентна статье 2. Т.е во второй статье будут отображаться ссылки на 1, а в 1 на вторую нет.
2. Статья 2 ревалентна статье 1. Это как раз для того чтобы не обновлять ранее написаные статьи.
3. Статьи 1 и 2 ссылаются друг на друга.
Также было бы хорошо реализоваться копирование связаных ссылок из других статей.
Дмитрий Сергеев, 30.08.2007 11:54
У нас похожие мысли :) Как раз на иллюстрации к этой заметке в выпадающем списке с установленным значением «seeAlso» на самом деле есть и другие. Конкретно в этом случае есть еще значения «seePrev» и «seeNext» -- для тех случаев, когда статья публикуется по частям, а между частями вклиниваются другие материалы.
snow_wons, 30.08.2007 12:28
:-) хорошая идея.
Мне такое даже в голову не приходило.
Тут еще одна проблема. Как это всё хранить в БД?
Допустим есть таблица (master, rel, slave).
Если делать двойную связь - то придётся делать 2 запроса, что не есть хорошо.
Поэтому придётся двойную связь разбивать на две односторонние.
То же самое нужно делать и при добавлении связей "Предыдущий" и "Следующий". Ведь та статья которую мы делаем предыдущей должна будет ссылатся на текущую статью.
Maxime, 05.09.2007 19:05
Для Wordpress есть плагин Related Posts:
http://www.w-a-s-a-b-i.com/archives/2006/02/02/wordpress-related-entries...
К сожалению, эта ссылка из самого плугина сейчас не работает, попробуйте поискать по иени в репозиториях плагинов к Wordpress.
Дмитрий Сергеев, 05.09.2007 20:35
Спасибо, поставил галочку.