Tickets Пять проблем со сниппетов
1) Латинские символы в тексте сообщения и в имени пользователя отображаются в виде знаков вопроса ?????
2) Использую только сниппет комментариев, вызывая его как [[!TicketComments?]]
Проблема заключается в следующем, при добавление нескольких комментариев подряд, каждый последующий комментарий переписывает предыдущий. Но если перезагрузить страницу становятся видные все комментарии.
3) При нажатии на ссылку «изменить» появляется окно с надписью «comment-en-ns»
4) Как вывести в шаблоне количество просмотров и количество комментариев?
[[+tickets] [[+views]] — отображают только иноки и ни каких цифр. Нужно отображать количество даже на тех страницах где сниппет TicketComments не вызывается.
5) Как бороться со спамом? Ticket не только не фильтует спам, а напртив преобразует строку spam.com/page.html в активную ссылку.
2) Использую только сниппет комментариев, вызывая его как [[!TicketComments?]]
Проблема заключается в следующем, при добавление нескольких комментариев подряд, каждый последующий комментарий переписывает предыдущий. Но если перезагрузить страницу становятся видные все комментарии.
3) При нажатии на ссылку «изменить» появляется окно с надписью «comment-en-ns»
4) Как вывести в шаблоне количество просмотров и количество комментариев?
[[+tickets] [[+views]] — отображают только иноки и ни каких цифр. Нужно отображать количество даже на тех страницах где сниппет TicketComments не вызывается.
5) Как бороться со спамом? Ticket не только не фильтует спам, а напртив преобразует строку spam.com/page.html в активную ссылку.
Комментарии: 28
1. Что-то очень странное с кодировками.
2. Смотри в консоль браузера, должна быть ошибка javascript.
3. Возможно, связано с предыдущей проблемой.
4. Получить ресурс через $object = $modx->getObject('Ticket',15), а потом нужные поля через $object->get('views') и $object->get('comments')
5. Блокировать спамеров. Вот тут есть плагин, как разлогинивать заблокированных юзеров с сайта. Автоматическое создание ссылок можно отключить в параметрах Jevix, наборы Ticket и Comment.
Также можно написать свой плагинчик, который будет банить юзеров автоматом, при попытке запостить определённые слова.
У меня такой проблемы пока не возникало.
2. Смотри в консоль браузера, должна быть ошибка javascript.
3. Возможно, связано с предыдущей проблемой.
4. Получить ресурс через $object = $modx->getObject('Ticket',15), а потом нужные поля через $object->get('views') и $object->get('comments')
5. Блокировать спамеров. Вот тут есть плагин, как разлогинивать заблокированных юзеров с сайта. Автоматическое создание ссылок можно отключить в параметрах Jevix, наборы Ticket и Comment.
Также можно написать свой плагинчик, который будет банить юзеров автоматом, при попытке запостить определённые слова.
У меня такой проблемы пока не возникало.
1) Понятно, что с кодировкой проблема, а где именно копать?
2,3) Скорее всего да, проблема с javascript, как обнаружить и решить проблему?
4) Не очень понятно как применить этот пункт на практике. Можно по подробнее пожалуйста.
5) Разобрался, спасибо.
2,3) Скорее всего да, проблема с javascript, как обнаружить и решить проблему?
4) Не очень понятно как применить этот пункт на практике. Можно по подробнее пожалуйста.
5) Разобрался, спасибо.
4. modx.pro/help/539/#comment-4963 — Не совсем то. Нужно сначала от куда то получить id ресурса.
Пробовал $id = $modx->resource->get('id'); — не помогло. Создал сниппет
$id = $modx->resource->get('id');
$q = $modx->newQuery('modResource', $id);
$q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-{$id}'");
$q->leftJoin('TicketComment','TicketComment', "`TicketThread`.`id` = `TicketComment`.`thread`");
$q->select('COUNT(`TicketComment`.`id`) as `comments`');
$count = 0;
if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) {
echo $thread->get('comments');
}
return $count;
Если вставить вызывать этот сниппет в чанк для сниппета getResources, то возвращается id не ресурсов с которыми работает getResources, а id текущего ресурса.
Пробовал $id = $modx->resource->get('id'); — не помогло. Создал сниппет
$id = $modx->resource->get('id');
$q = $modx->newQuery('modResource', $id);
$q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-{$id}'");
$q->leftJoin('TicketComment','TicketComment', "`TicketThread`.`id` = `TicketComment`.`thread`");
$q->select('COUNT(`TicketComment`.`id`) as `comments`');
$count = 0;
if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) {
echo $thread->get('comments');
}
return $count;
Если вставить вызывать этот сниппет в чанк для сниппета getResources, то возвращается id не ресурсов с которыми работает getResources, а id текущего ресурса.
Сниплет:
if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) {
echo $thread->get('comments');
};
Вызов:[[!qtyComments? &id=`[[+id]]`]] //как раз вызов в getResources
А как вывести [[+date_ago]] на странице тикета? Таким же способом не получается.
Честно не знаю спроси у Василия
Этот способ помог. Спасибо.
Если я правильно понимаю, то получить количество просмотров комментариев я не смогу.
Сниппет считает только просмотры непосредственно тикетов. Если я вывожу только сниппет комментариев TicketComments под новостями, то подсчет количества просмотров производится не будет.
По крайней nf,kbwf мере modx_tickets_views в БД пустая.
Вопросы 1-3 касательно кодировки и ошибки в JavaScrip еще актуальны
Если я правильно понимаю, то получить количество просмотров комментариев я не смогу.
Сниппет считает только просмотры непосредственно тикетов. Если я вывожу только сниппет комментариев TicketComments под новостями, то подсчет количества просмотров производится не будет.
По крайней nf,kbwf мере modx_tickets_views в БД пустая.
Вопросы 1-3 касательно кодировки и ошибки в JavaScrip еще актуальны
Тут дело вообще не в сниппетах.
Просмотры тикета считает сам класс Ticket при его показе юзеру. Делается это для вывода юзеру количества непрочитанных комментариев в тикете.
Зачем считать показы комментариев — не знаю.
Просмотры тикета считает сам класс Ticket при его показе юзеру. Делается это для вывода юзеру количества непрочитанных комментариев в тикете.
Зачем считать показы комментариев — не знаю.
1,2,3 Проблемы так же решены. Проблема заключалось в том, что в bootstrap шаблоне библиотека jquery вызывалась ниже по коду чем сниппет TicketComments
А как решилась проблема с кодировкой?
Отвечаю себе же)
оказалось, что таблицы то были в UTF-8, а вот поля в swedish
оказалось, что таблицы то были в UTF-8, а вот поля в swedish
Здравствуйте, у меня проблемы 2 и 3, jquery вызывается в самом начале. Покопалась, похоже из-за того, что в вывод только что отправленного коммента не подставляется его id
ps Консоль ошибок не выдает
<li class="ticket-comment" id="comment-" data-parent="0">
...
</li>
С чем это может быть связано?ps Консоль ошибок не выдает
Нашла из-за чего это происходит, но не знаю как исправить, прошу помощи!
ID коммента не отдает, если юзер залогинен через сниппет Login, а если через Loginza или HybridAuth, тогда все нормально.
Подскажите пожалуйста, в какую сторону копать. Спасибо!
ID коммента не отдает, если юзер залогинен через сниппет Login, а если через Loginza или HybridAuth, тогда все нормально.
Подскажите пожалуйста, в какую сторону копать. Спасибо!
точнее не залогинен через Login, а зарегистрирован через него (сниппет Register)
копаю) обнаружила, что если в файле core/components/tickets/model/tickets/tickets.class.php в функции saveComment закомментировать строчку
$comment = array_merge($profile, $comment);
, то ID появляется. Следовательно, вопрос — для чего нужна эта строка и на что может повлиять, если ее оставить закомментированной? вроде бы все нормально работает.
Это добавляет в комментарий поля из профиля юзера.
Как это может мешать — не представляю. Тем более, как это может зависеть от способа регистрации?
Как это может мешать — не представляю. Тем более, как это может зависеть от способа регистрации?
спасибо за ответ, Василий! Я сама теряюсь в догадках, сверила все поля зарегенных через Login и через HybridAuth, и в базе, и в сессии, вроде бы все одинаковое, только ключ класса разный(modUser и haUser) а вот почему-то не срабатывает. А в комментарий наверное добавляется только аватар из профиля? логин(имя) у меня отображается. С аватаром еще не пробовала.
Там всё добавляется, мало ли, кому что нужно, весь modUserProfile.
Короче, непонятно. Подождём еще подобных сообщений.
Короче, непонятно. Подождём еще подобных сообщений.
может array_merge перезаписывает id юзера на id коммента и не находит потом его (или наоборот)?
1. Как там указано array_merge, это комментарий перезаписывает профиль
2. Даже если и наоборот — хоть какой-то id должен быть, так ведь? Пустого id в таблицах MODX не бывает.
2. Даже если и наоборот — хоть какой-то id должен быть, так ведь? Пустого id в таблицах MODX не бывает.
в таблицу отправляет нормально (после перезагрузки страницы id появляется), просто не выводит его сразу после отправки коммента, соответственно на него и ответить нельзя (ну
это если сам себе отвечаешь) и редактировать его нельзя.
это если сам себе отвечаешь) и редактировать его нельзя.
Ну сделай print_r($array);die; и посмотри что в массиве и куда id пропадает.
конфликта с другими скриптами быть не может, проверяла — убирала все свое.
РЕШЕНО))
в функции getChunk
print_r($pl) —
Решилось добавлением в вызов Register параметра
Василий, спасибо большое вам за помощь и за ваши труды!
в функции getChunk
$pl = $this->makePlaceholders($properties);
сделала print_r($properties), вывелось:Array
(
[id] => 176
[internalKey] => 7
[fullname] => User Name
[email] => email@test.com
...
id на коммента есть.print_r($pl) —
Array
(
[pl] => Array
(
[0] => [[+nospam]]
[1] => [[+registerbtn]]
[2] => [[+thread]]
[3] => [[+parent]]
...
[vl] => Array
(
[0] =>
[1] =>
[2] => 15
[3] => 0
...
Т.е. При регистрации через сниппет Register у пользователя создавалось 2 дополнительных поля: nospam и registerbtn. (по имени полей в форме регистрации). И они подставлялись вместо id и internalKey.Решилось добавлением в вызов Register параметра
&excludeExtended=`nospam,registerbtn`
Василий, спасибо большое вам за помощь и за ваши труды!
Всё равно это какая-то бага.
Как продолжу писать Tickets — разберусь.
Как продолжу писать Tickets — разберусь.
-
Вывод количества просмотров тикетов или ресурсов:
<?php
echo $modx->getCount('TicketView', array('parent' => $id));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.