ПафНутиЙ-Блог » Статьи » jQuery » Сообщение об отсутствии комментариев на jQuery

Сообщение об отсутствии комментариев на jQuery

11.02
Сообщение об отсутствии комментариев на jQuery


Сегодня представлю небольшой скриптик, для того, чтобы сообщать юзерам об отсутствии комментариев к новости, но так как я не сторонник вмешиваться из-за таких мелочей в двиг, сделаем это на jQuery.

В сети есть хаки, которые выводят сообщение "нет комментариев" если их нет, но это ХАКИ! Что будет с ним, когда вы решите обновить DLE до актуальной версии? А если ещё и забыли как ставили...... в общем очередная головная боль.

Всем известно, что в DLE девятой линейки уже встроена библиотека jquery? так почему бы не воспользоваться её возможностями, а не возможностями php?

Итак


Началось всё с того, что на сайте, в силу специфика вёрстки блок с комментариями, при их отсутствии оставался пустым и выглядело это не очень призентабельно. Поэтому и был найден несложный способ "заполнить" эту пустоту.
Кстати: seo курсы ещё никто не отменял.

Для начала очмечу, что вывод комментариев осуществляется через тег {commеnts} в fullstory.tpl.

Теперь перейдем к разбору кода.


Для начала обернём тег {commеnts} в div с идентификатором fornocomments (вы можете использовать любой id, какой душе угодно) в результате получим вот такую конструкцию:
<div class="comments" id="fornocomments">
    {comments}
</div>

Далее "включаем" логическое мышление:
- Если к новости есть хоть один комментарий, то он в любом случаи будет заключён в чтото типа:
<div id="comment-id-100">Комментарий номер 100</div>


- Если же комментариев к новости нет, значит и не будет блока с идентификатором комментария.

Отсюда делаем нехитрый вывод и пишем jquery скрипт:

$(function(){    
var comments_block = $("#fornocomments");
if (comments_block.find("div[id*=comment-id-]").first().text() == "") {comments_block.prepend('<div class="nocomments">Комментариев пока нет</div>');}
});

где:
var comments_block = $("#fornocomments");

это назначение переменной , для дальнейшей "удобности" работы (вдруг мы ещё чтото захотим покодить на jquery для комментариев smile)
далее условие:
if (comments_block.find("div[id*=comment-id-]").first().text() == "") 

т.е. если в блоке с id="fornocomments" не найдётся ни одного блока, содержащего в идентификаторе слова comment-id- и имеющего внутри себя текст, то произойдёт:
comments_block.prepend('<div class="nocomments">Комментариев пока нет</div>');

внутрь блока с id="fornocomments" добавится блок с классом nocomments и текстом Комментариев пока нет

В противном случаи ничего не произойдёт.
Вот собственно и весь скрипт.
Далее помещаем наш скрипт в файл с расширением .js, лучше всего в отдельный, чтобы лишний раз не нагружать браузер пользователя лишним js-кодом, закидываем в папку с шаблоном (обычно это папка /js) и подключаем файл в fullstory.tpl (опять же, чтобы скрипт не вызывался в других местах и не тратил "силы" браузера)

Комментарии

amicitia
amicitia 15 февраля 2011 16:46
#1
Не работает скрипт на локалке (((
создал файл abc.js с указанным скриптом, подключил его в fullstory.tpl, завернул {comments} в нужный див, однако див
<div class="nocomments">Комментариев пока нет</div>

не выводится.
ПафНутиЙ
ПафНутиЙ 15 февраля 2011 16:47
#2
библиотека jquery подключена?
amicitia
amicitia 15 февраля 2011 17:31
#3
хм, косяк какой.
тег {headers} же выводит jquery?
только вот посмотрел, на локалке то стоит 9.2, jquery выводятся сразу с jquery ui:
src="/engine/classes/min/index.php?charset=windows-1251&g=general&3"
а в старых версиях dle этот же тег {headers} выводит только jquery:
src="/engine/classes/min/index.php?charset=windows-1251&g=general&1"
если насильно подключить jquery в шаблоне и поместить src выше тега {headers}, то работает, если ниже - то нет.
ПафНутиЙ
ПафНутиЙ 15 февраля 2011 17:35
#4
т.е. включено gzip сжатие js на сайте? Попробуйте отключить - это всёравно малополезная штука, т.к. jquery уже в сжатом виде подключена
.
Цитата: amicitia
если насильно подключить jquery и добавить выше тега {headers}, то всё работает.

Получается проблема с библиотекой на сайте, а не со скриптм. Думаю я вряд ли смогу помочь вам.
amicitia
amicitia 15 февраля 2011 17:43
#5
я уже отредактировал прошлый комментарий :)
в общем, как-то странно...
на dle-news также выводятся хэдерсы...
получается, чтобы на dle 9.2 (мне кажется, это так везде, где 9.2, а не только у меня - здесь же более старая версия dle) работали "Сообщение об отсутствии комментариев на jQuery" и "Предпросмотр комментария (jQuery edition)", нужно насильно подключать библиотеку jquery и обязательно перед тегом {headers}, а не после.
Цитата: ПафНутиЙ
Получается проблема с библиотекой на сайте, а не со скриптм.

вряд ли, библиотека та, что идёт "из коробки" - 1.4.4
самое интересное для меня, если я её же насильно подключаю, всё начинает работать.
ПафНутиЙ
ПафНутиЙ 15 февраля 2011 20:48
#6
wararena.ru - вду 9.2 всё прекрасно работает.
Gopr
Gopr 16 августа 2013 16:26
#7
А можно сделать чтобы этот хак работал в обратную сторону? Есть кнопка-якорь Оставить коммент (она расположена в fullstory.tpl). Нажав на нее происходит прокрутка к форме ввода комментариев. Если в новости нет комментариев то эта кнопка получается не нужна, так как форма ввода видна.
Нужно так: если комментов=0, то кнопки нет. Если комментов>0, то кнопка есть.
Возможно переделать?
ПафНутиЙ
ПафНутиЙ 16 августа 2013 16:54
#8
В новых версиях dle есть теги
[not-comments] и [comments]
Gopr
Gopr 16 августа 2013 17:20
#9
Спасибо, не знал.

Добавить комментарий

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Комментировать могут только зарегистрированные пользователи