[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Похожие материалы
freegrantДата: Четверг, 21.07.2011, 19:40 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 454
Репутация: 0
Статус: Offline
Скрипт выводит список похожих новостей, сравнивая их не по тегам, а по названию.

Для начала подключаем в любое место (запихивая в теги не работало) скрипт:
Code
<script type="text/javascript">       
$(function(){       
        related = {       
        title: '$ENTRY_NAME$', // название материала       
        number: 10, // количество материалов для вывода       
        push: $('#related'), // куда выводить       
        form: '<div class="related" id="r{ID}"><a href="{URL}" title="{TITLE}">{TITLE, 20}</a></div>', // форма вывода       
        a: <?if($MODULE_ID$ = 'stuff' || $MODULE_ID$ = 'dir' || $MODULE_ID$ = 'publ')?>2<?else?><?if($MODULE_ID$ = 'news')?>14<?else>2<?endif?><?endif?>,       
        data: new String()       
        };       

        $.post('/$MODULE_ID$', {       
        query: related.title.toLowerCase().replace(/([0-9\.\,]+)/g, ' '),       
        a: related.a       
        }, function(data){       
        $('.eTitleR', data).each(function(id){       
        if(id < related.number){       
        related.html = $(this).html();       
        if(location.href.indexOf($(this).attr('href')) == -1) related.data += related.form.replace(/\{ID\}/g, id).replace(/\{URL\}/g, $(this).attr('href')).replace(/\{TITLE(, ([0-9]+))?\}/g, function(a, b, c) {if(c) return (related.html.length > c ? related.html.substr(0, c) + '...' : related.html); else return related.html;});       
        };       
        });       
        if(related.data != '') related.push.html(related.data).prev('span').show();       
        });       
});       
</script>


При необходимости, можно что-нибудь подправить. Дальше в нужном месте ставим:

Code
<span style="display:none;">Похожие материалы:</span>       
<div id="related"></div>


Элемент span с надписью «Похожие материалы» изначально должен быть скрытым, чтобы не переключать его видимость 100500 раз.

Теперь в нужном модуле на странице «Вид материалов» в самое начало ставим:

Code
<a style="display:none;" class="eTitleR" href="$ENTRY_URL$">$TITLE$</a>


Теперь насчет некоторых параметров скрипта.

related.title - название материала, обычная переменная, например в модуле «Новости сайта» это $ENTRY_NAME$
related.number - максимальное количество выводимых записей
related.form - форма вывода материалов, где можно использовать тэги:
{ID} - порядковый номер выводимой записи
{URL} - ссылка на материал
{TITLE[, num]} - название материала, через запятую можно указать максимальное количество символов, после которых будет поставлено многоточие, а можно вообще не указывать запятую с числом (например, {TITLE} - выведет все, {TITLE, 5} - обрежет по первые 5 символов)

Кто хочет что бы работало в каталоге файлов:
меняем $ENTRY_NAME$ на $ENTRY_TITLE$,
так же может пригодится сократить строку
Code
a: <?if($MODULE_ID$ = 'stuff' || $MODULE_ID$ = 'dir' || $MODULE_ID$ = 'publ')?>2<?else?><?if($MODULE_ID$ = 'news')?>14<?else>2<?endif?><?endif?>,

до
Code
a: 2

кто использует не стандартные шаблоны нужно проанализировать скрипт и подогнать под свой дизайн!

P.S.: мне все же больше понравилось использовать $RELATED_ENTRIES$.


 
  • Страница 1 из 1
  • 1
Поиск: