[Blogger.com] Скрипт для отображения списка похожих статей — обновленная версия
Новая версия скрипта для отслеживания похожих сообщений блога. Основные изменения:
- Основная часть скрипта вынесена во внешний файл. Теперь не нужно помещать в шаблон больше двух страниц (10 килобайт) текста скрипта.
- Добавлен плоский режим без разделения выдачи по ярлыкам.
- Добавлена возможность сортировать ярлыки по вручную задаваемому приоритету.
- Реализована возможность игнорировать ярлыки низкого приоритета, если сообщению назначены ярлыки высокого приоритета.
Принцип работы
Скрипт имеет 2 режима работы: с группировкой ссылок на посты по ярлыкам и плоский (общим списком). Принцип работы скрипта в режиме группировки:
- Берётся список ярлыков текущего поста, из него отбрасываются ярлыки, занесенные в настройках в список игнорируемых.
- Запрашивается с блога информация о постах, соответствующих оставшимся ярлыкам. (Параметр relposts_queryPostsPerLabel указывает, по сколько постов запрашивать для каждого ярлыка).
- Полученные посты группируются по ярлыкам с учётом настроек переименования ярлыков.
- В каждой группе удаляются лишние посты, если их количество превышает указанное в параметре relposts_showPostsPerLabel
- Каждой группе постов назначается приоритет, заданный в настройках.
- Группы ссылок на посты показываются на странице. Группы отображаются в порядке их приоритета, заданного в настройках. (Если у двух групп приоритет одинаков, первым показывается группа, идущая раньше по алфавиту.)
- При показе групп проверяются параметры relposts_showLabels и relposts_prioDelta, и при выполнении соответствующих условий, вывод прекращается. (Подробнее ниже, в описании настроек.)
В плоском режиме скрипт работает иначе:
- Берётся список ярлыков текущего поста, из него отбрасываются ярлыки, занесенные в настройках в список игнорируемых.
- Запрашивается с блога информация о постах, соответствующих оставшимся ярлыкам. (Параметр relposts_queryPostsPerLabel указывает, по сколько постов запрашивать для каждого ярлыка).
- Каждому посту назначается приоритет, равный сумме приоритетов ярлыков, по которым он пересекается с текущим постом. (Т.е. если у текущего поста ярлыки А, Б и В, и некий пост имеет ярлыки А, В и Г, то этот пост получит приритет, равный сумме приоритетов для ярлыков А и В.)
- Посты сортируются по приоритету.
- На странице отображаются ссылки на посты. Количество задаётся параметром relposts_showPostsPlainMode.
Настройка и установка
Аналогично изначальной версии скрипта, находим в шаблоне место, куда будем вставлять код. Обычно оно после строки <data:post.body/>
.
Пишем туда:
<!--[relposts]--> <b:if cond='data:blog.pageType == "item"'> <b:if cond='data:post.labels'> <div class='relposts'> <div id='relpostsdataheader'></div> <div id='relpostsdatalisting'></div> <script type='text/javascript'> // Сюда будем вписывать настройки </script> <script type='text/javascript'> relposts_sourceLabels = [] <b:loop values='data:posts' var='post'> <b:loop values='data:post.labels' var='label'> relposts_sourceLabels.push("<data:label.name/>"); </b:loop> </b:loop> </script> <script type='text/javascript' src='http://izhurnalscripts.googlecode.com/svn/trunk/relposts.js'></script> </div> </b:if> </b:if> <!--[/relposts]-->
Внутри тега script
, где написано «Сюда будем вписывать настройки», следует поместить настройки скрипта. Впрочем и без настроек по умолчанию всё работает — можете сохранить шаблон и проверить. :)
Настройки (общие для обоих режимов):
relposts_headerPlain
— использовать плоский или обычный режим. Значения: true, false.relposts_excludeLabels
— список ярлыков, которые следует игнорировать. Значение: массив строк.relposts_queryPostsPerLabel
— Количество постов, запрашиваемых для каждого ярлыка с блога. Значение: число.relposts_renameLabels
— таблица для переименования ярлыков. Если при переименовании названия 2-х или более ярлыко совпадают, посты этих ярлыков объединяются в выдаче. Значение: ассоциативный массив.relposts_labelPrio
— таблица приоритетов ярлыков. Обратите внимание: имена ярлыков даются в таблице в уже переименованном виде. Ярлыки, для которых приоритет не указан в таблице, имеют приоритет 1. Значение: ассоциативный массив.
Настройки, использущиеся в режиме группировки по ярлыкам:
relposts_excludeDups
— исключать ли повторяющиеся ссылки в разных ярлыках. Значения: true, false.relposts_showPostsPerLabel
— сколько максимально постов отображать для каждого ярлыка. Если постов с блога запрошено больше, чем числоrelposts_showPostsPerLabel
, посты выбираются случайным образом. Значение: число.relposts_showLabels
— сколько максимально ярлыков отображать. Ярлыки отображаются, начиная с более высокого приоритета, и до тех пор, пока не будет выведеноrelposts_showLabels
ярлыков. Значение: число.relposts_prioDelta
— ограничение на разницу приоритетов между ярлыками. Берётся приоритет максимального ярлыка и ярлыки выводятся до тех пор, пока разница между приоритетом следующего ярлыка и приоритетом первого не превысит значениеrelposts_prioDelta
. Значение: число.relposts_header0
— Текст, который будет показан, если похожих постов не найдено. Значение: строка.relposts_header1
— Текст, который будет показан, если найдёны похожие посты только по одному ярлыку. Если в строке есть фрагмент__LABEL__
, он заменяется на название ярлыка. Значение: строка.relposts_headerN
— Текст, который будет показан, если похожие посты найдены более чем по одному ярлыку. Значение: строка.
Настройки, использущиеся в плоском режиме:
relposts_showPostsPlainMode
— сколько максимально постов показывать. Посты показываются, начиная с самых приоритетных. Значение: строка.relposts_headerPlain
— текст заголовка. Значение: строка.
Значения опций по умолчанию:
relposts_headerN | "Похожие статьи:" |
relposts_header1 | "Еще статьи из категории «__LABEL__»:" |
relposts_header0 | "" |
relposts_headerPlain | "Похожие статьи:" |
relposts_plainMode | false |
relposts_showPostsPlainMode | 5 |
relposts_showPostsPerLabel | 5 |
relposts_queryPostsPerLabel | 10 |
relposts_excludeDups | false |
relposts_showLabels | 1000 |
relposts_excludeLabels | [] |
relposts_renameLabels | {} |
relposts_labelPrio | {} |
relposts_prioDelta | 10000 |
Приоритеты ярлыков реализованы не только для указания порядка, в котором будут выводиться ярлыки, но и для того, чтобы иметь возможность прерывать вывод после определённых ярлыков.
Пример настройки. Допустим, у нас есть ярлыки, имеющие максимальный приоритет, и если сообщению назначен один из этих ярлыков, ярлыки более низкого приоритета следует игнорировать. Для определённости возьмём в качестве образца ярлыки из этого блога: javascript и перевод. Выставляем им приоритет, а значение relposts_prioDelta ставим равным 0. Тогда в случае, когда у поста есть какой-либо из этих ярлыков, остальные ярлыки будут игнорироваться:
<script type='text/javascript'> var relposts_prioDelta = 0; var relposts_labelPrio = { 'javascript' : 2, 'перевод' : 2 }; </script>