Quip — Не плохая система комментариев. Ее проблема для меня в том, что из коробки она идет немного кривой. В этой статье я постараюсь дать алгоритм, который ускорит базовую настройку Quip.
Установите Quip из репозитория MODx, поместите этот код в шаблон:
[[!Quip? &thread=`thread[[*id]]` &useGravatar=`0` &dateFormat=`%d %b %Yг. в %H:%M` ]] [[!QuipReply? &thread=`thread[[*id]]` &moderate=`0` &useGravatar=`0` &closeAfter=`0` ]]
Теоретически на этом все готово, но я заменяю существующие чанки тем, что внутри этого архива.
Tips:
- Поменять заголовок "Комментрии" —
Управление словарями / quip / ru / quip.commentsили в шаблоне —core/components/quip/elements/chunks/quipcomments.chunk.tpl
Постраничная навигация и ajax-подгрузка в Quip
По-идеи достаточно лишь добавить &limit=`10` для сниппета Quip, но на деле нудны допилы.
Первый косяк — навигация отображается даже когда второй страницы нет, и получается, что неактивная циферка "1" бессмысленно весит. Можно, конечно удалять ее скриптом, или скрввать в CCS с помощью :only-child, но лучше зарубить накорню. Для этого нужно отредактировать файл core/components/quip/model/quip/quip.class.php, функцию buildPagination:
// добавив в самом начале функции:
$page_limit = !empty($options['limit']) ? $options['limit'] : 1;
$pageCount = $options['count'] / $page_limit;
// закомментить или удалить строчку:
//$pageCount = $options['count'] / (!empty($options['limit']) ? $options['limit'] : 1);
//Обернуть цикл for ($i=0;$i<$pageCount;$i++) в условие:
if($pageCount > 1){
...
}
Если нужно сделать так чтобы при нажатии на кнопку "показать больше комментариев" подгружались еще комментарии комментируем цикл for, и вставляем такую строку (после цикла for, или вместо него):
$pages = "<div class='pagination-show-more' data-pagecount='".$pageCount."' data-pagelimit='".$page_limit."' data-pagecurrent='1'><button>Посмотреть еще отзывы</button></div>";
Далее создаем ресурс с пустым шаблоном и помещаем туда сниппет, в который в свою очередь копируем нижеследующий код:
if( !isset($_GET['thread']) || !isset($_GET['pagelimit']) || !isset($_GET['pagecurrent']) ){
return "";
}
$output = $modx->runSnippet('Quip',array(
'thread' => $_GET['thread'],
'useGravatar' => '0',
'dateFormat' => '%d %b %Yг. в %H:%M',
'tplComment' => 'tplComment',
'start' => $_GET['pagecurrent'] * $_GET['pagelimit'],
'limit' => $_GET['pagelimit'],
'sortBy' => 'approvedon'
));
echo $output;
А в шаблоне, на страниже у нас есть типа такой вот JS код:
$(".pagination-show-more").find("button").click(function(){
var t = $(this).parent();
var dataAjax = {};
dataAjax.thread = "thread[[*id]]";
dataAjax.pagecount = parseInt(t.attr("data-pagecount"),10);
dataAjax.pagelimit = parseInt(t.attr("data-pagelimit"),10);
dataAjax.pagecurrent = parseInt(t.attr("data-pagecurrent"),10);
if(dataAjax.pagecurrent == dataAjax.pagecount){
t.remove();
}
var wrapper = $(".quip-comment-list");
$.ajax({
url: '[[~1275]]', // ссылка на ресурс, сожержащий предыдущий сниппет
data: dataAjax,
success: function(data){
wrapper.append($(data).find(".quip-comment-list").html());
console.log("OK");
if(dataAjax.pagecurrent+1 == dataAjax.pagecount){
t.remove();
}else{
t.attr("data-pagecurrent", dataAjax.pagecurrent+1);
}
},
error: function (xhr, ajaxOptions, thrownError){
console.log(xhr.responseText);
console.log("ERROR");
}
});
});<fixedpre>
</pre>
<h2>Quip в pop-up (в лайтбоксе)</h2>
<p>Создаем свой сниппет и помещаем на пустую страницу:</p>
<pre class="brush: js;auto-links: false;toolbar:false;">
echo $modx->runSnippet('Quip',array(
'thread' => "thread".(int)$_GET['quipid']
,'useGravatar' => '0'
,'dateFormat' => '%d %b %Yг. в %H:%M'
));
echo $modx->runSnippet('QuipReply',array(
'thread' => "thread".(int)$_GET['quipid']
,'moderate' => '0'
,'useGravatar' => '0'
,'closeAfter' => '0'
));
if($_GET['quip_approved'] == 1){
$parents = $modx->getParentIds($_GET['quipid'], 2);
$parent = $parents[0];
$url = $modx->makeUrl($parent);
$modx->sendRedirect($url);
}
</pre>
<p>В шаблон помещаем что-то типа:</p>
<pre class="prettyprint"><fixedpre><a href="/ajax-otziv.html?quipid=[[+id]]" class="fancybox-ajax">Отзывы</a>
Подключаем fancybox, подцепляем класс fancybox-ajax, ну и в общем-то все.
Капча для Quip (reCaptcha)
- При вызове сниппета
QuipReplyпоставить&recaptcha=`1`; - https://www.google.com/recaptcha/admin — Получить код реКапчи;
- MODx / системные настроки / recaptcha
recaptcha.private_keyвставитьSecret key; - MODx / системные настроки / recaptcha
recaptcha.public_keyвставитьSite key; - Убедиться, что в шаблоне добавления комментарияев (по-умолчанию —
core/components/quip/elements/chunks/quipaddcomment.chunk.tpl) не удален код капчи:
<div class="quip-fld recaptcha"> [[+quip.recaptcha_html]] <span class="quip-error">[[+error.recaptcha]]</span> </div>
Заметки и ссылки по теме:
Комментарии (2)
Не писать ответ