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

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

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

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

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

5) Как бороться со спамом? Ticket не только не фильтует спам, а напртив преобразует строку spam.com/page.html в активную ссылку.
Владимир Тельнов
10 февраля 2013, 17:54
modx.pro
3 684
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]] на странице тикета? Таким же способом не получается.
    Владимир Тельнов
    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