[Tickets] Ajax комментарии

В продолжении темы про книгу отзывов.
Как и обещал, выкладываю описание решения. Только я решил разбить его на отдельные пункты, потому что каждая из описанных возможностей может быть использована независимо от других.
Первым пунктом была указана возможность ajax подгрузки комментариев. Она самая простая. С нее и начнем.


Итак, чтобы сделать ajax комментарии нужно всего 3 маленьких шага и не больше 10 минут.

1. Немного подправим сниппет TicketComment. Советую сделать следующее: скопировать его (чтобы сохранить все параметры) и назвать, например, TicketCommentAjax. Заменить исходный код на этот.

2. В чанк tpl.Tickets.comment.wrapper вставляем плейсхолдер [[+more_comments]], который отвечает за отображение кнопки «Еще комментарии», и быстрый плейсхолдер с конце чанка.
<div class="comments">
	[[+modx.user.id:isloggedin:is=`1`:then=`
	<span class="comments-subscribe pull-right">
		<label for="comments-subscribe" class="checkbox">
			<input type="checkbox" name="" id="comments-subscribe" value="1" [[+subscribed]] /> [[%ticket_comment_notify]]
		</label>
	</span>
	`:else=``]]

	<h2 class="title">Отзывы (<span id="comment-total">[[+total]]</span>)</h2>

	<div id="comments-wrapper">
		<ol class="comment-list" id="comments">[[+comments]]</ol>
	</div>
    [[+more_comments]]
	<div id="comments-tpanel">
		<div id="tpanel-refresh"></div>
		<div id="tpanel-new"></div>
	</div>
</div>

<!--tickets_subscribed checked-->
<!--tickets_more_comments <div id="more-comments" style="text-align:center;"><button href="#" class="btn btn-primary">Еще комментарии</button></div>-->

3. Теперь нужно заставить добавленную кнопку выводит эти самые «еще комментарии». Тут есть 2 варианта.
Вариант 1. Нужно подправить файл assets/components/tickets/js/web/default.js. Работаем по тому же алгоритму, что и в первом шаге: делаем копию этого файла (например, ajaxcomments.js) и добавляем в него после строчки //Forms listeners (строчка №17) следующие строки:
$(document).on('click touchend', '#more-comments button', function(e) {
	e.preventDefault();
	var more_button = $(this);
	$.post(document.location.href, function(data) {
		if (data.error) {
			// Сделать кнопку недоступной
			more_button.attr("disabled","disabled");
			// Удалить кнопку
			//more_button.remove();
		} else {
			$("#comments").append(data.comments);
		}
	},"json");
	return false;
});

Теперь идем в настройки системы, выбираем раздел Tickets и изменяем параметр Скрипты фронтенда на [[+jsUrl]]web/ajaxcomments.js

Вариант 2. Попроще. Чтобы не лезть в системные настройки, можно, например, в чанке tpl.Tickets.comment.wrapper, который мы редактируем на втором шаге, добавить следующий код:
<script type="text/javascript">
  $(document).on('click touchend', '#more-comments button', function(e) {
	e.preventDefault();
	var more_button = $(this);
	$.post(document.location.href, function(data) {
		if (data.error) {
			// Сделать кнопку недоступной
			more_button.attr("disabled","disabled");
			// Удалить кнопку
			//more_button.remove();
		} else {
			$("#comments").append(data.comments);
		}
	},"json");
	return false;
  });
</script>
Или можно в шаблоне загрузить данный скрипт, выставив условие
[[*id:is=`id страницы с комментариями`:then=`скрипт...`]].

Вот собственно и все. Теперь вставляем наш сниппет куда нужно, указывая параметр limit, который и отвечает за ajax. Пример:
[[!TicketCommentsAjax? &limit=`20`]]

Маленькая ремарка. Параметр limit ограничивает только комментарии первого уровня. Чтобы ограничить глубину ветки, нужно указывать стандартный параметр depth.

Все должно работать.

П.С Еще раз хочу выразить восхищение разработками Василия — мощные, гибкие, легко расширяемые, а главное очень понятные. Вспоминаю потраченные в пустую 3 дня, когда пытался разобраться с modxTalks, как страшный сон. Не в обиду Валентину и Ивану, но факт есть факт. Я свой выбор сделал, хотя поначалу и боялся, что Tickets мне не подойдет. Но как видите, 10 минут и вуаля.

П.П.С. Из описаний остались смайлики (уже готово) и возможность удаления/восстановления комментариев из фронт-энда. На первое нужно также не более 10 минут. А вот со вторым все сложнее. Описание и сложность будет зависеть, примет ли Василий мои предложения по доработке Tickets и pdoTools. Если да, то это будет работать из коробки (или почти), если нет — то придется создавать свои классы.

П.П.С. Замечания и пожелания приветствуются. Как говориться, совершенству нет предела. :)

Update. 14.11.2014 Обновлен сниппет TicketCommentAjax. Тем, кто уже успел его скачать, нужно обновиться.
Сергей Шлоков
31 октября 2014, 15:34
modx.pro
14
6 917
+11
Поблагодарить автора Отправить деньги

Комментарии: 62

Alexei
31 октября 2014, 20:18
0
я зашел на тестовый сайт, и поудалял отзывы, я не злой, честно )
    Виталий Киреев
    01 ноября 2014, 07:51
    0
    Да, почему, кто угодно может удалить чужие комментарии?) Или это аналог таблички из админки?
      Сергей Шлоков
      01 ноября 2014, 08:36
      1
      0
      А где тут написано про удаление комментариев? Здесь про ajax. Если ты имеешь ввиду это, то я там написал, что такая возможность доступна всем, чтобы потестировать. Определяется она в сниппете флагом
      can_delete
      Условия можно определять разные. Можно например так:
      if ($modx->user->hasSessionContext('mgr') || $modx->user->id == 1) {
      	$can_delete = 1;
      }
      Можно разрешить пользователям удалять свои комментарии. В общем, ограничивает только полет фантазии. :)
        Wassi Wassinen
        26 декабря 2014, 15:53
        0
        Сергей, очень полезный функционал. По твоему примеру сделал отзывы на одном из сайтов. Расскажи, а как то же самое провернуть с pdoPage? Как подгружать товары не страницами и пагинацией, а как на юлмарте — «Показать еще 50 товаров» и т.д.
          Сергей Шлоков
          26 декабря 2014, 16:21
          0
          Точно подсказать, не могу, это разбираться надо. Попробуй сделать по аналогии.
      Саша Пекшев
      04 ноября 2014, 18:52
      0
      что то не получилось ) при установки limit комментарии вообще не отображаются, при нажатии кнопки еще комментарии появляются и через раз, может проблема с глубиной я так и не понял.

      вот такой вызов
      [[!TicketCommentsAjax?  &fastMode=`0` &depth=`3` &formBefore=`1`  &limit=`10`]]


      и такой wrapper
      <div class="comments">
      <table width="100%"><tr><td><h3 class="title">[[%comments]] // <span id="comment-total">[[+total]]</span></h3></td>
          <td width='275px'>  [[+modx.user.id:isloggedin:is=`1`:then=`
          <span class="comments-subscribe pull-right">
          	<label for="comments-subscribe" class="checkbox">
      			<input type="checkbox" name="" id="comments-subscribe" value="1" [[+subscribed:notempty=`checked`]] /> Уведомлять о новых комментариях
      		</label>
      	</span>
      	`:else=``]]</td>
      </tr></table>
      
      
          <div id="comments-wrapper">
      		<ol class="comment-list" id="comments">[[+comments]]</ol>
      	</div>
      	    
          <div id="comments-tpanel">
      		<div id="tpanel-refresh"></div>
      		<div id="tpanel-new"></div>
      	</div>
          [[+more_comments]]
      
      </div>
      <!--tickets_more_comments <div id="more-comments" style="text-align:center;"><button href="#" class="btn btn-primary">Еще комментарии</button></div>-->
        Сергей Шлоков
        04 ноября 2014, 19:04
        0
        Добавь &showLog=`1` и посмотри какой sql запрос формируется.
          Саша Пекшев
          04 ноября 2014, 19:09
          0
          0.0000780: pdoTools loaded
          0.0020061: Prepare the query for AJAX
          0.0016489: The query for AJAX is completed
          0.0001791: Conditions prepared
          0.0001070: Query parameters prepared.
          0.0000269: xPDO query object created
          0.0001762: innerJoined TicketThread as Thread
          0.0001400: leftJoined modUser as User
          0.0001130: leftJoined modUserProfile as Profile
          0.0001130: leftJoined TicketVote as Vote
          0.0001130: leftJoined TicketStar as Star
          0.0000041: Grouped by TicketComment.id
          0.0000470: Added selection of TicketComment: SQL_CALC_FOUND_ROWS `id`, `thread`, `parent`, `text`, `name`, `email`, `ip`, `rating`, `rating_plus`, `rating_minus`, `createdon`, `createdby`, `editedon`, `editedby`, `published`, `deleted`, `deletedon`, `deletedby`, `properties`, `parent` as `new_parent`, `rating` as `rating_total`
          0.0000138: Added selection of TicketThread: `resource`
          0.0000131: Added selection of modUser: `username`
          0.0000300: Added selection of modUserProfile: `internalKey`, `fullname`, `phone`, `mobilephone`, `blocked`, `blockeduntil`, `blockedafter`, `logincount`, `lastlogin`, `thislogin`, `failedlogincount`, `sessionid`, `dob`, `gender`, `address`, `country`, `city`, `state`, `zip`, `fax`, `photo`, `comment`, `website`, `extended`,`email` as `user_email`
          0.0000210: Added selection of TicketVote: `value` as `vote`
          0.0000238: Added selection of TicketStar: COUNT(`id`) as `star`
          0.0001659: Added where condition: id:IN(645,644,643,642,641,640,639,638,637,636), published=1
          0.0000310: Sorted by TicketComment.id, ASC
          0.0003850: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `TicketComment`.`id`, `TicketComment`.`thread`, `TicketComment`.`parent`, `TicketComment`.`text`, `TicketComment`.`name`, `TicketComment`.`email`, `TicketComment`.`ip`, `TicketComment`.`rating`, `TicketComment`.`rating_plus`, `TicketComment`.`rating_minus`, `TicketComment`.`createdon`, `TicketComment`.`createdby`, `TicketComment`.`editedon`, `TicketComment`.`editedby`, `TicketComment`.`published`, `TicketComment`.`deleted`, `TicketComment`.`deletedon`, `TicketComment`.`deletedby`, `TicketComment`.`properties`, `parent` as `new_parent`, `rating` as `rating_total`, `Thread`.`resource`, `User`.`username`, `Profile`.`internalKey`, `Profile`.`fullname`, `Profile`.`phone`, `Profile`.`mobilephone`, `Profile`.`blocked`, `Profile`.`blockeduntil`, `Profile`.`blockedafter`, `Profile`.`logincount`, `Profile`.`lastlogin`, `Profile`.`thislogin`, `Profile`.`failedlogincount`, `Profile`.`sessionid`, `Profile`.`dob`, `Profile`.`gender`, `Profile`.`address`, `Profile`.`country`, `Profile`.`city`, `Profile`.`state`, `Profile`.`zip`, `Profile`.`fax`, `Profile`.`photo`, `Profile`.`comment`, `Profile`.`website`, `Profile`.`extended`, `Profile`.`email` as `user_email`, `Vote`.`value` as `vote`, COUNT(`Star`.`id`) as `star` FROM `modx_tickets_comments` AS `TicketComment` JOIN `modx_tickets_threads` `Thread` ON `Thread`.`id` = `TicketComment`.`thread` AND `Thread`.`name` = "resource-762" LEFT JOIN `modx_users` `User` ON `User`.`id` = `TicketComment`.`createdby` LEFT JOIN `modx_user_attributes` `Profile` ON `Profile`.`internalKey` = `TicketComment`.`createdby` LEFT JOIN `modx_tickets_votes` `Vote` ON `Vote`.`id` = `TicketComment`.`id` AND `Vote`.`class` = "TicketComment" AND `Vote`.`createdby` = 47 LEFT JOIN `modx_tickets_stars` `Star` ON `Star`.`id` = `TicketComment`.`id` AND `Star`.`class` = "TicketComment" AND `Star`.`createdby` = 47 WHERE  ( `TicketComment`.`id` IN (645,644,643,642,641,640,639,638,637,636) AND `TicketComment`.`published` = 1 )  GROUP BY TicketComment.id ORDER BY TicketComment.id ASC "
          0.0011289: SQL executed
          0.0001040: Total rows: 0
          0.0000119: Rows fetched
          0.0000141: Returning raw data
          0.0011160: Loaded chunk "tpl.Tickets.comment.wrapper"
          0.0016870: Loaded chunk "tpl.Tickets.comment.form"
          0.0109730: Total time
          11 534 336: Memory usage
            Саша Пекшев
            04 ноября 2014, 19:22
            0
            если убрать `TicketComment`.`id` IN (645,644,643,642,641,640,639,638,637,636), через phpmyadmin выполнить скрипт все норм конечно лимита нет, но и ид моих Комментов совсем другие, поэтому и не находит
              Сергей Шлоков
              04 ноября 2014, 20:12
              0
              Ну а как сниппет должен сообразить, что выводить нужно комментарии пользователя 47? Это нужно ему указать либо в коде, либо через параметр. Приезду домой, выложу решение.
                Саша Пекшев
                04 ноября 2014, 20:23
                0
                нет я не зато, это ресурс создан юзером 47, а не комменты пользователя, я имею ввиду что при использования параметра limit, то выборка
                которая присоединяет условие
                Added where condition: id:IN(645,644,643,642,641,640,639,638,637,636), published=1
                не верна

                Выборка этих айди не привязана к Thread — а идет просто с сортировкой по дате, а должна привязываться к данному ресурсу, но даже если явно указать thread тоже не учитывается
                  Сергей Шлоков
                  04 ноября 2014, 22:44
                  0
                  Привязал. Вот попробуй.
                    Саша Пекшев
                    04 ноября 2014, 23:06
                    0
                    Вывод начальных помогло, при вызове «еще комментарии» в консоле видно что request идет, но кнопка становиться disabled и все, пока смотрю что там
                      Сергей Шлоков
                      05 ноября 2014, 09:27
                      0
                      Кнопка становиться disabled когда выводить больше нечего. Проверь, может все комментарии с первого захода вывелись?
                      У меня все работает.
                        Саша Пекшев
                        05 ноября 2014, 12:02
                        0
                        комментариев всего 17, а выводит только 10
                          Сергей Шлоков
                          05 ноября 2014, 12:18
                          0
                          Честно, не знаю в чем причина. Попробуй почистить кэш, закрой все сессии, еще раз сверься с описанием.
                          Если не поможет, добавь в сниппет TicketCommentAjax после строчки
                          if ($ajax) {
                          (это строка 109) следующий код
                          $output .= "<pre>".$modx->getPlaceholder('pdoTools.log');
                          die($output);
                          и посмотри ответ от сервера. Проверь SQL запрос.
                            Саша Пекшев
                            05 ноября 2014, 13:54
                            0
                            нашел в чем проблема, он не загружает вложенные комментарии больше 2. то есть родительский и внутренний, если вложенность достигает 3 уровня он ее не выводит. Протестил даже на твоем сайте такой же баг
                            Сергей Шлоков
                            06 ноября 2014, 11:22
                            0
                            Сорри за паузу. Времени катастрофически не хватает.
                            Протестил даже на твоем сайте такой же баг
                            На тестовом сайте стоял depth=2. Ограничил до 10.
                            Там сниппет другой — в нем сразу все прописано: и смайлики, и ajax и удаление/восстановление. Поэтому в процессе выделения только одного решения возможно где-то что-то упустил.
                            А сниппет TicketCommentAjax надо обновить — некорректно работала функция getChildIds. На тестовом сайте ее нет, там она работает через расширяемый класс pdoFetch.
                            Вот попробуй.
                            П.С. Спасибо за тестирование. Надеюсь, теперь будет работать для всех условий.
                            Саша Пекшев
                            06 ноября 2014, 15:18
                            0
                            Да работает )) но теперь с depth проблемы. Если убрать depth выводит все как надо, а если поставить допустим 2, то и комментарии только до 2 уровня, а 3+ отрезает
                            Сергей Шлоков
                            06 ноября 2014, 15:36
                            0
                            а если поставить допустим 2, то и комментарии только до 2 уровня, а 3+ отрезает

                            Не совсем понял. А как должно быть?
                            Так и задумывалось: указываешь, сколько уровней комментариев выводить, столько и выводит, остальные отрезает. Отрезает именно уровни, а не комментарии на уровне. Т.е. если на 2-ом уровне 20 комментариев, то они все выводятся, limit действует только на 1-й уровень.
                            Саша Пекшев
                            06 ноября 2014, 16:04
                            0
                            А должен не отрезать, а выводит до уровне deaph визуально — так сделано в оригинальном снипете, ну и в вашем варианте тоже можно если убрать лимит и поставить deaph=2, то 2 уровень будет максимальный для всех, и он выведет комментарии и 5 уровне, но он будет выводить как 2 уровень в 1 ряд.

                            PS. Даже наша ветка комментариев тому пример =) тут стоит deaph=10
                            Сергей Шлоков
                            06 ноября 2014, 16:40
                            0
                            А мне нужно именно отрезать.
                            Ок. Чтобы сделать как здесь, нужно всего лишь в строчке сниппета убрать из массива последний параметр depth.
                            Саша Пекшев
                            06 ноября 2014, 16:51
                            0
                            Спасибо, все заработало ) пойду браться за смайлики =)
                            Сергей Шлоков
                            06 ноября 2014, 16:54
                            0
                            Тебе спасибо.
                            PS. Даже наша ветка комментариев тому пример =) тут стоит deaph=10
                            Обрати внимание, что depth=10, а этот последний уровень является 11-ым. Т.е. судя по всему 1-й уровень не считается. Но это скорее вопрос к Василию.
                            Саша Пекшев
                            06 ноября 2014, 17:17
                            0
                            Да можно было б отключить древовидные комментарии лишь уровнем вложенности depth=1 и все, и кстати вот еще нашел что плейсхолдер total теперь считается с лимитом
                            Саша Пекшев
                            06 ноября 2014, 18:19
                            0
                            Еще нашел странный баг, если у ресурса не было комментариев то и форма не показывается
                            Сергей Шлоков
                            06 ноября 2014, 18:27
                            0
                            Это с лимитом или без?
                            Саша Пекшев
                            06 ноября 2014, 18:28
                            0
                            с ним, без него все ок
                            Саша Пекшев
                            06 ноября 2014, 18:35
                            0
                            вот такой log
                            0.0000908: pdoTools loaded
                            0.0029440: Prepare the query for AJAX
                            0.0017722: The query for AJAX is completed.
                            0.0048370: Total time
                            8 912 896: Memory usage
                            Сергей Шлоков
                            06 ноября 2014, 18:58
                            0
                            Еще нашел странный баг, если у ресурса не было комментариев то и форма не показывается
                            Fixed.
                            плейсхолдер total теперь считается с лимитом
                            Done.
                            Лежит тут
                            Саша Пекшев
                            06 ноября 2014, 19:02
                            0
                            да все отлично! еще раз спасибо)
                            Саша Пекшев
                            14 ноября 2014, 15:41
                            0
                            total считает не правильно, он считает только все 0 уровни Коментарии и его потомков по лимиту, а не все комментарии в теме
                            Сергей Шлоков
                            14 ноября 2014, 15:57
                            +1
                            У меня считает правильно. Где это можно увидеть?
                            Понял про что ты говоришь. Это скрипт считает и переписывает значение из сниппета. Я закомментировал и забыл про него. :) Буду подумать.
                            Временно, можешь изменить id у span в чанке tpl.Tickets.comment.wrapper
                            <span id="comment-total">[[+total]]</span>
                            Обзови id по другому или удали его.
                            Саша Пекшев
                            14 ноября 2014, 16:14
                            0
                            сделал как вы, теперь все работает норм
                            Сергей Шлоков
                            14 ноября 2014, 16:22
                            0
                            да все правильно считает
                            Странно, а не должен, потому что скрипт считает количество отображаемых
                            <li>
                            элементов.
        panov_a_v
        10 ноября 2014, 14:33
        0
        Сергей, может быть, Вы мне поможете в моей ситуации, с которой я уже бьюсь несколько дней.
        Задача у меня такая: сделать страницу отзывов, где их могли бы оставлять незарегистрированные пользователи. В общем, такую, как Вы описываете в статьях.
        Сначала я мучился с дополнением Quip. Вроде бы его установил, появлялась форма для отправки комментария, но сам комментарий после отправки не появлялся на странице, как я ни бился. В итоге мне подсказали попробовать Tickets.
        Замечу, что сайт я уже почти собрал (поиск по сайту, форма обратной связи, блог и пр.), т.е. getResources, Wayfinder, Breadcrumbs и некоторые другие дополнения установлены. Всё работает, остались только отзывы.
        Установил пакеты Tickets, Jevix и PdoTools. У сниппета TicketCommentsAjax создал новый набор параметров (newTicket), где разрешил незарегистрированным пользователям оставлять сообщения без модерации. На страницу отзывов поместил вызов: [[!TicketCommentsAjax@newTicket? &limit=`20`]].
        В итоге набираю комментарий, отправляю, но он не появляется. То же самое происходит без использования Ajax.
        В чём может быть проблема?
          Сергей Шлоков
          10 ноября 2014, 14:51
          0
          Начни с логов. Также глянь в таблицу tickets_comments. Там комментарии появляются?
            panov_a_v
            10 ноября 2014, 14:55
            0
            А можно чуть поподробнее, если не трудно? Я на MODX впервые сайт делаю.
              panov_a_v
              10 ноября 2014, 15:09
              0
              А, Вы имеете в виду таблицу в phpMyAdmin. Посмотрю.
          panov_a_v
          10 ноября 2014, 15:17
          0
          В таблице ноль строк.
            Сергей Шлоков
            10 ноября 2014, 15:19
            0
            Смотри Журнал ошибок в админке.
              panov_a_v
              10 ноября 2014, 15:29
              0
              Каждый раз, как пытаюсь оставить комментарий, появляется:
              [2014-11-10 12:14:49] (ERROR @ /index.php) Encountered empty IN condition with key id
              [2014-11-10 12:14:49] (ERROR @ /index.php) [pdoTools] Error 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND `TicketComment`.`published` = 1 ) GROUP BY TicketComment.id ORDER BY Tick' at line 1
                panov_a_v
                10 ноября 2014, 15:35
                0
                Сайт на Denwere, MySQL 5.5.25.
                  Сергей Шлоков
                  10 ноября 2014, 16:21
                  0
                  Попробуй родной сниппет TicketComments. Почисти все кэши.
                  Хотя судя по тому, что у тебя и с Quip такая же проблема, то возможно чего-то с sql server не так.
                    panov_a_v
                    10 ноября 2014, 18:58
                    0
                    Без Ajax'а тоже не вышло.
                    Как Вы думаете, если я сменю Денвер на OpenServer, ошибки могут исчезнуть? Где-то читал, что MODX Revo лучше чувствует себя на OS.
                      Сергей Шлоков
                      10 ноября 2014, 20:07
                      0
                      Тут я помочь не смогу. Это к большим братьям.
                        Саша Пекшев
                        14 ноября 2014, 15:18
                        0
                        насчет ошибки

                        0.0003750: Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND `TicketComment`.`published` = 1 )  GROUP BY TicketComment.id ORDER BY Tick' at line 1
                        у меня такая же проблема, даже не увидел как лог перешел за мегабайты =) ошибка возникает когда у ресурса нет комментариев и только когда параметр limit есть

                        потому что вот такой where запрос когда Комментов нету

                        WHERE  ( `TicketComment`.`id` IN () AND `TicketComment`.`published` = 1 )  GROUP BY TicketComment.id ORDER BY TicketComment.id ASC
                        IN пустой
                      Andrei Kulazhenko
                      10 ноября 2014, 21:35
                      0
                      Я бы на Вашем месте, друг мой, не озадачивал себя дальнейшими вопросами по поводу Денвера. Он уже давно устарел, баги не исправляются, а Котеров, похоже, охладел к своему детищу. По сравнению с Денвером Open Server будет, конечно, лучшим вариантом для начинающих. Но вместо всех этих «танцев с бубном» в качестве оптимального решения для Windows (если Вы по какой-то причине не хотите возиться с установкой Linux-дистрибутива и разворачиванием соответствующего окружения) я могу порекомендовать Vagrant — www.vagrantup.com/

                      Статья в Википедии — ru.wikipedia.org/wiki/Vagrant

                      Статья на Хабре — habrahabr.ru/post/140714/

                      P.S. Есть еще виртуальный образ UbuntuServer для VirtualBox c инструкциями, собранный Василием. Где-то здесь должен быть соответствующий пост.
                        Andrei Kulazhenko
                        10 ноября 2014, 21:36
                        0
                        Какой-то глюк. Хотел ответить panov_a_v
                          Сергей Шлоков
                          10 ноября 2014, 21:55
                          0
                          Я работаю на XAMPР для Винды. Как и Боб Рей.
                  panov_a_v
                  10 ноября 2014, 23:04
                  0
                  Проблема решена. Был конфликт с подключённой версией библиотеки jQuerry.
                  Банально. Но без помощи одного хорошего человека я б сегодня не додумался до этого. ;)
                    Евгений
                    14 ноября 2014, 23:21
                    0
                    Многие страдают при преходе с денвера на хостинг, так что задумайтесь пока не слишком поздно
                      panov_a_v
                      14 ноября 2014, 23:23
                      0
                      Пока проблем не было. Но всё равно перейду на OS.
                    Alexey
                    27 мая 2016, 07:48
                    0
                    Странно, не могу понять: всё сделал как написано, но — при нажатии кнопки «предпросмотр» в соответствующем окне выводится массив данных:

                    Array ( [id] => [thread] => 0 [parent] => 0 [text] => test [raw] => [name] => Alexey [email] => mg151232@yandex.ru [ip] => 0.0.0.0 [rating] => 0 [rating_plus] => 0 [rating_minus] => 0 [createdon] => 2016-05-27 07:38:55 [createdby] => 1 [editedon] => [editedby] => 0 [published] => 1 [deleted] => [deletedon] => [deletedby] => 0 [properties] => Array ( ) [resource] => 8 [mode] => preview [has_parent] => [cant_vote] => 1 [bad] => [gravatar] => https://www.gravatar.com/avatar/81a25e4b12b7a6f64e8a9559311089aa?s=128&d=mm [avatar] => https://www.gravatar.com/avatar/81a25e4b12b7a6f64e8a9559311089aa?s=128&d=mm [url] => http://alexxx6c.bget.ru/comments.html [date_ago] => Только что [fullname] => Alexey [guest] => [comment_edit_link] => 1 [children] => [comment_was_edited] => [comment_new] => )
                    и на кнопку отправить сниппет никак не реагирует. В консоли ошибок нет, в логе MODX — тоже. Если вызываю обычный сниппет TicketComments, то новый коммент нормально сохраняется. Мой вариант вызова сниппета:

                    [[!TicketCommentAjax? 
                    		                   &limit=`6`
                    		                   &formBefore=`1` 
                    		                   &parents=`8`
                    		                   &depth=`0`
                    		                   &gravatarSize=`128` 
                    		                   &allowGuest=`1` 
                    		                   &enableCaptcha=`0`
                    		                   &autoPublish=`1`
                    		                   &showLog=`0`
                    		                   ]]
                    ПОдскажите, пожалуйста, в какую сторону копать? Вот сама страничка со сниппетом: клик
                      Alexey
                      27 мая 2016, 18:46
                      0
                      А, нет, сорри, есть ошибки в логе. Правда, не знаю насколько они связаны с этой проблемой… вот:

                      [2016-05-26 21:54:16] (ERROR @ /assets/components/tickets/connector.php) Encountered empty IN condition with key id
                      [2016-05-27 02:18:01] (ERROR @ /connectors/index.php) Path specified for package tickets is not a valid or accessible directory: /home/a/alexxx6c/alexxx6c.bget.ru/public_html/core/components/tickets/model/
                      [2016-05-27 02:18:02] (ERROR @ /connectors/index.php) Path specified for package tickets is not a valid or accessible directory: /home/a/alexxx6c/alexxx6c.bget.ru/public_html/core/components/tickets/model/
                      Ясно, что с tickets как-то связано… путь к какой-то папке неправильный?
                        Алексей Федоров
                        28 мая 2016, 00:18
                        0
                        Вообще-то в тикетс уже давно добавлены аякс-комментарии из коробки, ничего переделывать не нужно. Установил вызвал сниппет и все круто)
                          Alexey
                          28 мая 2016, 02:12
                          0
                          Алексей, я был бы очень признателен, если бы Вы показали мне реальный пример вызова сниппета, где присутствует форма для неавторизованных посетителей, расположенная сверху, список комментариев под ней, которые подгружаются заданным количеством при помощи аякса. Мне не удалось найти такого варианта. Тот, который нашел, как Вы понимаете, отказывается нормально работать.

                          Я попробовал ещё на паре поддоменов с MODX организовать вывод отзывов — в одном та же самая ерунда получмлась, а вот на втором всё заработало с пол-оборота. Странно… хостинг один, учетка одна — просто папки разные!
                            Alexey
                            28 мая 2016, 03:21
                            0
                            В общем, получилось решить задачу стандартными средствами! Немного поковырял чанки, вывел два сниппета раздельно и мозаика сложилась. Всё равно жалко, конечно, что не получилось сниппет Сергея задействовать — у него получилось очень просто и гладко… Спасибо всем!
                              Алексей Федоров
                              28 мая 2016, 09:10
                              +1
                              Поздравляю, но на всякий случай советую зайти сюда и вот сюда, пробежать глазами и увидеть, что особо ковырять ничего и не нужно.
                              присутствует форма для неавторизованных посетителей
                              Настройки сниппета TicketComment
                              &allowGuest 0 Включить возможность комментирования для неавторизованных пользователей?
                              и
                              расположенная сверху
                              Смотрим там же
                              &formBefore 0 Расположить форму комментирования перед комментариями. По умолчанию — нет.
                              ajax, повторюсь, работает из коробки) Если нужно ограничить количество комментов и выводить через кнопку типа «Показать еще», идем в репозиторий и качаем AjaxSnippet

                              Чуть не забыл, что для решения можно использовать и pdoPage Этот вариант даже проще будет_
                                Alexey
                                28 мая 2016, 11:19
                                0
                                Алексей, благодарю за помощь! В том-то и дело, что я выводил комментарии через pdoPage, включив режим подгрузки новых комментов с помощью кнопки. Но — вместе с ними заново подгружалась форма, и так несколько раз — форма, часть комментов, форма, часть комментов.
                                Вот вызов сниппета:
                                [[!TicketComments? 
                                		                   &limit=`6`
                                		                   &formBefore=`1` 
                                		                   &depth=`1`
                                		                   &gravatarSize=`128` 
                                		                   &allowGuest=`1` 
                                                                   &ajaxMode=`button`
                                		                   &enableCaptcha=`0`
                                		                   &autoPublish=`1`
                                		                   &showLog=`0`
                                		                   ]]
                                Если же выводить просто постраничной пагинацией, даже аяксом (режим &ajaxMode=`default`), то всё нормально работает — форма, соответственно, на каждую страницу один раз выводится.

                                Поэтому я пошел по другому пути, вот вызов:

                                [[TicketComments?
                                        	           &allowGuest=`1` 
                                                           &formBefore=`1`
                                            		   &enableCaptcha=`0`
                                                         ]]
                                	
                                	
                                	           <div id="pdopage">
                                                    <div class="rows">
                                                        [[!pdoPage?
                                                            &element=`getComments`
                                                            &ajaxMode=`button`
                                                            &gravatarSize=`128`
                                            		    &ajaxElemMore=`#pdopage .also`
                                            		    ajaxTplMore=`<a class="btn btn-default also" href="#" role="button">Показать ещё</a>`
                                                        ]]
                                                    </div>
                                                    [[!+page.nav]]
                                                </div>
                                То есть, при вызове TicketComments, выводится только форма (в чанке tpl.Tickets.comment.wrapper убрал плейсхолдер [[+comments]]), а сами комменты вывожу сниппетом getComments через pdoPage, тогда всё работает корректно! Возможно, что есть более простой вариант, но мне пока что не удалось его найти.
                                  Yar
                                  Yar
                                  14 марта 2017, 13:06
                                  0
                                  Так выводятся комменты со всего сайта (нужно задать &parenrs) и нет кнопки ответить
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      62