[Tickets] Ajax комментарии
В продолжении темы про книгу отзывов.
Как и обещал, выкладываю описание решения. Только я решил разбить его на отдельные пункты, потому что каждая из описанных возможностей может быть использована независимо от других.
Первым пунктом была указана возможность ajax подгрузки комментариев. Она самая простая. С нее и начнем.
Итак, чтобы сделать ajax комментарии нужно всего 3 маленьких шага и не больше 10 минут.
1. Немного подправим сниппет TicketComment. Советую сделать следующее: скопировать его (чтобы сохранить все параметры) и назвать, например, TicketCommentAjax. Заменить исходный код на этот.
2. В чанк tpl.Tickets.comment.wrapper вставляем плейсхолдер [[+more_comments]], который отвечает за отображение кнопки «Еще комментарии», и быстрый плейсхолдер с конце чанка.
3. Теперь нужно заставить добавленную кнопку выводит эти самые «еще комментарии». Тут есть 2 варианта.
Вариант 1. Нужно подправить файл assets/components/tickets/js/web/default.js. Работаем по тому же алгоритму, что и в первом шаге: делаем копию этого файла (например, ajaxcomments.js) и добавляем в него после строчки //Forms listeners (строчка №17) следующие строки:
Теперь идем в настройки системы, выбираем раздел Tickets и изменяем параметр Скрипты фронтенда на [[+jsUrl]]web/ajaxcomments.js
Вариант 2. Попроще. Чтобы не лезть в системные настройки, можно, например, в чанке tpl.Tickets.comment.wrapper, который мы редактируем на втором шаге, добавить следующий код:
Вот собственно и все. Теперь вставляем наш сниппет куда нужно, указывая параметр limit, который и отвечает за ajax. Пример:
Маленькая ремарка. Параметр limit ограничивает только комментарии первого уровня. Чтобы ограничить глубину ветки, нужно указывать стандартный параметр depth.
Все должно работать.
П.С Еще раз хочу выразить восхищение разработками Василия — мощные, гибкие, легко расширяемые, а главное очень понятные. Вспоминаю потраченные в пустую 3 дня, когда пытался разобраться с modxTalks, как страшный сон. Не в обиду Валентину и Ивану, но факт есть факт. Я свой выбор сделал, хотя поначалу и боялся, что Tickets мне не подойдет. Но как видите, 10 минут и вуаля.
П.П.С. Из описаний остались смайлики (уже готово) и возможность удаления/восстановления комментариев из фронт-энда. На первое нужно также не более 10 минут. А вот со вторым все сложнее. Описание и сложность будет зависеть, примет ли Василий мои предложения по доработке Tickets и pdoTools. Если да, то это будет работать из коробки (или почти), если нет — то придется создавать свои классы.
П.П.С. Замечания и пожелания приветствуются. Как говориться, совершенству нет предела. :)
Update. 14.11.2014 Обновлен сниппет TicketCommentAjax. Тем, кто уже успел его скачать, нужно обновиться.
Как и обещал, выкладываю описание решения. Только я решил разбить его на отдельные пункты, потому что каждая из описанных возможностей может быть использована независимо от других.
Первым пунктом была указана возможность 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. Тем, кто уже успел его скачать, нужно обновиться.
Поблагодарить автора
Отправить деньги
Комментарии: 62
я зашел на тестовый сайт, и поудалял отзывы, я не злой, честно )
Да, почему, кто угодно может удалить чужие комментарии?) Или это аналог таблички из админки?
А где тут написано про удаление комментариев? Здесь про ajax. Если ты имеешь ввиду это, то я там написал, что такая возможность доступна всем, чтобы потестировать. Определяется она в сниппете флагом
can_deleteУсловия можно определять разные. Можно например так:
if ($modx->user->hasSessionContext('mgr') || $modx->user->id == 1) {
$can_delete = 1;
}
Можно разрешить пользователям удалять свои комментарии. В общем, ограничивает только полет фантазии. :)
Сергей, очень полезный функционал. По твоему примеру сделал отзывы на одном из сайтов. Расскажи, а как то же самое провернуть с pdoPage? Как подгружать товары не страницами и пагинацией, а как на юлмарте — «Показать еще 50 товаров» и т.д.
Точно подсказать, не могу, это разбираться надо. Попробуй сделать по аналогии.
что то не получилось ) при установки limit комментарии вообще не отображаются, при нажатии кнопки еще комментарии появляются и через раз, может проблема с глубиной я так и не понял.
вот такой вызов
и такой wrapper
вот такой вызов
[[!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>-->
Добавь &showLog=`1` и посмотри какой sql запрос формируется.
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
если убрать `TicketComment`.`id` IN (645,644,643,642,641,640,639,638,637,636), через phpmyadmin выполнить скрипт все норм конечно лимита нет, но и ид моих Комментов совсем другие, поэтому и не находит
Ну а как сниппет должен сообразить, что выводить нужно комментарии пользователя 47? Это нужно ему указать либо в коде, либо через параметр. Приезду домой, выложу решение.
нет я не зато, это ресурс создан юзером 47, а не комменты пользователя, я имею ввиду что при использования параметра limit, то выборка
которая присоединяет условие
Выборка этих айди не привязана к Thread — а идет просто с сортировкой по дате, а должна привязываться к данному ресурсу, но даже если явно указать thread тоже не учитывается
которая присоединяет условие
Added where condition: id:IN(645,644,643,642,641,640,639,638,637,636), published=1
не вернаВыборка этих айди не привязана к Thread — а идет просто с сортировкой по дате, а должна привязываться к данному ресурсу, но даже если явно указать thread тоже не учитывается
Привязал. Вот попробуй.
Вывод начальных помогло, при вызове «еще комментарии» в консоле видно что request идет, но кнопка становиться disabled и все, пока смотрю что там
Кнопка становиться disabled когда выводить больше нечего. Проверь, может все комментарии с первого захода вывелись?
У меня все работает.
У меня все работает.
комментариев всего 17, а выводит только 10
Честно, не знаю в чем причина. Попробуй почистить кэш, закрой все сессии, еще раз сверься с описанием.
Если не поможет, добавь в сниппет TicketCommentAjax после строчки
Если не поможет, добавь в сниппет TicketCommentAjax после строчки
if ($ajax) {
(это строка 109) следующий код$output .= "<pre>".$modx->getPlaceholder('pdoTools.log');
die($output);
и посмотри ответ от сервера. Проверь SQL запрос.
нашел в чем проблема, он не загружает вложенные комментарии больше 2. то есть родительский и внутренний, если вложенность достигает 3 уровня он ее не выводит. Протестил даже на твоем сайте такой же баг
Сорри за паузу. Времени катастрофически не хватает.
Там сниппет другой — в нем сразу все прописано: и смайлики, и ajax и удаление/восстановление. Поэтому в процессе выделения только одного решения возможно где-то что-то упустил.
А сниппет TicketCommentAjax надо обновить — некорректно работала функция getChildIds. На тестовом сайте ее нет, там она работает через расширяемый класс pdoFetch.
Вот попробуй.
П.С. Спасибо за тестирование. Надеюсь, теперь будет работать для всех условий.
Протестил даже на твоем сайте такой же багНа тестовом сайте стоял depth=2. Ограничил до 10.
Там сниппет другой — в нем сразу все прописано: и смайлики, и ajax и удаление/восстановление. Поэтому в процессе выделения только одного решения возможно где-то что-то упустил.
А сниппет TicketCommentAjax надо обновить — некорректно работала функция getChildIds. На тестовом сайте ее нет, там она работает через расширяемый класс pdoFetch.
Вот попробуй.
П.С. Спасибо за тестирование. Надеюсь, теперь будет работать для всех условий.
Да работает )) но теперь с depth проблемы. Если убрать depth выводит все как надо, а если поставить допустим 2, то и комментарии только до 2 уровня, а 3+ отрезает
а если поставить допустим 2, то и комментарии только до 2 уровня, а 3+ отрезает
Не совсем понял. А как должно быть?
Так и задумывалось: указываешь, сколько уровней комментариев выводить, столько и выводит, остальные отрезает. Отрезает именно уровни, а не комментарии на уровне. Т.е. если на 2-ом уровне 20 комментариев, то они все выводятся, limit действует только на 1-й уровень.
А должен не отрезать, а выводит до уровне deaph визуально — так сделано в оригинальном снипете, ну и в вашем варианте тоже можно если убрать лимит и поставить deaph=2, то 2 уровень будет максимальный для всех, и он выведет комментарии и 5 уровне, но он будет выводить как 2 уровень в 1 ряд.
PS. Даже наша ветка комментариев тому пример =) тут стоит deaph=10
PS. Даже наша ветка комментариев тому пример =) тут стоит deaph=10
А мне нужно именно отрезать.
Ок. Чтобы сделать как здесь, нужно всего лишь в строчке сниппета убрать из массива последний параметр depth.
Ок. Чтобы сделать как здесь, нужно всего лишь в строчке сниппета убрать из массива последний параметр depth.
Спасибо, все заработало ) пойду браться за смайлики =)
Тебе спасибо.
PS. Даже наша ветка комментариев тому пример =) тут стоит deaph=10Обрати внимание, что depth=10, а этот последний уровень является 11-ым. Т.е. судя по всему 1-й уровень не считается. Но это скорее вопрос к Василию.
Да можно было б отключить древовидные комментарии лишь уровнем вложенности depth=1 и все, и кстати вот еще нашел что плейсхолдер total теперь считается с лимитом
Еще нашел странный баг, если у ресурса не было комментариев то и форма не показывается
Это с лимитом или без?
с ним, без него все ок
вот такой 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
Еще нашел странный баг, если у ресурса не было комментариев то и форма не показываетсяFixed.
плейсхолдер total теперь считается с лимитомDone.
Лежит тут
да все отлично! еще раз спасибо)
total считает не правильно, он считает только все 0 уровни Коментарии и его потомков по лимиту, а не все комментарии в теме
Понял про что ты говоришь. Это скрипт считает и переписывает значение из сниппета. Я закомментировал и забыл про него. :) Буду подумать.
Временно, можешь изменить id у span в чанке tpl.Tickets.comment.wrapper
<span id="comment-total">[[+total]]</span>
Обзови id по другому или удали его.
сделал как вы, теперь все работает норм
да все правильно считаетСтранно, а не должен, потому что скрипт считает количество отображаемых
<li>
элементов.
Сергей, может быть, Вы мне поможете в моей ситуации, с которой я уже бьюсь несколько дней.
Задача у меня такая: сделать страницу отзывов, где их могли бы оставлять незарегистрированные пользователи. В общем, такую, как Вы описываете в статьях.
Сначала я мучился с дополнением Quip. Вроде бы его установил, появлялась форма для отправки комментария, но сам комментарий после отправки не появлялся на странице, как я ни бился. В итоге мне подсказали попробовать Tickets.
Замечу, что сайт я уже почти собрал (поиск по сайту, форма обратной связи, блог и пр.), т.е. getResources, Wayfinder, Breadcrumbs и некоторые другие дополнения установлены. Всё работает, остались только отзывы.
Установил пакеты Tickets, Jevix и PdoTools. У сниппета TicketCommentsAjax создал новый набор параметров (newTicket), где разрешил незарегистрированным пользователям оставлять сообщения без модерации. На страницу отзывов поместил вызов: [[!TicketCommentsAjax@newTicket? &limit=`20`]].
В итоге набираю комментарий, отправляю, но он не появляется. То же самое происходит без использования Ajax.
В чём может быть проблема?
Задача у меня такая: сделать страницу отзывов, где их могли бы оставлять незарегистрированные пользователи. В общем, такую, как Вы описываете в статьях.
Сначала я мучился с дополнением Quip. Вроде бы его установил, появлялась форма для отправки комментария, но сам комментарий после отправки не появлялся на странице, как я ни бился. В итоге мне подсказали попробовать Tickets.
Замечу, что сайт я уже почти собрал (поиск по сайту, форма обратной связи, блог и пр.), т.е. getResources, Wayfinder, Breadcrumbs и некоторые другие дополнения установлены. Всё работает, остались только отзывы.
Установил пакеты Tickets, Jevix и PdoTools. У сниппета TicketCommentsAjax создал новый набор параметров (newTicket), где разрешил незарегистрированным пользователям оставлять сообщения без модерации. На страницу отзывов поместил вызов: [[!TicketCommentsAjax@newTicket? &limit=`20`]].
В итоге набираю комментарий, отправляю, но он не появляется. То же самое происходит без использования Ajax.
В чём может быть проблема?
Начни с логов. Также глянь в таблицу tickets_comments. Там комментарии появляются?
А можно чуть поподробнее, если не трудно? Я на MODX впервые сайт делаю.
А, Вы имеете в виду таблицу в phpMyAdmin. Посмотрю.
В таблице ноль строк.
Смотри Журнал ошибок в админке.
Каждый раз, как пытаюсь оставить комментарий, появляется:
[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
[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
Сайт на Denwere, MySQL 5.5.25.
Попробуй родной сниппет TicketComments. Почисти все кэши.
Хотя судя по тому, что у тебя и с Quip такая же проблема, то возможно чего-то с sql server не так.
Хотя судя по тому, что у тебя и с Quip такая же проблема, то возможно чего-то с sql server не так.
Без Ajax'а тоже не вышло.
Как Вы думаете, если я сменю Денвер на OpenServer, ошибки могут исчезнуть? Где-то читал, что MODX Revo лучше чувствует себя на OS.
Как Вы думаете, если я сменю Денвер на OpenServer, ошибки могут исчезнуть? Где-то читал, что MODX Revo лучше чувствует себя на OS.
Тут я помочь не смогу. Это к большим братьям.
насчет ошибки
потому что вот такой where запрос когда Комментов нету
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 пустой
Я бы на Вашем месте, друг мой, не озадачивал себя дальнейшими вопросами по поводу Денвера. Он уже давно устарел, баги не исправляются, а Котеров, похоже, охладел к своему детищу. По сравнению с Денвером Open Server будет, конечно, лучшим вариантом для начинающих. Но вместо всех этих «танцев с бубном» в качестве оптимального решения для Windows (если Вы по какой-то причине не хотите возиться с установкой Linux-дистрибутива и разворачиванием соответствующего окружения) я могу порекомендовать Vagrant — www.vagrantup.com/
Статья в Википедии — ru.wikipedia.org/wiki/Vagrant
Статья на Хабре — habrahabr.ru/post/140714/
P.S. Есть еще виртуальный образ UbuntuServer для VirtualBox c инструкциями, собранный Василием. Где-то здесь должен быть соответствующий пост.
Статья в Википедии — ru.wikipedia.org/wiki/Vagrant
Статья на Хабре — habrahabr.ru/post/140714/
P.S. Есть еще виртуальный образ UbuntuServer для VirtualBox c инструкциями, собранный Василием. Где-то здесь должен быть соответствующий пост.
Какой-то глюк. Хотел ответить panov_a_v
Проблема решена. Был конфликт с подключённой версией библиотеки jQuerry.
Банально. Но без помощи одного хорошего человека я б сегодня не додумался до этого. ;)
Банально. Но без помощи одного хорошего человека я б сегодня не додумался до этого. ;)
Многие страдают при преходе с денвера на хостинг, так что задумайтесь пока не слишком поздно
Пока проблем не было. Но всё равно перейду на OS.
Странно, не могу понять: всё сделал как написано, но — при нажатии кнопки «предпросмотр» в соответствующем окне выводится массив данных:
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`
]]
ПОдскажите, пожалуйста, в какую сторону копать? Вот сама страничка со сниппетом: клик
А, нет, сорри, есть ошибки в логе. Правда, не знаю насколько они связаны с этой проблемой… вот:
[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 как-то связано… путь к какой-то папке неправильный?
Вообще-то в тикетс уже давно добавлены аякс-комментарии из коробки, ничего переделывать не нужно. Установил вызвал сниппет и все круто)
Алексей, я был бы очень признателен, если бы Вы показали мне реальный пример вызова сниппета, где присутствует форма для неавторизованных посетителей, расположенная сверху, список комментариев под ней, которые подгружаются заданным количеством при помощи аякса. Мне не удалось найти такого варианта. Тот, который нашел, как Вы понимаете, отказывается нормально работать.
Я попробовал ещё на паре поддоменов с MODX организовать вывод отзывов — в одном та же самая ерунда получмлась, а вот на втором всё заработало с пол-оборота. Странно… хостинг один, учетка одна — просто папки разные!
Я попробовал ещё на паре поддоменов с MODX организовать вывод отзывов — в одном та же самая ерунда получмлась, а вот на втором всё заработало с пол-оборота. Странно… хостинг один, учетка одна — просто папки разные!
В общем, получилось решить задачу стандартными средствами! Немного поковырял чанки, вывел два сниппета раздельно и мозаика сложилась. Всё равно жалко, конечно, что не получилось сниппет Сергея задействовать — у него получилось очень просто и гладко… Спасибо всем!
Поздравляю, но на всякий случай советую зайти сюда и вот сюда, пробежать глазами и увидеть, что особо ковырять ничего и не нужно.
Чуть не забыл, что для решения можно использовать и pdoPage Этот вариант даже проще будет_
присутствует форма для неавторизованных посетителейНастройки сниппета TicketComment
&allowGuest 0 Включить возможность комментирования для неавторизованных пользователей?и
расположенная сверхуСмотрим там же
&formBefore 0 Расположить форму комментирования перед комментариями. По умолчанию — нет.ajax, повторюсь, работает из коробки) Если нужно ограничить количество комментов и выводить через кнопку типа «Показать еще», идем в репозиторий и качаем AjaxSnippet
Чуть не забыл, что для решения можно использовать и pdoPage Этот вариант даже проще будет_
Алексей, благодарю за помощь! В том-то и дело, что я выводил комментарии через 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, тогда всё работает корректно! Возможно, что есть более простой вариант, но мне пока что не удалось его найти.
Так выводятся комменты со всего сайта (нужно задать &parenrs) и нет кнопки ответить
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.