Tickets 0.6.0 beta

Выпустил очередную версию Tickets, проделано море работы по улучшению и убыстрению компонента.

Главная новость — появилась админка для управления комментариями. Сниппет TicketComments можно смело использовать для комментирования любой страницы, создавать тикеты больше не обязательно.

Еще раз. Компонент Tickets теперь полностью заменяет Quip. Конечно, есть некоторые расхождения по функционалу, например он работает исключительно с авторизованными пользователями (и это никогда не изменится), но подавляющее превосходство в удобстве и скорости всё решает.

Из новой админки теперь можно отключить ветку комментариев тикета. Тогда на странице юзеры увидят «комментарии к этому тикету отключены». Фразу можно изменить в словарях системы.

Улучшена работа с тегами в тикете. Теперь можно отключать обработку Jevix и тегов раздельно. Jevix не будет обезапасивать теги всегда, как раньше. То есть, вы можете оставить форматировние Jevix`ом и выполнять теги MODX. Пригодится сайтам, где тикеты создаются только из админки.

Добавлен подсчет количества просмотров тикета авторизованными юзерами.

В класс Ticket добавлены новые методы, которые реализуют «виртуальные поля» ресурса. То есть, этих полей на самом деле нет, но если вы их запросите через $Ticket->get('comments') — то получите число комментариев тикета. Помимо comments есть еще и views — просмотры тикета.
Также эти поля вы увидите в $Ticket->toArray();.

Как следствие, в чанках можно использовать [[+comments]] и [[+views]], вместо получения этих данных отдельными сниппетами — так быстрее, удобнее и getResources поддерживает.
Эти же плейсхолдеры автоматически выставляются на странице тикета.

Ясен пончик, сниппет getCommentsCount был убит, за ненадобновстью.

Сниппет TicketLatest теперь уважает состояние ресурса. То есть, в блоке последних комментариев больше не выводятся записи от удалённого\неопубликованного тикета.

Переписаны все javascript файлы, для большей красоты и удобства.
Если вы обновляете компонент — обязательно удалите в чанках tpl.Ticket.form.create и tpl.Ticket.form.update первую строку с подключением js файла, иначе у вас будет двоиться редактор в форме.

Переписаны чанки, вместо русского текста там языковые плейсхолдеры, чтобы руссконеговорящим друзьям было понятнее. Учитывая, что чанки при обновлении не перезаписываются — смело убирайте плейсхолдеры и пишите что надо, это сохранится при обновлениях.

Все чанки, сниппеты и плагин теперь статичные по умолчанию.

Проведена подготовка к написанию голосования за тикеты и комментарии.

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

Следующая заметка
Tickets 0.7.0 beta
Предыдущая заметка
Прощай, Loginza! или HybridAuth 0.3.0


Комментарии ()

  1. Denys Butenko 24 декабря 2012, 22:32 # 0
    Спасибо, протестирую
    1. Василий Краковецкий 25 декабря 2012, 00:13 # 0
      Discuss вышел, Новая версия Tickets, не день, а праздник какой-то! :)
      1. Denys Butenko 25 декабря 2012, 00:44 # 0
        Еще с предыдущей версии осталось и в этой:
        [2012-12-24 22:31:34] (ERROR @ /assets/components/tickets/comment.php) exception 'Exception' with message 'Тег video отсутствует в списке разрешённых тегов' in /var/www/core/components/jevix/model/jevix/jevix.core.php:182
        Ошибка про тег video и table
        Эти теги есть в списке параметра cfgAllowTags Jevix
        p,a,img,i,b,u,em,strong,nobr,li,ol,ul,sup,abbr,pre,acronym,h1,h2,h3,h4,h5,h6,cut,br,code,table,tr,th,td,video
        1. Denys Butenko 25 декабря 2012, 01:16 # 0
          Чанк tpl.Tickets.comment.one.auth
          <div class="comment-reply">
          <a href="#reply" onclick="return Comments.forms.reply([[+id]])">
          ответить / [[%ticket_comment_reply]]
          </a>
          </div>
          На странице получается вот так:
          <div class="comment-reply">
          <a href="#reply" onclick="return Comments.forms.reply(12)">
          ответить / 
          </a>
          </div>
          
          То есть, [[%ticket_comment_reply]] — возвращает пустоту
          Проверил словарь — все в порядке.

          Создал новый тикет -> Написал комментарий -> [[%ticket_comment_reply]] вернул значение из словаря «ответить» -> перезагрузил страницу -> [[%ticket_comment_reply]] возвращает пустоту.
          1. Василий Наумкин 25 декабря 2012, 05:15 # 0
            Ага, есть такое при fastMode=1.

            Добавляем в классе tickets.class.php на строке 540:
            $pl['pl'][] = 'ответить';
            $pl['vl'][] = $this->modx->lexicon('ticket_comment_reply');

            Вот коммит + обновил пакет в репозитории.
            1. Denys Butenko 25 декабря 2012, 17:32 # 0
              Ну так, добавлять надо же [[%ticket_comment_reply]] =)
              Иначе можно и в чанке задать текст)
          2. Василий Наумкин 25 декабря 2012, 06:13 # 0
            Обнови Jevix из репозитория, вроде всё пофиксил. Теперь ошибки будут валиться в лог только при запуске сниппета с параметром &debug=`1`.
          3. Алексей П 25 декабря 2012, 14:16 # 0
            Почему-то не могу запустить сниппет в чанке tpl.Tickets.comment.one.auth
            В других не проверял, но здесь даже простейший сниппет
            return "test";
            не срабатывает.
            Пробовал выключить fastmode. Не помогло.
            1. Василий Наумкин 26 декабря 2012, 07:08 # 0
              Все сниппеты нужно запускать как фильтры, тогда будет нормально выводиться.
              [[+id:test]]

              Иначе сниппет в комменте кэшируется — не смог побороть.
              1. matizz 31 декабря 2012, 02:54 # 0
                А возможно ли запустить в фильтре-сниппете вложенный сниппет? Мне нужно обработать фото с помощью phpthumbof. Когда я в фильтре запускаю thumb через runsnippet, то возникает ошибка.
                Fatal error: Call to a member function get() on a non-object in /core/components/phpthumbof/model/phpthumbof/phpthumbof.class.php on line 306
                Комментарий не публикуется.
                1. Василий Наумкин 31 декабря 2012, 07:28 # 0
                  Комментарии создаются через action.php, то есть никакого ресурса нет, а phpthumbof в последних версиях стал его требовать.

                  Поэтому, делать надо вот так — bezumkin.ru/blog/118/#comment-1136
            2. Калитюк Ярослав 26 декабря 2012, 22:43 # 0
              Открываю файл readme.txt

              а там:

              — Tickets
              — Version: 1.0.0
              Author: John Doe <john@doe.com>
              — A basic Extra for MODx Revolution.

              Feel free to suggest ideas/improvements/bugs on GitHub:
              github.com/username/Tickets/issues
              1. Калитюк Ярослав 26 декабря 2012, 23:11 # 0
                А если по делу — я не могу найти в настройках — где тут включить обязательную модерацию?

                Чтобы перед появлением коммента — его обязательно модерировали.
                1. Василий Наумкин 26 декабря 2012, 23:16 # 0
                  А откуда вы решили, что там такое должно быть?

                  Обязательной авторизации и возможности удалять комментарии на мой взгляд вполне достаточно. Все новые комментарии приходят на почту хозяину страницы, так что если там будет что-то нехорошее, можно сразу зайти и почистить, а потом забанить юзера.
                  1. Василий Наумкин 26 декабря 2012, 23:25 # 0
                    В следующей версии будут события на создание комментариев, тогда вы сможете простым плагином ставить им deleted=1, а из админки восстанавливать.

                    Будет настоящая модерация =)
                    1. Калитюк Ярослав 27 декабря 2012, 19:32 # 0
                      Да, согласен — модерация — не такая уж крепко нужная штука, на самом то деле, ведь комменты могут оставлять только юзеры.

                      Очень рад что в будущем планируется сделать выставлене рейтинга(звездочек) материалу/товару, когда пишешь отзыв. Только такие «звездочки» действительно чего то стоят, когда свое мнение человек сопровождает коментарием. И в таком случае допустим в каталоге товара — была бы очень адекватная сортировка по популярности!!!
                  2. Добряков Алексей 26 декабря 2012, 23:50 # 0
                    Спасибо за плагин. Не знаю есть такое, но скажу было бы хорошо в дальнейшем сделать подтверждение комментариев что бы добить Quip, то есть человек написал коммент и если он нормальный, то я его подтверждаю и опубликовываю
                    1. Василий Наумкин 27 декабря 2012, 00:01 # 0
                      Спасибо за отзыв, но вот на пару сантиметров выше это уже обсудили.

                      Функционала такого не будет, только своим плагинчиком. Раздувать и усложнять Tickets я не планирую — одного тормозного Quip вполне достаточно.
                    2. Добряков Алексей 27 декабря 2012, 00:18 # 0
                      uh I'm sorry вроде все комменты почесал не заметил, ну я рад тому, что будет хотя бы так как написано выше. Проверил комменты работает на ура спасибо большоеееееееее!!! Особенно за удаление комментов из компонента. Кстати я уже у тебя спрашивал и мы решили эту проблему на счёт аватарок что бы отображались те которые указанны в photo у пользователя, ждать ли этого функционала встроенного и оптимизировано, что бы работало так же быстро как и без них?
                      1. Василий Наумкин 27 декабря 2012, 08:31 # 0
                        Добавил, в следующей версии можно будет использовать все плейсхолдеры профиля юзера в чанке комментария.
                      2. Алексей Добряков 29 декабря 2012, 12:18 # 0
                        Как вывести количество комментариев вне плагина у меня получилось выводить когда добавляешь он показывает сколько комментраиев через jquery, но не как не получается вывести вне, хотя я смотрю у тебя хорошо получается выводить подскажи плиз как только уже не пробовал с $Ticket->get('comments')
                        1. Василий Наумкин 29 декабря 2012, 14:25 # 0
                          У меня работает вот так:
                          if ($res = $modx->getObject('Ticket',15)) {
                          	echo $res->get('comments');
                          }
                          1. Муравьев Артём 29 декабря 2012, 21:40 # 0
                            Извините за мою тупость но у меня не фига не получается ошибка: Instantiated a derived class modDocument that is not a subclass of the requested class Ticket
                            1. Василий Наумкин 29 декабря 2012, 22:15 # 0
                              Должна загружаться модель Tickets, а у тебя она, видимо не загружена. Случайно не через API_MODE делаешь?

                              В любом случае:
                              1. Обновись до версии 0.7.0 из репозитория

                              2. Проверь системный параметр extension_packages — там массив классов, которые надо грузить при инициализации класса modX. Там должна быть такая запись (могут и еще быть, другие класса):
                              {"tickets":{"path":"[[++core_path]]components/tickets/model/"}}
                              Если нету — надо сделать.

                              3. Если не поможет, тогда можно по старинке, перед работой с объектом Ticket грузить класс Tickets вручную:
                              $Tickets = $modx->getService('tickets','Tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/tickets/',array());
                              1. Муравьев Артём 30 декабря 2012, 01:17 # 0
                                Я проста тупа создаю сниплет потому что мне нужен вывод в двух местах где tickets не вызывается и где он вызывается хочу создать один код что бы он был универсальный, помоги пожалуйста прям с самого нуля, версия самая последняя класс tickets загружаю, а дальше застопрился
                                1. Василий Наумкин 30 декабря 2012, 08:36 # 0
                                  Я уже всё объяснил, не знаю, что еще рассказать.

                                  В комплекте есть сниппет TicketsLatest, он как раз выводит последние комментарии и тикеты в любом месте сайта — можешь его переделать под свои нужды.
                                  1. Муравьев Артём 03 января 2013, 01:29 # 0
                                    вот что я сделал:
                                    $Tickets = $modx->getService('tickets','Tickets',$modx->getOption('tickets.core_path',null,$modx->getOption('core_path').'components/tickets/').'model/tickets/',$scriptProperties);
                                    $output = $Tickets->getLatestComments($scriptProperties, 'comments');
                                    return $output;
                                    Вот что он выводит:
                                    Array
                                    (
                                    [id] => 5
                                    [thread] => 1
                                    [parent] => 0
                                    [text] => Проверка
                                    [name] => Алексей Добряков
                                    [email] =>
                                    [ip] => 89.189.29.191
                                    [createdon] => 2013-01-03 00:28:28
                                    [createdby] => 18
                                    [editedon] =>
                                    [editedby] => 0
                                    [deleted] =>
                                    [deletedon] =>
                                    [deletedby] => 0
                                    [resource] => 30
                                    [pagetitle] => Салон красоты «Жениаль»
                                    [section] => 15
                                    [comments] => 5
                                    [sectiontitle] => Красота
                                    )

                                    И не пойму как вывести из этого массива только [comments]
                        2. matizz 30 декабря 2012, 09:29 # 0
                          Есть ли возможность ограничить написание комментариев только определенными пользователями? Например по роли или по группе?
                          1. Василий Наумкин 30 декабря 2012, 09:31 # 0
                            Да, настраивайте политики безопасности.

                            Для написания тикета требуется разрешение ticket_save, комментария — comment_save.
                          2. matizz 30 декабря 2012, 09:39 # 0
                            И еще интересует вопрос, есть ли параметры для сортировки комментариев.
                            1. Василий Наумкин 30 декабря 2012, 10:22 # 0
                              Только при выводе последних, сниппетом TicketsLatest.

                              При выводе комментариев на странице — нет и не будет.
                            Добавление новых комментариев отключено.