Tickets Пять проблем со сниппетов

1) Латинские символы в тексте сообщения и в имени пользователя отображаются в виде знаков вопроса ?????

2) Использую только сниппет комментариев, вызывая его как [[!TicketComments?]]
Проблема заключается в следующем, при добавление нескольких комментариев подряд, каждый последующий комментарий переписывает предыдущий. Но если перезагрузить страницу становятся видные все комментарии.

3) При нажатии на ссылку «изменить» появляется окно с надписью «comment-en-ns»

4) Как вывести в шаблоне количество просмотров и количество комментариев?
[[+tickets] [[+views]] — отображают только иноки и ни каких цифр. Нужно отображать количество даже на тех страницах где сниппет TicketComments не вызывается.

5) Как бороться со спамом? Ticket не только не фильтует спам, а напртив преобразует строку spam.com/page.html в активную ссылку.
Владимир Тельнов
10 февраля 2013, 17:54
modx.pro
4 511
0

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

Василий Наумкин
10 февраля 2013, 22:19
0
1. Что-то очень странное с кодировками.

2. Смотри в консоль браузера, должна быть ошибка javascript.

3. Возможно, связано с предыдущей проблемой.

4. Получить ресурс через $object = $modx->getObject('Ticket',15), а потом нужные поля через $object->get('views') и $object->get('comments')

5. Блокировать спамеров. Вот тут есть плагин, как разлогинивать заблокированных юзеров с сайта. Автоматическое создание ссылок можно отключить в параметрах Jevix, наборы Ticket и Comment.

Также можно написать свой плагинчик, который будет банить юзеров автоматом, при попытке запостить определённые слова.
У меня такой проблемы пока не возникало.
    Владимир Тельнов
    10 февраля 2013, 23:15
    0
    1) Понятно, что с кодировкой проблема, а где именно копать?

    2,3) Скорее всего да, проблема с javascript, как обнаружить и решить проблему?

    4) Не очень понятно как применить этот пункт на практике. Можно по подробнее пожалуйста.

    5) Разобрался, спасибо.
    Владимир Тельнов
    11 февраля 2013, 10:07
    0
    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 текущего ресурса.
      Алексей
      11 февраля 2013, 11:51
      1
      0
      Сниплет:
      if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) {
      	echo $thread->get('comments');
      };
      Вызов:
      [[!qtyComments? &id=`[[+id]]`]] //как раз вызов в getResources
        Ян Такушевич
        22 февраля 2013, 16:32
        0
        А как вывести [[+date_ago]] на странице тикета? Таким же способом не получается.
          Алексей
          22 февраля 2013, 20:15
          0
          Честно не знаю спроси у Василия
      Владимир Тельнов
      11 февраля 2013, 12:35
      0
      Этот способ помог. Спасибо.

      Если я правильно понимаю, то получить количество просмотров комментариев я не смогу.
      Сниппет считает только просмотры непосредственно тикетов. Если я вывожу только сниппет комментариев TicketComments под новостями, то подсчет количества просмотров производится не будет.

      По крайней nf,kbwf мере modx_tickets_views в БД пустая.

      Вопросы 1-3 касательно кодировки и ошибки в JavaScrip еще актуальны
        Василий Наумкин
        22 февраля 2013, 17:40
        0
        Тут дело вообще не в сниппетах.

        Просмотры тикета считает сам класс Ticket при его показе юзеру. Делается это для вывода юзеру количества непрочитанных комментариев в тикете.

        Зачем считать показы комментариев — не знаю.
        Владимир Тельнов
        11 февраля 2013, 13:46
        0
        1,2,3 Проблемы так же решены. Проблема заключалось в том, что в bootstrap шаблоне библиотека jquery вызывалась ниже по коду чем сниппет TicketComments
          Yani
          17 октября 2013, 11:32
          0
          А как решилась проблема с кодировкой?
            Yani
            17 октября 2013, 12:05
            0
            Отвечаю себе же)
            оказалось, что таблицы то были в UTF-8, а вот поля в swedish
          Bond Nataly
          05 марта 2013, 15:15
          0
          Здравствуйте, у меня проблемы 2 и 3, jquery вызывается в самом начале. Покопалась, похоже из-за того, что в вывод только что отправленного коммента не подставляется его id
          <li class="ticket-comment" id="comment-" data-parent="0">
          ...
          </li>
          С чем это может быть связано?
          ps Консоль ошибок не выдает
            Bond Nataly
            13 марта 2013, 11:47
            0
            Нашла из-за чего это происходит, но не знаю как исправить, прошу помощи!
            ID коммента не отдает, если юзер залогинен через сниппет Login, а если через Loginza или HybridAuth, тогда все нормально.
            Подскажите пожалуйста, в какую сторону копать. Спасибо!
              Bond Nataly
              13 марта 2013, 12:03
              0
              точнее не залогинен через Login, а зарегистрирован через него (сниппет Register)
                Bond Nataly
                13 марта 2013, 13:04
                0
                копаю) обнаружила, что если в файле core/components/tickets/model/tickets/tickets.class.php в функции saveComment закомментировать строчку
                $comment = array_merge($profile, $comment);
                , то ID появляется. Следовательно, вопрос — для чего нужна эта строка и на что может повлиять, если ее оставить закомментированной? вроде бы все нормально работает.
                  Василий Наумкин
                  13 марта 2013, 13:39
                  0
                  Это добавляет в комментарий поля из профиля юзера.

                  Как это может мешать — не представляю. Тем более, как это может зависеть от способа регистрации?
                    Bond Nataly
                    13 марта 2013, 13:47
                    0
                    спасибо за ответ, Василий! Я сама теряюсь в догадках, сверила все поля зарегенных через Login и через HybridAuth, и в базе, и в сессии, вроде бы все одинаковое, только ключ класса разный(modUser и haUser) а вот почему-то не срабатывает. А в комментарий наверное добавляется только аватар из профиля? логин(имя) у меня отображается. С аватаром еще не пробовала.
                      Василий Наумкин
                      13 марта 2013, 14:14
                      0
                      Там всё добавляется, мало ли, кому что нужно, весь modUserProfile.

                      Короче, непонятно. Подождём еще подобных сообщений.
                        Bond Nataly
                        13 марта 2013, 14:17
                        0
                        может array_merge перезаписывает id юзера на id коммента и не находит потом его (или наоборот)?
                          Василий Наумкин
                          13 марта 2013, 15:37
                          0
                          1. Как там указано array_merge, это комментарий перезаписывает профиль
                          2. Даже если и наоборот — хоть какой-то id должен быть, так ведь? Пустого id в таблицах MODX не бывает.
                            Bond Nataly
                            13 марта 2013, 15:41
                            0
                            в таблицу отправляет нормально (после перезагрузки страницы id появляется), просто не выводит его сразу после отправки коммента, соответственно на него и ответить нельзя (ну
                            это если сам себе отвечаешь) и редактировать его нельзя.
                              Василий Наумкин
                              13 марта 2013, 15:49
                              0
                              Ну сделай print_r($array);die; и посмотри что в массиве и куда id пропадает.
                              Bond Nataly
                              13 марта 2013, 15:42
                              0
                              конфликта с другими скриптами быть не может, проверяла — убирала все свое.
                                Bond Nataly
                                13 марта 2013, 20:19
                                0
                                РЕШЕНО))
                                в функции 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`

                                Василий, спасибо большое вам за помощь и за ваши труды!
                                  Василий Наумкин
                                  13 марта 2013, 21:48
                                  0
                                  Всё равно это какая-то бага.

                                  Как продолжу писать Tickets — разберусь.
                  Bond Nataly
                  13 марта 2013, 13:46
                  0
                  -
                    Николай Загумённов
                    21 февраля 2015, 19:40
                    0
                    Вывод количества просмотров тикетов или ресурсов:
                    <?php
                    echo $modx->getCount('TicketView', array('parent' => $id));
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      28