MODX Revo - Создание блока, для отображения последних комментариев

Содержание:
  1. Комментарии

На этом уроке мы рассмотрим создание блока для отображения последних комментариев, которые оставили посетители на сайте. Этот блок (модуль) выполним в виде чанка, которому дадим имя lastComment. Логику работы блока для отображения последних комментариев в этом чанке организуем с помощью сниппета TicketLatest.

Основные действия для создания блока, отображающего последние комментарии:

  1. Написать код для вызова сниппета TicketLatest, которому необходимо указать необходимые параметры:
  2. Сниппет TicketLatest, предназначенный для вывода последних комментариев
    [[!TicketLatest? &limit=`3` 
                     &tpl=`tpl.Tickets.comment.latest.my`   
                     &action=`comments` 
                     &includeContent=`1`]]
    
    • limit=`3` - ограничение по количеству выводимых записей;
    • action=`comment` - указывает, что необходимо выбирать комментарии (comment)
    • includeContent=`1` - указывает что необходимо также выбирать контент комментариев
    • tpl=`tpl.Tickets.comment.latest.my` - выводить результаты (данные по каждому комментарию) в этот чанк.
  3. Создать чанк tpl.Tickets.comment.latest.my, код, которого будет являться шаблоном для вывода отдельно взятого комментария. Сниппет TicketLatest передаёт данные в этот чанк с помощью плейсхолдеров (placeholders). Для нашего блока мы будем использовать следующие плейсхолдеры:
  4. Чанк tpl.Tickets.comment.latest.my, который будет являться шаблоном для вывода комментария
    <div><span class="glyphicon glyphicon-user"></span> [[+fullname]] ([[+date_ago]]):</div>
    <div class="alert alert-lastmessage">
      <div class="text-lastmessage">[[+text:ellipsis=`150`]]</div>
    </div>
    <div class="text-right"><a href="[[~[[+ticket.id]]]]#comment-[[+id]]" class="btn btn-default">Перейти</a></div>
    <hr>
    
    • [[+fullname]] - содержит полное имя пользователя, оставившего комментарий к посту
    • [[+date_ago]] - дата оставления комментария пользователем;
    • [[+text:ellipsis=`150`]] - текст комментария. Если текст комментария слишком большой, то ограничим его длину 150 символами.
    • [[+ticket.id]] - id поста (тикета)
    • [[+id]] - id комментария
    Создания чанка, который будет являться шаблоном для вывода комментария
  5. Создать чанк lastComment, который будет представлять собой блок, содержащий последние комментарии. Чанк lastComment, предназначенный для вывода комментариев в виде блока на веб-страницу
    <div class="last-comment">
      <h4 class="page-header text-center">Последние комментарии</h4>
      <div>
        [[!TicketLatest? &limit=`3` 
                         &tpl=`tpl.Tickets.comment.latest.my`   
                         &action=`comments` 
                         &includeContent=`1`]]
      </div>
    </div>
    
    Создание чанка lastComment, предназначенного для вывода комментариев в виде блока
  6. Создать стили CSS для блока с комментариями
    .last-comment {
      background-color: rgba(255, 255, 255, 0.8);
      padding: 15px;
    }
    .last-comment h4 {
      margin-top:5px;
      border-bottom: 1px solid #4a452a;
    }
    .last-comment hr {
      margin-top:8px;
      margin-bottom:8px;
    }
    .alert-lastmessage {
      color: #4a452a;
      background-color: #ddd9c3;
      border-color: #948a54;
      padding: 10px;
      margin-top:5px;
      margin-bottom:5px;
    }
    .alert-lastmessage pre.prettyprint {
      border: 0px;
      display: inline;
      background-color: #ddd9c3;
    }
    .text-lastmessage {
      max-height:100px;
      overflow:hidden;
    }
    
  7. Добавить блоки (чанки lastComment) в нужные страницы (шаблоны). MODX - Добавление блока с последними комментариями в шаблон MODX - Блок с последними комментариями

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

Evgeny
Evgeny
Привет, извиняюсь если не в ту тему вопрос.
Как правильно загрузить комментарии после загрузки страницы с ajaxsnippet?
использую стандартный вывод

[[AjaxSnippet?
    &snippet=`TicketComments`
    &allowGuest=`1`
    &as_mode=`onclick`
    &as_trigger=`Написать комментарий`
]]
Но выводит он некорректно
Александр Мальцев
Александр Мальцев
Привет! Если нужно после загрузки страницы, то это режим onload:
[[AjaxSnippet?
  &snippet=`TicketComments`
  &as_mode=`onload`
]]
Сниппет TicketComments изначально не настроен на работу с ним через AJAX. Он не просто возвращает результат, он ещё подключает js-скрипты к странице. Если вы будете вызывать его через AJAX, то они не будут подключены. В этом случае вам стоит попробовать подключить их к странице самостоятельно, и посмотреть результат.
Ruslan
Ruslan
Привет. Перерыл интернет и понял, что о tickets информации не так и много, как хотелось бы.

Проблема следующая:
— Установил комментарии от tickets, и столкнулся с тем, что на сайте комментарии добавляются и отображаются, а вот в админке «Управление тикетами» ничего не появляется.
— Реализовал комментирование без регистрации, только гостевые комментарии.

Все хорошо, пока комментарии человеческие, но кто-то захочет поспамить или нецензуру напишет, то даже не знаю как удалить / редактировать.

Кто сталкивался, в чем может быть причина или хоть подскажите, каким иным способом я могу править комментарии?

Nik
Nik
Вопрос, который хотелось бы окончательно прояснить для себя, параллель из этого комментария коммент, ответ я на него так и не нашел.
Есть блок последних комментариев, с ссылкой/анкором на последний коммент #comment-123, например. И если при построении постраничной навигации page1, page2, page3 и.т.д, и сортировки записей по возрастанию ASC, когда последний добавленный коммент находится на последней странице page3 к примеру, то как можно сделать чтобы из блока последних комментариев отправляло именно по ссылке _https://site.ru/novosti.html?page=3#comment-123?
Александр Мальцев
Александр Мальцев
Здесь только одно решение — это редирект, если он только не находится на первой странице. Т.е. например, вы сохранили URL на комментарий: _https://site.ru/novosti.html#comment-123. В тот момент, когда вы его сохранили он был на третьей странице. Но через несколько дней он может оказаться на другой. Теперь чтобы при запросе данного URL вам оказаться на нужной странице, нужно определить, где он находится. Для этого в MODX нужно написать плагин на событие onHandleRequest, в котором каким-то образом рассчитать, на какой странице находится этот комментарий и перенаправить пользователя с этого ресурса на другой, например на 3 страницу _https://site.ru/novosti.html?page=3#comment-123.

С точки зрения поисковых систем вы будете перенаправлять пользователей с основной страницы (где находятся первые комментарии, и которая индексируется поисковыми системами) на страницу, которая исключена из индекса. Смысл реализовывать это для комментариев к статьям и новостям вообще нет.

Постраничную пагинацию есть смысл только применять для такого контента, который не будет повторяться на разных страницах (для форумов, обсуждений, каталога товаров, анонсов статей и др.).
Nik
Nik
Ответ более чем понятен, спасибо! Придется смириться с длинными простынями комментов… жаль.
Александр Мальцев
Александр Мальцев
Почему? Решения всегда есть, просто в этом случае придётся что-то дополнительно писать. Это не будет из коробки.
Пагинацию, например, можно сделать посредством AJAX. Кроме этого, например, момент на котором остановился пользователь можно записать в LocalStorage. После загрузки страницы, считывать значение из LocalStorage и сразу подгружать пользователю тот момент, на котором он остановился. Для поисковых роботов можно просто выдавать страницу со всей «простынёй», чтобы всё попадало в индекс. Этот один пример, можно наверно придумать и что-то другое. Но это потребует более глубокое знание системы и большее количество времени.
Nik
Nik
Кстати ваш скрипт в этом комменте как раз таки и выводит такие ссылки _http://site.com/novosti.html?page=3#comment-223. В комментариях под новостями. Ещё где то видел на просторах комментарий, где с помощью функции и добавления параметра как-то можно подставлять page. Найду обязательно покажу ссылку на этот коммент.
Вот, нашел _https://modx.pro/help/4168, вот здесь это обсуждение, может быть это не совсем то что я имел ввиду?
Александр Мальцев
Александр Мальцев
Да, точно, но, если только не будет вложенных комментариев.

Параметр, то конечно можно будет подставить, но это всё равно будет уже редирект, т.к. нужно с одной страницы перейти на другую, или отдать другой контент. Т.е. пользователь, например, указывает одну страницу, а MODX ему отдаёт другую.
Nik
Nik
А как правильно вывести аватар? я вывел так — [[+avatar:phpthumbon=`w=32&h=32&zc=0`]] [[+fullname]] [[+date_ago]], но, если нет аватара мне надо чтобы выводилась картинка по умолчанию, которую я загрузил в папку image. Думаю что в данном случае нужно условие, а вот как применить модификатор пока еще до конца не разобрался.
Попробовал добавить :default=`/assets/images/users/grav.jpg`, не выходит
Александр Мальцев
Александр Мальцев
Для этого нужно использовать фильтр:
[[+avatar:is=``:then=`/assets/images/users/grav.jpg`:else=`[[+avatar:phpthumbon=`w=32&h=32&zc=0`]]`]]
Nik
Nik
Понял, спасибо за пример использования фильтра. Но тут вот что выяснилось, при использовании phpthumbon ссылка на выходе получалась такая — /assets/cache_image/noimage_32x32_9dc.jpg, то есть насколько я понимаю phpthumbon выводил картинки по умолчанию из папки кэша, несмотря на фильтр. Заменил на phpthumbof и аватар стал выводится оттуда откуда указано, т.е /assets/images/users/grav.jpg, без использования фильтра, то есть просто вот так
<img src="[[+avatar:phpthumbof=`w=32&h=32&zc=0`]]">
Nik
Nik
И еще вопрос немного не по теме, долго смотрю на этот форум — forums.modx.com, и не могу понять на чем они его сделали, просто мне уже tickets везде мерещится )))
Александр Мальцев
Александр Мальцев
Форум forums.modx.com точно не на Tickets. Он был создан намного раньше выпуска этого компонента.
taras
taras
А как выводить блок «последние комментарии» только на определенных страницах.
Александр Мальцев
Александр Мальцев
Можно создать свой сниппет, в котором проверять условие (принадлежит ли текущий ресурс к указанным). Если условие истинно, то запускать сниппет TicketLatest.
Ещё один вариант — это воспользоваться Fenom.
Аноним
Аноним
А как же добавлять комменты?
Александр Мальцев
Александр Мальцев
Это было рассмотрено в разделе: MODX — Создание шаблона для постов.