[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>
31 комментарий
Это у меня в примере ощибка - приоритет надо ставить выше приоритета по умолчанию (больше 1), а у меня 0. Попробуйте так:
<!--[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'>
var relposts_prioDelta = 0;
var relposts_labelPrio = {
'ярлык' : 2,
'еще какой-то ярлык' : 2,
'и еще ярлык' : 2
};
</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]-->
Количество и заголовок указываются в настройках, в статье перечислены соответствующие параметры.
Спасибо огромное за скрипт, все стоит и все нравится. НО. Может подскажите нелюбителю копаться в кодах, как проще сгруппировать посты.
Например, у меня есть рубрики: А, В, С, D. и есть рубрика 111. Рубрика 111 прикрепляется ко всем постам в рубриках А, В, С и D. Дело в том, что мне нужно выводить похожие посты не только со схожей темы, но и по той теме, которая поверхностно объединяет все темы. (Если заглянете ко мне, то все поймете.) Далее, похожие статьи выводятся хорошо, и очень, но они дублируются в обеих рубриках.
Как сделать их недублируемыми? Ну может, что бы выводились более старые посты из рубрики 111 или наоборот из А В С D. Подскажете что-нибудь?
@Flee.lancer:
Как вариант, можно пока использовать плоский режим. Все ссылки будут выводиться одним списком, отсортированным по степени совпадения ярлыков. Т.е. если у вас есть пост с ярлыками А и 111, сначала будут показаны ссылки на посты с такими же ярлыками, а затем на другие посты с 111.
Если нужно именно убрать дублирование в режиме разделения на категории, попробую добавить такую возможность в скрипт.
@FUSESOUND:
Скажите адрес страницы, потестируем.
Это F.S. не могу войти в свой аккаунт у меня глюкнули 3 броузера - пишу как аноним.
Любую внутреннею страницу можно открыть через http://www. и посмотреть....
«Любую внутреннею страницу»
Действительно, воспроизводится ошибка. Посмотрю, что можно сделать.
«есть просьба доработать»
1. Заголовок виджета задаётся в настройках.
2. Отключить показ ярлыков можно через CSS: вписывайте правило для .relpostsdatalisting b. Либо использовать плоский режим.
Заголовок виджета задаётся в настройках.
На вопросы относительно внутренного устройства скрипта, заданные в некорректной форме, отвечать у меня нет желания.
Clr, была бы очень благодарна за доработку, если не лень, конечно. А пока и действительно лучше на плоский, просто больше сообщений вывести в настройках
Только у Вас настройки обоих режимов под одним названием в статье))
Настройки, использущиеся в режиме группировки по ярлыкам:
relposts_showPostsPerLabel
и
Настройки, использущиеся в режиме группировки по ярлыкам:
* relposts_showPostsPlainMode
какой из них все-таки плоский?))
Спасибо, исправил.
Добавлю в скрипт опцию для исключения дублирования.
@Flee.lancer:
Добавил опцию relposts_excludeDups
Ну Вы просто чудо ж!! Спасибо огромное, все работает отлично))
FUSESOUND, если Вы о дублирующих постах, то просто там, где настройки скрипта указываются
<.script type='text/javascript'>
// Сюда будем вписывать настройки
прописать: var relposts_excludeDups = true (не дублировать) или false (дублировать - стоит по умолчанию)
точки убрать, а то комменты не принимают
Доброе утро всем! Вадиму вопрос, раз уж речь идет о скриптах..
Скажите, а существуют ли скрипты для блоспот, защищающие от ctrl+C?
Подобный помощник мог бы защитить блоггера от плагиатчиков, заранее спасибо.
CLR, Огромное спасибо за скрипт!
Подскажите.Позволяет ли данный скрипт отображать похожие статьи с картинками статей?
http://get.2leep.com/ Вот нормальный скрипт с картинками и простой настройкой
Иван,
скрипт интересный, но он криво отбирает похожие посты. Т.е. он в посте одной категории он может отобразить ссылку с картинкой на пост, совершенно не относящийся к ней.
Vlad я отписался разработчикам и по другим минусам. Обещали что дальше ещё будет лучше и кое что исправили уже... Но картинки пока да... Ждёмси)))
Почему у меня на некоторое время появляются ссылки, а потом бац, и исчезают? Ставил основной код без каких-либо изменений
У меня таже проблема, через раз отображается список.
С расширением для браузера огнелиса noscript не работает, хотя все разрешил в настройках
У меня не работает не первый не второй пример, и у меня в шаблоне 3 . под коким ставить .
Отправить комментарий