Вывод количество комментариев Tickets

Сразу прошу извинения у Василия потому что я наверно достал тебя :)
Прикол получился в том, что Василий давал мне код:
if ($res = $modx->getObject('Ticket',15)) {
	echo $res->get('comments');
}
Он работает замечательно если у ресурса «Тип документа» -> «Раздел тикетов»

У меня не так я проста на странице вывожу [[!TicketComments]]

Не как не получается сделать вывод кол-во комментариев вне сниплета на этой же странице где он подключен и при выводе документа через getResources

Единственный вариант который я нашёл как мне показалось самый нормальный это передавать данный в tv и сохранять их там
Добряков Алексей
07 января 2013, 16:21
modx.pro
2
6 923
0

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

Василий Наумкин
07 января 2013, 20:39
0
Хоть убей, у меня всё работает.

1. Создаю новую страницу, тип «Документ», шаблон — 0.
2. Вызываю там сниппет Test,
3. В сниппет пишу
if ($res = $modx->getObject('Ticket', 539)) {
    echo '<pre>';print_r($res->toArray());die;
}
4. Выводятся все поля ресурса, в конце
    [hide_children_in_tree] => 0
    [show_in_tree] => 0
    [properties] => 
    [comments] => 0
    [views] => 2
    [votes] => 0
Должно работать именно так, везде.

updated
После написания первого коммента проверил и $res->get('comments'); — всё окей, вывел уже единицу.

Если всё равно не работает — значит на твоём сайте уже чтото накручено, удаляй Tickets все версии и ставь последнюю, потом чисти кэш.
    Добряков Алексей
    07 января 2013, 20:59
    0
    Для уточнения '539' это id Ticket, у меня вывод массив документа которые я указал заместо 539
      Добряков Алексей
      07 января 2013, 21:03
      0
      Удалил всё подчистую проверил все файлы на хостинге удалил всё, MySQL базу тоже проверил тоже удалил всё, короче очистил по полной, установил Tickets 0.8.0 всё тоже самое
        Василий Наумкин
        07 января 2013, 21:08
        0
        При выводе массива документа — какой там class_key?
          Добряков Алексей
          07 января 2013, 21:09
          0
          web
            Василий Наумкин
            07 января 2013, 21:26
            0
            Не context_key, а class_key?
              Добряков Алексей
              07 января 2013, 21:28
              0
              modDocument
                Василий Наумкин
                07 января 2013, 21:31
                0
                А должно быть Ticket.

                Как документ создавал, в смысле, ресурс? Если через Api — то нужно было указать верный class_key. При создании из админки или при помощи TicketForm — всё автоматом указывается.

                Или ты просто вызываешь TicketComments на обычном ресурсе? Тогда конечно, таких полей не будет — ибо это фишка именно класса Ticket.

                В этом случае можно получить кол-во комментов запросом в БД.
                $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 ($q->prepare() && $q->stmt->execute()) {
                	$count = (integer) $q->stmt->fetch(PDO::FETCH_COLUMN);
                }
                return $count;

                $id — идентификатор ресурса, на котором вызывался TicketComments.
                  Добряков Алексей
                  07 января 2013, 21:40
                  0
                  В этом вся и суть что я не хочу переводить «Тип ресурса» на «Раздел тикетов»
                    Василий Наумкин
                    07 января 2013, 21:45
                    0
                    Алексей, у тебя в голове картинка не сложилась.

                    Раздел тикетов — это контейнер для тикетов, класс TicketsSection.
                    Тикет — это дочерний ресурс контейнер, класс Ticket. Его можно создать только из страницы с типом TicketsSection в админке или сниппетом TicketForm на сайте.

                    Эти оба типа — расширенные классы, которые обладают особыми возможностями. Обычный ресурс так не умеет. В числе прочего — вывод кол-ва комментов. Причем, TicketsSection выведет сумму комментов для всех дочерних тикетов, а Ticket — только своих.

                    Если не хочешь создавать тикеты — то доставай кол-во комментов своим сниппетом, код запроса я тебе дал.
                      Добряков Алексей
                      07 января 2013, 21:55
                      0
                      У меня в голове всё сложилось метод который ты дал я как рас сегодня утром начал изучать, но возникает ошибка которая даже не отображается в журнале ошибок, сейчас буду дальше химичить
                  Павел
                  08 февраля 2016, 21:07
                  1
                  0
                  Немножко не так… Он так будет неопубликованные комментарии тоже считать.
                  Лучше так:
                  <?php
                  $q = $modx->newQuery('modResource', $id);
                  $q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-{$id}'");
                  $q->leftJoin('TicketComment','TicketComment', "`TicketThread`.`id` = `TicketComment`.`thread`");
                  $q->where(array(
                      'TicketComment.published' => 1
                  ));
                  
                  $q->select('COUNT(`TicketComment`.`id`) as `comments`');
                  
                  $count = 0;
                  if ($q->prepare() && $q->stmt->execute()) {
                  	$count = (integer) $q->stmt->fetch(PDO::FETCH_COLUMN);
                  }
                  return $count;
      Добряков Алексей
      07 января 2013, 22:07
      0
      Спасибо всё заработало!!! Блин реально я уже говорил и повторюсь запущу свой проект я тебе заплачу сколько будет мне не жалко
        Василий Наумкин
        08 января 2013, 09:33
        0
        Обновляйся на 0.8.2, там доработаны ветки комментариев.

        Теперь можно так:
        if ($thread = $modx->getObject('TicketThread', array('resource' => 'id ресурса'))) {
        	echo $thread->get('comments');
        }
        Ветка создаётся при первом вызове TicketComments на странице и пишет себе в поле resource, где её вызвали. Так же там есть поля comment_last и comment_time — это id и время последнего комментария ветки (т.е. на странице).
        AK
        AK
        25 апреля 2013, 16:05
        0
        Привет. На последней версии не срабатывает код — пишет 0.
        Тоже пользую ticketcomments отдельно.
        Подскажи, может что-то за это время поменялось?
          AK
          AK
          25 апреля 2013, 17:29
          0
          Пардон, работает, вызывать так:
          [[!TicketCommentsCount? &id=`[[+id]]`]]
          scorpi71183
          08 октября 2014, 10:14
          0
          Как вывести тикеты тока определённого пользователя??? а не всех сразу? нужно что то типо этого:
          [[!getComments? &id=`[[*id]]`]]
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            18