Допустим, у меня есть блог, и я публикую две статьи о разведении черепах в домашних условиях. Дальше я хочу сделать так, чтобы под каждой из статей под заголовком «Ссылки по теме» была ссылка на другую статью. Как мне это сделать?
Вариант со ссылками из текста
Заканчивая вторую статью, я нахожу первую, копирую ее заголовок в конец второй и оформляю его как ссылку, сохраняю. Затем открываю первую в режиме редактирования, копирую заголовок второй в конец первой и оформляю его как ссылку, сохраняю.
Представьте, сколько времени уйдет на то, чтобы связать пять статей.
Вариант с прямым связыванием статей (улучшение предыдущего)
Можно избежать копирования заголовков и оформления их ссылками. Для этого в базе данных придется завести таблицу, которая будет хранить связи между статьями. Действия по связыванию будут выглядеть так: заканчивая третью статью, я выбираю из списка всех статей заголовки первой и второй, сохраняю.
Так я связываю статьи друг с другом в этом блоге
Если связи сделать двусторонними, то редактировать остальные статьи вообще не придется.
Этот способ хорош, однако, при добавлении четвертой статьи придется найти три других, при добавлении пятой — четыре других. То есть никак не учитывается уже существующее связывание статей.
Вариант с категориями
Статьи можно привязывать к категориям, а не друг к другу. В этом случае редактору сайта вообще не нужно делать лишних движений. Побочный эффект — ссылки по теме становятся неконтролируемыми. Так устроены сайты многих интернет-изданий.
Если в блоге есть категория «Разведение черепах», то проблем не возникнет. Если же есть только категория «Домашние питомцы», то содержание блока «Ссылки по теме» будет непредсказуемым.
Вариант с тегами
Если для классификации материалов сайта используются многочисленные теги, то контроль над составом ссылок возвращается. Но все теги не предусмотришь, поэтому придется возиться с привязкой старых статей к новым тегам.
Этот вариант хуже второго (с прямым связыванием статей), поскольку теги — это абстрактная надстройка, следить за которой сложнее, чем за прямыми связями.
Вариант с поиском
Пусть у нас есть поисковый движок с морфологией и ранжированием. В этом случае под каждой статьей можно выводить блок с результатами выдачи, где запросом будет заголовок статьи или те же теги. По похожему принципу показывается контекстная реклама.
Редактору не нужно делать ничего, но контроль над составом ссылок исчезает.
Заключение
С одной стороны — трудоемкие методы с контролируемыми результатами, с другой — методы для ленивых с неточными результатами. По собственному опыту скажу, иногда хочется ставить двусторонние ссылки, а иногда односторонние. Соответственно варианты с тегами, категориями и поиском обладают недостатком — не позволяют ставить односторонние ссылки.
Вопрос знатокам
Предположим, у меня есть форум. Тематика разделов достаточно узкая, темы тегами не размечаются. Я хочу к каждому топику прикрутить блок «Ссылки по теме», состоящий из ссылок на похожие темы этого же форума. Как бы лучше это сделать?
Дмитрий Сергеев, 26 лет, разрабатываю сайты на Drupal, управляю интернет-проектами
Комментарии
Алексей Новиков, 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
Спасибо, поставил галочку.