MODX - Создание шаблона для постов

Александр Мальцев
Александр Мальцев
14K
63
Содержание:
  1. Сниппеты в шаблоне «Пост»
  2. Создание кода (html) для шаблона "Пост"
  3. Демонстрация главной страницы блога
  4. Комментарии

На этом уроке мы создадим, а точнее напишем код для шаблона "Пост", который определяет структуру и внешний вид веб-страницы, содержащей пост.

Сниппеты в шаблоне «Пост»

В шаблоне «Пост» будем использовать следующие сниппеты:

  • pdoCrumbs - для вывода «хлебных крошек»: (параметры сниппета: tpl - чанк для оформления ресурса в навигационной цепочке; tplWrapper – чанк-обёртка для навигационной цепочки; tplHome – чанк, для оформления ссылки на главную страницу; outputSeparator – строка, которая выступает в качестве разделителя между элементами в навигационной цепочке; showCurrent – булевский параметр, который определяет выводить текущий ресурс в хлебных крошках или нет; showHome – булевский параметр, который определяет выводить ссылку на главную страницу в начале навигации или нет). Результат работы сниппета pdoCrumbs
    [[pdoCrumbs? 
      &tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>` 
      &tplWrapper=`@INLINE <ol class="breadcrumb">[[+output]]</ol>`
      &tplHome=`@INLINE <li><a href="/"><i class="glyphicon glyphicon-home"></i></a></li>`
      &outputSeparator=``
      &showCurrent=`0`
      &showHome=`1`
    ]]
    
  • TicketMeta – для вывода информации о текущем посте. Результат работы сниппета TicketMeta
    [[TicketMeta]]
    
  • pdoNeighbors – для вывода ссылок на предыдущий и следующий посты от текущего (параметры сниппета: tplPrev – чанк, содержащий ссылку на предыдущий пост; tplNext - чанк, содержащий ссылку на следующий пост; tplWrapper – чанк, который является обёрткой для вывода ссылок на "соседние" посты). Результат работы сниппета pdoNeighbors
    [[pdoNeighbors? 
      &tplPrev=`@INLINE <span class="link-prev"><li class="previous"><a href="[[+link]]"><span class="glyphicon glyphicon-chevron-left"></span> [[+menutitle]]</a></li></span>` 
      &tplNext=`@INLINE <span class="link-next"><li class="next"><a href="[[+link]]">[[+menutitle]] <span class="glyphicon glyphicon-chevron-right"></span></a></li></span>`
      &tplWrapper=`@INLINE <div class="neighbors"><ul class="pager">[[+prev]][[+next]]</ul></div>`
    ]]
    

    CSS код:

    .neighbors {
    margin-bottom:10px;
    }
    
  • TicketComments – для вывода комментариев и формы для комментирования поста (параметр поста: allowGuest – булевский параметр, который позволять включить возможность комментирования для неавторизованных пользователей). Результат работы сниппета TicketComments
    [[!TicketComments? &allowGuest=`1`]]
    

Создание кода (html) для шаблона "Пост"

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

  1. Открываем шаблон "Пост".
  2. Вводим следующий код: Создание кода (html) для шаблона Пост
    <!DOCTYPE html>
    <html lang="ru">
    [[$chunk.head]]
    <body>
      <div class="container"> 
        <div class="row">
          [[$chunk.header]]
          [[$chunk.navbar]]
          <div class="main-block col-md-8">
            [[pdoCrumbs? &tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>` 
                         &tplWrapper=`@INLINE <ol class="breadcrumb">[[+output]]</ol>`
                         &tplHome=`@INLINE <li><a href="/"><i class="glyphicon glyphicon-home"></i></a></li>`
                         &outputSeparator=``
                         &showCurrent=`0`
                         &showHome=`1`]]
            <h1 class="h2 page-header">[[*pagetitle]]</h1>
            [[*content]]
            [[TicketMeta]]
            [[pdoNeighbors? 
              &tplPrev=`@INLINE <span class="link-prev"><li class="previous"><a href="[[+link]]"><span class="glyphicon glyphicon-chevron-left"></span> [[+menutitle]]</a></li></span>` 
              &tplNext=`@INLINE <span class="link-next"><li class="next"><a href="[[+link]]">[[+menutitle]] <span class="glyphicon glyphicon-chevron-right"></span></a></li></span>`
              &tplWrapper=`@INLINE <div class="neighbors"><ul class="pager">[[+prev]][[+next]]</ul></div>`]]
            [[!TicketComments? &allowGuest=`1`]]
          </div>
          <div class="col-md-4">
          </div>
        </div>
      </div>
      [[$chunk.footer]]
    </body>
    </html>
    

Демонстрация главной страницы блога

Веб-страницу, содержащую пост "Ex ea voluptate" продемонстрируем с помощью 2 скриншотов.

Скриншот верхней части веб-страницы, содержащей пост

Верхняя часть веб-страницы, содержащей пост

Скриншот нижней части веб-страницы, содержащей пост

Нижняя часть веб-страницы, содержащей пост

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

  1. Anna Shishkina
    Anna Shishkina
    18.08.2021, 22:43
    Александр, здравствуйте!
    Благодарна вам за качественную информацию!
    Сделала Блог на Tickets. С запретом комментировать незарегистрированным посетителям.
    [[&allowGuest=`0`]]
    Если зарегистрирован Администратор — все работает, а если просто зарегистрированный пользователь — то при попытке отправить комментарий появляется сообщение: permission_denied_processor. Это и есть проблема.
    Если разрешить комментировать всем, то комментарии отправляются как от имени зарегистрированных пользователей, так и от имени гостей. Помогите пожалуйста решить проблему.
    1. Александр Мальцев
      Александр Мальцев
      19.08.2021, 02:30
      Здравствуйте!
      Для этого необходимо, чтобы пользователь принадлежал к группе пользователей с политикой доступа к контексту TicketUserPolicy.

      Группа пользователей в CMS MODX с политикой доступа к контексту TicketUserPolicy
      1. Anna Shishkina
        Anna Shishkina
        19.08.2021, 08:11
        Александр, большое спасибо, заработало!
    2. Evgeny
      Evgeny
      19.09.2020, 06:13
      Приветы, не могли бы помочь мне? Подскажите пожалуйста как реализовать вывод счетчиков количества просмотров в секции у статей блога допустим, чтобы у каждой статьи был счетчик количества-просмотров, искал по ticketmeta но ничего к сожалению не нашел, только вывод счетчика внутри статьи
      1. Александр Мальцев
        Александр Мальцев
        20.09.2020, 06:54
        Привет! Для вывода в секции tickets можно использовать стандартный сниппет getTickets:
        [[!getTickets?
          &parents=`0`
        ]]
        
        С помощью parents можно указать из какого раздела нужно вывести тикеты.
        По умолчанию используется чанк «tpl.Tickets.list.row». Количество просмотров в нём определяется посредством плейсхолдера [[+views]].
        Если нужно не стандартное оформление, то можно скопировать чанк «tpl.Tickets.list.row» и указать его через параметр tpl:
        [[!getTickets?
          &parents=`0`
          &tpl=`tpl.Tickets.list.row1`
        ]]
        
        Если нужно вывести постранично, то тогда ещё нужно использовать pdoPage.
        Например:
        <div id="pdopage">
          <div class="rows">
            {'!pdoPage' | snippet : [
            'element' => 'getTickets',
            'action' => 'tickets',
            'ajaxMode' => 'default',
            'parents' => '0',
            'limit' => '5',
            'maxLimit' => '5',
            'pageLimit' => '7',
            'nestedChunkPrefix' => 'tickets_',
            'sortby' => 'publishedon',
            'sortdir' => 'DESC',
            ]}
          </div>
          {'page.nav' | placeholder}
        </div>
        
      2. Sergey Net
        Sergey Net
        20.07.2020, 20:49
        Здравствуйте Александр!
        Простите за возможно простой вопрос.
        Мне нужно на сайте сделать возможность посетителю (неавторизированному) сделать комментарий, чтоб админ мог на него ответить. Плюс, нужно поставить reCaptcha чтоб защитится от спам-роботов.
        Как бы вы посоветовали это сделать?
        Ну то есть суть в том, что в данном случае мне не нужны ни блог ни форма обратной связи, а только возможность посетителям добавлять коменты а админу на них отвечать, и плюс ко всему этому капча
        1. Александр Мальцев
          Александр Мальцев
          22.07.2020, 15:19
          Здравствуйте! В MODX имеется несколько компонентов для реализации подобного функционала. Можете это выполнить, например, на Tickets или easyComm. Либо можете просто взять FormIt! и написать этот функционал самостоятельно.
        2. Nik
          Nik
          18.09.2019, 15:04
          Александр не подскажите где в настройках параметров Tickets можно убрать древовидную структуру? то есть без кнопочки «ответить», если это конечно предусмотрено в этом компоненте.
          И еще хотел спросить, какой переменной выводить номера постов, чтобы отображались числом, непосредственно за решеткой (на картинке показал стрелкой). Думаю так было бы удобней искать и направлять пользователя, к конкретному ответу с номером.
          1. Александр Мальцев
            Александр Мальцев
            19.09.2019, 06:46
            У сниппета TicketComments есть параметр depth с помощью которого можно указать глубину ветки комментариев. Значение 0 – это без указание максимальной глубины, другие значения (1, 2, 3, …) – позволяют установить ту глубину, которая нужна. Но даже значение 1 – создаёт двухуровневую систему.
            Эту задачу можно решить простым редактированием чанка «tpl.Tickets.comment.one.auth». В котором нужно удалить следующий код:
            <div class="comment-reply">
              <a href="#" class="reply">[[%ticket_comment_reply]]</a>
              [[+comment_edit_link]]
            </div>
            
            Но, лучше сделать копию чанка, удалить из него вышеприведённый код и указать его сниппету:
            [[!TicketComments?
            &tplCommentAuth=`tpl.Tickets.comment.one.auth.v1`
            ]]
            У комментариев id – это первичный ключ в базе данных. Двух комментариев на сайте не может быть с одинаковым ключом.
            Эту задачу (добавить циферки) можно решить с помощью JavaScript:
            <script>
            var addIdToComments = function () {
              if (!$('.ticket-comment-link').length) {
                return;
              }
              $('.ticket-comment-link').each(function (index) {
                index++;
                $(this).find('a').attr('href', location.href.split('#')[0] + '#comment-' + index);
                $(this).closest('.ticket-comment-body').attr('id', 'comment-' + index);
                if ($(this).find('span').length) {
                  $(this).find('span').text(index);
                } else {
                  $(this).append('<span style="padding-left: 3px; padding-right: 3px;">' + index + '</span>');
                }
              })
            }
            
            addIdToComments();
            
            $(document).on('tickets_comment_show', function () {
              addIdToComments();
            });
            </script>
            
            Чтобы всё у нас обновлялось после оставления комментария нужно в assets\components\tickets\js\web\default.js найти участок кода:
            comment: {
            ...
            save: function (form, button) {
              $(form).ajaxSubmit({
                ...
                success: function (response) {
                  ...
                  if (response.success) {
                    ...
                    Tickets.comment.getlist();
                    prettyPrint();
                    $(document).trigger('tickets_comment_show'); // <- добавить эту строчку
                  }
            
            1. Nik
              Nik
              19.09.2019, 09:30
              Супер!!! Классное решение! Все работает как часы! Огромное спасибо!
              Я так понимаю с помощью JavaScript можно решать многие задачи, своеобразная палочка-выручалочка.
              Я бы до такого не дошел)) Еще раз спасибо!
              Насчет копий я уже понял)) потому что если не делать копий, то при первом обновлении например того же компонента tickets все поломается
              1. Александр Мальцев
                Александр Мальцев
                19.09.2019, 09:52
                Пожалуйста, с помощью JavaScript можно решить все задачи во фронтенде.
                1. Nik
                  Nik
                  19.09.2019, 09:48
                  Добавлю картинку с результатом
              2. Nik
                Nik
                18.09.2019, 15:34
                Сам разобрался по второму вопросу, пора на свежий воздух)))) Там же просто [[+id]]
                А по первому убрал ссылку reply (закомментировал), не знаю это повлияет как-то на что-то, или нет, в настройках не нашел…
                1. Александр Мальцев
                  Александр Мальцев
                  19.09.2019, 06:47
                  Убирание ссылки reply не на что не повлияет.
                  1. Nik
                    Nik
                    18.09.2019, 15:47
                    Но, если просто id, это не то…
                    Как сделать чтобы нумерация начиналась с номера один поста данной темы
                2. Никита
                  Никита
                  24.08.2017, 14:00
                  Добрый день!
                  Вопрос по выводу списка статей с помощью Tiskets.
                  У страницы «Блог» создал раздел с тикетами, в содержимое во вкладке «Настройки раздела » указал следующий код
                  [[!pdoPage? 
                  &element=`getTickets`
                  ]] 
                  [[!+page.nav]]
                  
                  Далее в шаблоне раздела с тикетами (и в шаблоне «Блог») указал несколько вариантов вывода тикетов, НИ один из которых не работает(:

                  [[!pdoPage?
                  	&element =`getTickets`
                  ]]
                  [[!+page.nav]]
                  
                  [[getTickets?
                  ]]
                  
                  Вопрос очень простой, как мне хоть в каком виде вывести созданные статьи( а статьи в разделе с тикетами я создал) через getTickets
                  Через getResources статьи выводятся, скрини прилагаю, надеюсь на вашу помощь

                  раздел с тикетами — itchief.ru/assets/uploadify/5/2/f/52f6860be3d2e09f7b20ac170fecb5c8.png

                  шаблон — itchief.ru/assets/uploadify/9/5/0/95087afefd884a6fbf456d38a8b69f6f.png
                  1. Николай
                    Николай
                    24.09.2017, 23:56
                    Присоединяюсь к вопросу.

                    Как правильно прописывать вывод списка статей, а то криво получается или пустая страница (https://modx.pro/help/4633/ не реклама, просто вопрос тут затих, а мое решение не увенчалось успехом)
                    1. Александр Мальцев
                      Александр Мальцев
                      24.08.2017, 15:58
                      Здравствуйте!
                      Ни разу не сталкивался с такой проблемой, попробуйте очистить кэш сайта.
                      Чтобы вывести содержимое раздела с тикетами в шаблоне используйте поле [[*content]].
                    2. Антон
                      Антон
                      04.06.2017, 12:24
                      Подскажите, все перерыл, не могу найти ответ:
                      1)количество просмотров страницы с тикетом всегда показывает 0.
                      2)У меня не активна опция лайка/дизлайка комментариев и статьи(отображатся просто серые стрелки и тоже 0 показывает).
                      1. Александр Мальцев
                        Александр Мальцев
                        04.06.2017, 12:43
                        По умолчанию, если вы организовали статьи на базе дополнения Tickets, он считает просмотры только авторизованных пользователей.
                        Опции голосования активны только для авторизованных пользователей (но не за свои ресурсы).
                      2. Василий
                        Василий
                        21.12.2016, 09:47
                        Александр, доброго дня.
                        Сделал на сайте отзывы на ticketComments.
                        Отзывы оставляются, но не приходит подтверждение на email админа (нужно чтобы провести модерацию).
                        Подтверждение приходит только если откомментировать уже оставленный отзыв (2й уровень комментариев).
                        Подскажите, можно как-то это исправить?
                        1. Александр Мальцев
                          Александр Мальцев
                          24.12.2016, 01:10
                          Добрый день, Василий. Проверил этот момент на тестовом сайте, всё работает.
                          Использовал такой вызов сниппета:
                          [[!TicketComments?
                            &autoPublish=`0`
                            &autoPublishGuest=`0`
                            &allowGuest=`1`
                            &allowGuestEmails=`1`
                          ]]
                          
                        2. Алексей
                          Алексей
                          24.11.2016, 14:03
                          Спасибо, что откликнулись на мой вопрос.
                          Проблему решил следующим образом: экспортировал с другого сайта все таблицы относящиеся к tickets, потом импортировал в свою базу, после этого tickets установился. Все равно этот способ мне кажется костылем. Возможно ошибка связана с тем, что устанавливал пакет tckets на готовую сборку shopkeeper3, а там используется Migs и много других компонентов, предполагаю, один из них конфликтует.

                          И еще один вопрос, не совсем по теме. Подскажите как вывести два сниппета COMPARE (сравнение товаров) на одной странице. Дело в том, количество добавленных к сравнению товаров обновляется (AJAX-ом) только в сниппете который стоит первым в коде. Во втором сниппете обновление значения происходит только после перезагрузки страницы.
                          Спасибо.
                          1. Александр Мальцев
                            Александр Мальцев
                            25.11.2016, 14:01
                            По shopkeeper3 не подскажу. Может попробовать это реализовать через другие сниппеты getResources или pdoResources.
                          2. Алексей
                            Алексей
                            17.11.2016, 21:18
                            Здравствуйте.
                            Проблема с установкой Tiskets. Во время установке вылезает сообщение:
                            Could not create table `modx_tickets_views` SQL: CREATE TABLE `modx_tickets_views` (`parent` INT(10) unsigned NOT NULL DEFAULT '0', `uid` INT(10) unsigned NOT NULL DEFAULT '0', `guest_key` CHAR(32) NULL, `timestamp` DATETIME NOT NULL, PRIMARY KEY (`parent`,`uid`,`guest_key`)) ENGINE=MyISAM ERROR: Array ( [0] => 42000 [1] => 1171 [2] => All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead ).
                            Подскажите что делать?
                            1. Александр Мальцев
                              Александр Мальцев
                              24.11.2016, 13:28
                              Может быть это связано с версией MySQL. А также попробуйте удалить таблицу modx_tickets_views если, конечно же, она есть в базе данных.
                            2. Алексей
                              Алексей
                              18.09.2016, 15:46
                              Большое спасибо. Но вот только не пойму как строятся констукции типа [[~[[+section.id]]]] (вызывает в чанке шаблона pdopage ссылку на родителя.) или эти плейсхолдеры относятся только к pdotools?
                              Спасибо.
                              1. Александр Мальцев
                                Александр Мальцев
                                18.09.2016, 22:37
                                Плейсхолдеры генерируется сниппетами. В данном случае pdoPage.
                              2. Алексей
                                Алексей
                                17.09.2016, 10:27
                                Здравствуйте Александр.
                                Подскажите пожалуйста.
                                Хочу вывести в шаблоне поста список ресурсов из родительского ресурса (подкаталога) в котором находится ресурс поста. Если проще, — есть каталог: телевизоры, пылесосы, и тд., в папке пылесосы статья. Нужно в этой статье вывести список всех статей из раздела «пылесосы» (то есть родительского раздела для этой статьи).
                                Вывожу так:
                                [[!pdoPage?
                                				&element=`getTickets`
                                				&action=`tickets` 
                                				&parents=`??????`
                                				&limit=`9`
                                				&tpl=`post_list_hits`
                                				&offset=`0`
                                				&includeTVs=`carousel-post-image, carousel-post-videoURL, video, image, hidden, photo-to-day`  
                                				&sortbyTV=`HitsPage`
                                				&sortbyTVType=`integer`
                                				&sortdir=`DESC`
                                				]]
                                Но что ставить в &parents=`??????` не пойму. Родительский (id) ресурс должен определяться автоматически.
                                Спасибо.
                                1. Александр Мальцев
                                  Александр Мальцев
                                  17.09.2016, 12:23
                                  Получить родительский id можно так:
                                  [[*parent]]
                                  
                                  1. Алексей
                                    Алексей
                                    17.09.2016, 13:43
                                    Большое спасибо.
                                    Заработало.
                                    Скажите, а где можно посмотреть список всех системных плейсхолдеров MODXrevo?
                                    1. Александр Мальцев
                                      Александр Мальцев
                                      18.09.2016, 05:38
                                      Вот на этой странице:
                                      _https://rtfm.modx.com/revolution/2.x/making-sites-with-modx/commonly-used-template-tags
                                2. Алексей
                                  Алексей
                                  27.08.2016, 19:08
                                  Здравствуйте, Александр.
                                  Помогите разобраться. Когда начал писать сайт подключил по вашему уроку, все работало, комментарии добавлялись. Написал главную страницу и вернулся к странице поста. К своему огорчению обнаружил, что комментарии перестали добавляться, хотя сам шаблон поста не трогал (все как у вас). Все элементы страницы выводятся даже те комментарии, что я добавлял в начале написания сайта (когда проверял работоспособность коментов). Нажимаешь кнопку «НАПИСАТЬ» страница перегружается((. Что делать?
                                  Могу дать ссылку
                                  1. Александр Мальцев
                                    Александр Мальцев
                                    28.08.2016, 05:30
                                    Необходимо проверить правильно ли Вы подключили библиотеку jQuery.
                                    1. Алексей
                                      Алексей
                                      29.08.2016, 15:21
                                      Большое спасибо за ответ.
                                      Ошибку, нашел — пробел в закрывающем теге body, убрал все работает.
                                  2. Демьян Золин
                                    Демьян Золин
                                    18.08.2016, 03:53
                                    Здравствуйте.
                                    Захожу ресурс раздел с тикетами. (Дневник — моё название)
                                    Нажимаю кнопку "+Создать тикет".
                                    Открывается следующий вид (см. картинку)
                                    Отсутствуют кнопки «Сохранить» и т.д.
                                    Соответственно не могу создать тикет.
                                    Пару недель ничего на сайте не делал.(Tickets обновлено)

                                    Второй вопрос как называется эта группа кнопок(обведено красным)
                                    1. Александр Мальцев
                                      Александр Мальцев
                                      18.08.2016, 13:25
                                      Попробуйте переустановить MODX (заменить все файлы с дистрибутива). А также проверить есть ли ошибки в журнале (Управление->Отчёты->Журнал ощибок) и в консоли браузера.
                                      В этой группе находятся кнопки для выполнения основных действий над текущим ресурсом: «Сохранить», «Посмотреть», «Отменить» и «Помощь».
                                      1. Демьян Золин
                                        Демьян Золин
                                        18.08.2016, 15:40
                                        Бэкап помог, но осадок остался.
                                        Жумлу напомнило, когда у нее вход в админку пропадал, приходилось через пхпадмин с юзером колдовать (
                                        Друпал ни разу подобных эмоций не вызывал )
                                        1. Александр Мальцев
                                          Александр Мальцев
                                          26.08.2016, 12:22
                                          Да это не зависит от системы. Если у Вас произошло повреждение файлов, то это может случится с любой системой. Для этого и нужны бэкапы.
                                    2. Питон
                                      Питон
                                      07.08.2016, 07:15
                                      Добрался до комментариев :) Как сделать так чтобы форма добавления комментов разворачивалась по нажатию кнопку. Как у вас…
                                      — Извините — сам разобрался: надо в стили добавить —
                                      #comment-form {display: none;}
                                      1. Демьян Золин
                                        Демьян Золин
                                        05.08.2016, 10:36
                                        Здравствуйте. Выполнял все по Вашей инструкции. Но проблема вылезла когда написали комментарий. Посмотрите, пожалуйста, kprf-omsk.ru/dnevnik/krasnoe, может ошибка явная. Спасибо.
                                        1. Александр Мальцев
                                          Александр Мальцев
                                          05.08.2016, 11:21
                                          Здравствуйте. У Вас скорее всего в вызове TicketLatest неправильно указан параметр tpl. Т.е. указан чанк (tpl.Tickets.comment.latest.my), который Вы не создали. Проверьте этот момент.
                                          [[!TicketLatest? &limit=`3` 
                                                                 &tpl=`tpl.Tickets.comment.latest.my`   
                                                                 &action=`comments` 
                                                                 &includeContent=`1`]]
                                          
                                          Второй момент — это проверьте разметку.
                                          Блок с классом:
                                          <div class="col-md-4">
                                          
                                          должен быть расположен в том же контейнере что и следующий класс:
                                          <div itemscope="" itemtype="http://schema.org/Article" class="main-block col-md-8">
                                          
                                          1. Демьян Золин
                                            Демьян Золин
                                            05.08.2016, 13:10
                                            В «последних комментариях» ошибку нашел, благодаря Вашей наводке. Проверяю разметку. Поначалу, не вижу ошибки в коде шаблона «Пост»
                                            <!DOCTYPE html>
                                            <html lang="ru">
                                            [[$chunk.head]]
                                            <body>
                                              <div class="container"> 
                                                <div class="row">
                                                  [[$chunk.header]]
                                                  [[$chunk.navbar]]
                                                  <div itemscope itemtype="http://schema.org/Article" class="main-block col-md-8">
                                                    [[pdoCrumbs? &tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>` 
                                                                 &tplWrapper=`@INLINE <ol class="breadcrumb">[[+output]]</ol>`
                                                                 &tplHome=`@INLINE <li><a href="/"><i class="glyphicon glyphicon-home"></i></a></li>`
                                                                 &outputSeparator=``
                                                                 &showCurrent=`0`
                                                                 &showHome=`1`]]
                                                    <h1 itemprop="name" class="h2 page-header">[[*pagetitle]]</h1>
                                                    <div itemprop="description"><em>[[*description]]</em></div>
                                                    <div itemprop="articleBody">[[*content]]</div>
                                                    <div itemprop="image">[[*photo]]</div>
                                                    
                                                    [[$tpl.yandexshare]]
                                            
                                                    [[TicketMeta]]
                                                    [[pdoNeighbors? 
                                                      &tplPrev=`@INLINE <li class="previous"><a href="[[+link]]"><span class="glyphicon glyphicon-chevron-left"></span> [[+menutitle]]</a></li>` 
                                                      &tplNext=`@INLINE <li class="next"><a href="[[+link]]">[[+menutitle]] <span class="glyphicon glyphicon-chevron-right"></span></a></li>`
                                                      &tplWrapper=`@INLINE <div class="neighbors"><ul class="pager">[[+prev]][[+next]]</ul></div>`]]
                                                    [[!TicketComments? &fastMode=`0` &allowGuest=`1` &allowGuestEmails=`1` &maxCaptcha=`30`]]     
                                                  </div>
                                                  <div class="col-md-4">
                                                   [[$lastComment]]
                                                  </div>
                                                </div>
                                              </div>
                                              [[$chunk.footer]]
                                            </body>
                                            </html>
                                            1. Александр Мальцев
                                              Александр Мальцев
                                              06.08.2016, 13:31
                                              Шаблон нормальный. Но где-то всё равно зарылся лишний закрывающий тег div. Скорее всего в чанке, которые использует сниппет TicketComments.
                                        2. Ника
                                          Ника
                                          02.05.2016, 02:43
                                          Здравствуйте, Александр! Подскажите, пожалуйста, куда копать? «Текст комментария» и «Автор комментария» после обновления страницы превращаются в "???????". Слетает только кириллица. Все комментарии от незарегистрированных пользователей, до регистрации и прав еще «руки не дошли» :(
                                          1. Ника
                                            Ника
                                            02.05.2016, 12:44
                                            Уточнения: комментарии на кириллице корректно отправляются на почту и выкладываются на сайте, слетают после обновления страницы, т.е. при попадании в интерфейс модх и базу. Хостинг на reg.ru: php 5.3, кодировка utf8_general_ci. В htaccess есть AddDefaultCharset UTF-8.
                                            Помогите, пожалуйста.
                                          2. Алексей
                                            Алексей
                                            27.12.2015, 14:51
                                            Добрый день, Александр!
                                            Извините, что вопрос не совсем по теме.
                                            У меня на сайте вывод товаров организован при помощи таблицы MIGX.
                                            А хлебные крошки реализованы с помощью pdoCrumbs таким образом:
                                            [[pdoCrumbs? 
                                              &tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>` 
                                              &tplWrapper=`@INLINE <ol class="breadcrumb">[[+output]]</ol>`
                                              &tplHome=`@INLINE <li><a href=""><i class="glyphicon glyphicon-home"></i></a></li>`
                                              &outputSeparator=`  /  `
                                              &showCurrent=`1`
                                              &showHome=`1`
                                            ]]
                                            
                                            Проблема в том, что на странице самого товара (карточке товара) выводятся только: Главная / (название последнего пункта в списке ресурсов, на котором вообще стоит галочка «не показывать в меню»). Вся цепочка отсутствует и соответственно текущая страница (карточка товара).
                                            Подскажите пожалуйста, что нужно исправить.
                                            Спасибо!
                                            1. Александр Мальцев
                                              Александр Мальцев
                                              28.12.2015, 16:24
                                              Здравствуйте, Алексей.
                                              pdoCrumbs выводят хлебные крошки на основании иерархии ресурсов в дереве.
                                              А у Вас товары организованы в таблице MIGX. Тут Вам придётся самостоятельно написать сниппет, который будет брать данные из таблицы и выводить их на странице.
                                            2. Анна
                                              Анна
                                              31.10.2015, 21:51
                                              Александр, подскажите пожалуйста как настроить модерацию комментариев, чтоб сначала проверить комментарий перед публикацией. Не разберусь с документацией, непонятно. спасибо
                                              1. Александр Мальцев
                                                Александр Мальцев
                                                02.11.2015, 14:32
                                                Привет, Аня.
                                                Там всё просто.
                                                Необходимо просто добавить параметр(ы) &autoPublishGuest=`0` (публиковать комментарии анонимных пользователей после модерации) и (или) &autoPublish=`0` (публиковать комментарии авторизированных пользователей после модерации) к сниппету TicketComments:
                                                [[!TicketComments? &allowGuest=`1` &allowGuestEmails=`1` &autoPublishGuest=`0`]]
                                                
                                                Теперь, после оставления пользователем комментария, он не опубликуется. Вам необходимо будет его проверить. Для этого необходимо зайти в Панель Управления MODX и перейти на страницу Комментарии:
                                                Приложения -> Тикеты -> Вкладка «Комментарии»
                                                На этой странице Вы его просматриваете и решаете, что с ним делать (публиковать или нет).
                                                1. Аня
                                                  Аня
                                                  06.11.2015, 13:39
                                                  Спасибо. Действительно всё просто. А я в параметрах чанка меняю меняю и никак. А что значит 0 и 1 в кавычках? это да — нет? Или другой вариант.
                                                  1. Александр Мальцев
                                                    Александр Мальцев
                                                    07.11.2015, 07:00
                                                    1 — автоматически публиковать комментарии, 0 — автоматически не публиковать, публикация комментария осуществляется администратором или модератором, после его проверки.
                                              2. velllum
                                                velllum
                                                02.06.2015, 22:37
                                                ШЕФ помоги разобрать!!! Вопрос по Tickets, как вывести количество комментария принадлежащей только той страници или *id к которым они относятся? В инете есть информация, тоько примеры у меня не получается реализовать!!! Описание ниже в коментариях! Зарание спасибо!!!
                                                1. Александр Мальцев
                                                  Александр Мальцев
                                                  03.06.2015, 15:16
                                                  1. Создаёшь сниппет TicketCommentCount
                                                  <?php
                                                  //получаешь id текущего ресурса
                                                  $id = $modx->resource->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 ($q->prepare() && $q->stmt->execute()) {
                                                  	$count = (integer) $q->stmt->fetch(PDO::FETCH_COLUMN);
                                                  }
                                                  return $count;
                                                  
                                                  2. Открываешь шаблон и в нужно месте вызываешь сниппет TicketCommentCount, который будет выводить количество комментариев:
                                                  [[!TicketCommentCount]]
                                                  
                                                  1. velllum
                                                    velllum
                                                    03.06.2015, 23:47
                                                    А как мне снипету объяснить с какой страницы брать и выводить комментарии? Допустим у меня 10 страниц и на всех коменты на разные темы, мне нужно в «N» месте показать количество комментарии с одной страницы? например вот так «КОММЕНТАРИИ — (15)», как мне это сделать объясните пожалуйста????
                                                    1. Александр Мальцев
                                                      Александр Мальцев
                                                      05.06.2015, 14:27
                                                      Этот сниппет получает комментарии для текущей страницы. Если вам надо получить количество комментариев для какой-то другой страницы, то её необходимо передать в сниппет:
                                                      [[!TicketCommentCount? &id=`5`]]
                                                      
                                                      А первую строку кода сниппета изменить на:
                                                      $id = $modx->getOption('id', $scriptProperties,$modx->resource->id);
                                                      
                                                2. Аня
                                                  Аня
                                                  05.03.2015, 09:21
                                                  Спасибо
                                                  1. Аня
                                                    Аня
                                                    01.03.2015, 11:47
                                                    А возможно ли поменять слово «комментарии» на «отзывы»
                                                    1. Александр Мальцев
                                                      Александр Мальцев
                                                      01.03.2015, 13:47
                                                      Аня, Добрый день!
                                                      1 Способ:
                                                      Значок «Шестерёнка» -> Управление словарями.
                                                      В открывшейся странице «Управления словарями» устанавливаем следующее:
                                                      • в раскрывающемся списке «Пространство имён» выбираем «tickets»;
                                                      • в раскрывающемся списке «Язык» выбираем «ru».
                                                      После этого в таблице ищем имя «comments» и изменяем его значение на «Отзывы».
                                                      После этого незабываем «Очистить кэш сайта».

                                                      2 способ:
                                                      Для этого открываем чанк «tpl.Tickets.comment.wrapper».
                                                      Ищем следующую строчку:
                                                      <h3 class="title">[[%comments]] (<span id="comment-total">[[+total]]</span>)</h3>
                                                      Изменяем её на следующую строчку:
                                                      <h3 class="title">Отзывы (<span id="comment-total">[[+total]]</span>)</h3>
                                                    2. Аня
                                                      Аня
                                                      20.02.2015, 14:00
                                                      Александр, а вот если я захочу вместо логотипа разместить просто картинку в хидер? Какой ширины делать непонятно, если ориентироваться на меню от и до? Я так понимаю сайт растягивается по ширине монитора. (То что под мобильники сделано тоже понятно) поскажете, как с этим быть
                                                      1. Александр Мальцев
                                                        Александр Мальцев
                                                        21.02.2015, 14:06
                                                        Аня, самый простой вариант подготовить изображения для различных устройств: xs, sm, md и lg. Потом с помощью медиа запросов установить различные картинки для различных устройств:
                                                        /* стиль для заголовка с шириной экрана до 768px */ 
                                                        .header {
                                                          height:75px;
                                                          background: url('/assets/images/logo/logo-xs.png') no-repeat;
                                                        }
                                                        
                                                        /* стиль для заголовка с шириной экрана до 992px */ 
                                                        @media(min-width:768px) {
                                                          .header {
                                                            height:90px;
                                                            background: url('/assets/images/logo/logo-sm.png') no-repeat;
                                                          }
                                                        }
                                                        
                                                        /* стиль для заголовка с шириной экрана до 1200px */ 
                                                        @media(min-width:992px) {
                                                          .header {
                                                            height:100px;
                                                            background: url('/assets/images/logo/logo-md.png') no-repeat;
                                                          }
                                                        }
                                                        
                                                        /* стиль для заголовка с шириной экрана свыше 1200px */ 
                                                        @media(min-width:1200px) {
                                                          .header {
                                                            height:110px;
                                                            background: url('/assets/images/logo/logo-lg.png') no-repeat;
                                                          }
                                                        }
                                                        
                                                      2. Аня
                                                        Аня
                                                        09.02.2015, 21:54
                                                        Александр, всё получилось. Но почему то хлебные крошки прижаты кверху тела статьи. Конечно получается сделать отступ с помощью margin-top в 20px в .breadcrumb, но в мобильной версии опять прижимаются кверху. Может что-то не так делаю. Ищу. Не могу найти причину. Вроде всё верно)
                                                        1. Александр Мальцев
                                                          Александр Мальцев
                                                          10.02.2015, 13:20
                                                          Аня, в конце данного урока должен получиться следующий CSS файл:
                                                          .main-block {
                                                          background-color: rgba(255, 255, 255, 0.6);
                                                          padding:15px;
                                                          }
                                                          .header {
                                                          height:75px;
                                                          background: url('/assets/images/logo/logo.png') no-repeat;
                                                          }
                                                          footer {
                                                          background-color: rgba(255, 255, 255, 0.6);
                                                          margin-top:15px;
                                                          padding-top:5px;
                                                          }
                                                          .neighbors {
                                                          margin-bottom:10px;
                                                          }
                                                          img {
                                                          display: block;
                                                          max-width: 100%;
                                                          height: auto;
                                                          }
                                                          
                                                        Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.