Продолжу разговор про создание и развитие блога с помощью системы  управления контентом MODx Revolution. На этот раз речь пойдет о системе  публикации комментариев к записям в блоге. Действительно, автору блога  очень важно иметь возможность обратной связи со своими читателями, одним  из самых распространенных вариантов которой является комментирование  записей.

В случае создания блога на MODx у нас есть два (даже три) варианта:  использовать готовый компонент, написать систему самому, использовать  стороннее решение. Вариант написания своей реализации системы  комментариев я отметаю сразу из-за неоправданной трудоемкости. Не зря же  мы используем систему управления контентом. Из готовых компонентов для  MODx Revolution есть только Quip. Из сторонних решений  подойдут любые, которые можно интегрировать путем использования  JavaScript. К ним можно отнести такие популярные системы как Disqus и IntenseDebate.

Изначально я использовал для своего сайта компонент Quip (http://rtfm.modx.com/display/ADDON/Quip),  настроил его под свои нужды, изменил внешний вид, чтобы он коррелировал  с дизайном сайта и приготовился радоваться. Но не тут-то было. После  того, как начали появляться первые комментарии к статьям, я с удивлением  обнаружил, что через некоторое время они исчезают. Сами по себе. Просто  р-раз - и нету комментария. Испугавшись, что они утеряны на совсем, я  пошел в табличку с комментариями в базу данных и с облегчением нашел,  что они не удалены совсем и навсегда, а лишь отмечены, как удаленные.  Изменив значение поля "deleted" с "1" на "0", я вернул комментарии к  жизни. Но спустя несколько дней ситуация повторилась. Я опять починил  комментарии, но потом они снова исчезли, и так продолжалось до тех пор,  пока мне это не надоело. На официальном форуме MODx у одного человечка  была такая же проблема как и у меня, но работающих вариантов решения не  предлагалось. Ковыряться в исходном коде Quip мне хотелось меньше всего,  и тут мой взор упал на систему комментирования Disqus.

Меня сразу же привлек довольно приятный дизайн, а так же возможность  авторизации как внутри системы Disqus (которая используется на множестве  сайтов, в том числе такие крупные как CNN, TechCrunch, Fox News и  другие), так и с помощью Twitter, Facebook, Yahoo, используя OpenID или  обычную для всех сайтов форму "Имя - Почта - Сайт - Комментарий". Причем  организовано все весьма удобно с точки зрения пользователя. Было  принято решение использовать Disqus.

После регистрации на сайте disqus.com предлагается несколько инструкций по установке кода в популярные  системы ведения блогов типа WordPress, Blogger, Joomla и другие. MODx в  их числе не оказалось, но мы не лыком шиты, поэтому идем в раздел Universal Code.  После ознакомления с разделом становится ясно, что система состоит из  двух модулей: сам модуль комментирования, который следует использовать  на странице с блогозаписью, и модуль, выводящий количество комментариев в  заданном посте, который можно использовать на самой странице блога в  ленте статей.

Разберемся для начала с основным модулем для просмотра комментариев к  статье и собственно комментирования. Создадим чанк, в который поместим  код, написанный на странице установки Disqus, и назовем его  DisqusComments. В нем надо как минимум изменить переменную disqus_shortname, в которой указать короткое имя, выбранное вами при регистрации, и желательно изменить переменные disqus_identifier и disqus_url для более простой работы системы. В качестве идентификатора статьи можно использовать ее id в MODx, например так:

      var disqus_shortname = 'shortname_вашего_сайта';
      var disqus_identifier = '[[+id]]';
      var disqus_url = '[[+url]]';

Далее, в шаблоне для отображения страниц постов из блога в нужное место добавляем вызов этого чанка:

      .. отображение содержания статьи ..
      [[$DisqusComments? &id=`bounz_net_[[*id]]` &url=`[[++site_url]][[~[[*id]]]]` ]]
      .. что-то еще ..

В данном случае я использую в качестве disqus_identifier конструкцию вида bounz_net_articleID, а переменной disqus_url присваиваю полный адрес страницы. Использование полного URL связано с  тем, что изначально, пытаясь интегрировать Disqus со своим сайтом, и  имея относительную адресацию страниц (в чанке заголовка был прописан тег  <base />), возникала ошибка при формировании  постоянных ссылок на комментарии. А т.к. до этого мне уже пришлось  отказаться от относительных ссылок в разделе Галерея (т.к. они криво  работали с хеш-тегами), то было принято решение вообще везде перейти на  полную адресацию.

Но это было лирическое отступление. На данный момент система  комментариев интегрирована в блог, их можно писать, читать и  модерировать. Теперь было бы неплохо выводить количество комментариев в  основной ленте записей блога. Это очень просто сделать. Создадим в  чанке, ответственном за краткий вывод блогозаписи на главной странице  блога, следующую ссылку:

<a href="/url_статьи#disqus_thread" class="leavecomment" data-disqus-identifier="bounz_net_[[+id]]">       Комментарии     </a>

Магия данной ссылки заключается в добавлении хеш-тега #disqus_thread к ссылке на статью и добавлении небольшого javascript-кода в конец  страницы. Дополнительно к хеш-тегу можно задать у ссылки аттрибут data-disqus-identifier,  который поможет Disqus идентифицировать статью. Вообще говоря, можно  обойтись и  без него, тогда система будет идентифицировать статьи,  основываясь на их URL. Но если адреса страниц со статьями изменятся  (допустим, вы начнете использовать ЧПУ), то все сломается. Дабы такого  не случилось, я добавил этот атрибут. Заметьте, что он строится точно  так же, как и значение свойства disqus_identifier в вызове скрипта комментирования. Собственно все готово.

Напоследок немного оформительских работ. Текст ссылок для количества  комментариев можно задать в настройках на сайте Disqus (раздел Admin,  вкладка Settings, подраздел Appearance, группа настроек Comment Count  Link). На этой же станице настроек можно добавить своих правил CSS. Так я  избавился от ссылки "blog comments powered by Disqus". Впрочем, убрать  эту ссылку можно еще проще: удалив строчку <a  href="http://disqus.com" class="dsq-brlink">blog comments powered by  <span class="logo-disqus">Disqus</span></a> из того кода, который они дают.

Радостных вам комментариев!