Quip для MODX. Более рабочий вариант

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)

  1. При вызове сниппета QuipReply поставить &recaptcha=`1`;
  2. https://www.google.com/recaptcha/admin — Получить код реКапчи;
  3. MODx / системные настроки / recaptcha recaptcha.private_key вставить Secret key;
  4. MODx / системные настроки / recaptcha recaptcha.public_key вставить Site key;
  5. Убедиться, что в шаблоне добавления комментарияев (по-умолчанию — 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)

  1. Андрей 11 января 2020, 14:27 # 0
    Как убрать обязательное поле Email, не нарушив функционал?
    1. senya01 04 мая 2022, 20:27 # 0
      Тест
      *Комментарий будет опубликован после проверки модератором

      Комментарии easyComm

      Александр 31 августа 2018, 09:05

      Подскажите пожалуйста как вы сделали отправку комментариев ajax ???

      Администратор

      Через модуль easyComm. Ajax из коробки.
      https://webstool.ru/oformlenie-i-nastrojka-easycomm.html

      Похожие статьи

      Генератор настроек MIGX

      Документация на русском по MODX MIGX

      Подсказки по работе и заготовки для MiniShop2

      pdoPage и getImageList - Постраничная навигация MIGX

      Импорт и экспорт в MiniShop2. Реализация 1

      Как включить HTTPS (SSL) в MODX - Подробная инструкция

      Генерация YML для выгрузки в маркет

      Примеры работы с API MODX

      Примеры выборки where, optionFilters, innerJoin

      pThumb - ресайз изображений. Примеры использования.

      Расширение свойств товаров minishop2

      Примеры использования

      Сайт на обслуживании (выключить сайт)

      Добавить в письмо контактную информацию

      Вывести getImageList только если он не пустой

      Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

      Оформление и настройка easyComm. Комментарии и отзывы на сайте.

      Поиск на сайте с пакетом SimpleSearch

      Простая и симпатичная галерея fancybox

      Подсчет и вывод количества потомков ресурса в MODX

      Галерея. Вывести обложки альбомов и фотографии

      Вывод tv-параметров в формате -

      Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

      Quip для MODX. Более рабочий вариант

      pdoResources Заготовки для работы

      Сниппет для вывода размера и расширения файла

      Простой аудио-плеер HTML5

      Вывести список всех опций MiniShop2

      Слайдер Slick slider в контенте ресурса

      Как контролировать кэш CSS и скриптов

      Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

      Подключить MODX в стороннем PHP файле

      Простейшая авторизация

      Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

      Красивое адаптивное меню под pdoMenu

      Массово обновить ТВ, или другое поле через базу

      Создать свою страницу в админке

      Изменить формат номера заказа

      Сообщение о том, что сайт использует Cookie

      Получить grandparent. Вывести родитель родителя

      Симпатичный список файлов, загружаемых к ресурсу через MIGX

      Установить шаблон по-умолчанию для новых, создаваемых ресурсов

      Создать источник файлов

      Вывести все доступные плейсхолдеры

      Отредактировать шаблон письма

      Добавить скрипт перед тегом body

      Общая сумма по каждому товару в корзине Minishop2

      Создать раздел с паролем на сайте MODX

      Что делать если ее приходит почта администратору

      Фильтрация по TV параметрам в msProducts

      Дата на русском

      FontAwesome - часто используемые иконки для шаблонов MODX

      Создать пакет с пользовательской таблицей

      Заготовки для работы

      Курсы валют с cbr.ru на PHP

      Загрузка сниппета после загрузки страницы через AjaxSnippet

      getResources заготовки

      Обязательный чекбокс при оформлении заказа

      Обработка остатков заказа в miniShop2

      Соответствие названия классов с названиями таблиц в MySQL

      Разбить вывод pdoResources на несколько колонок (блоков)

      Баннеры с использованием BannerY

      Обновить alias (псевдоним) у всех ресурсов

      CSS для постраничной навигации pdoPage

      Вывести время загрузки (формирования) страницы

      Расширить таблицу site_content (объект modResource) за 5 минут

      Вырезать кавычки — фильтр-сниппет MODX

      Счетчик посещений и скачиваний для сортировки ресурсов

      Бесплатная доставка от 5000 рублей в MiniShop2

      Динамическое поле emailSubject в FormIt

      Скрыть информацию о том, что сайт работает на MODX

      Отсортировать ресурсы по количеству комментариев Quip MODx

      Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

      Создать редирект через autoRedirector API

      Ответ для сервиса moneta.ru

      Вывести 404 ошибку по настройке TV MODX

      Cортировать по списку id в pdoResources и pdoTools

      Email сделать не обязательным полем

      Как разместить исходный код сниппета на сайте, в документации

      Ускорить установку MODX revo до пары кликов

      Постраничная навигация — набор параметров и CSS PdoPage

      Сделать все элементы статичными для Git и IDE

      Не работает подгрузка товаров ajax mfilter2 на мобильном

      Сделать поле размер обязательным

      Подключить текстовой редактор к доп. полям ресурса

      Настройка стилей для комментариев Tickets

      Кастомный чанк для AdminPanel

      Динамическая замена шаблона ресурса - плагин

      Разместить корзину внутри блока с оформлением заказа

      Плагин для формирования замороженных URL с редиректом

      xPDO Выборка из одной таблицы с зацепкой значения из другой

      Приветственный экран / заглушка на сайт

      Вложенные условия в xPDO MODX

      Вывести список всех родителей в ТВ поле ресурса

      Как получить данные пользователя сразу после авторизации через API

      Вывести список всех емэйлов miniShop2

      Если getParentIds не работает в плагине

      Контролировать кэширование файлов CSS и JS MiniShop2

      Не приходят / не отправляются письма - в чем причина?

      Кэширование в MODX: использование $modx->cacheManager

      Наш сайт использует куки, нажмите «ОК» если вы не против
      OK