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

Александр Мальцев
13K
1
Содержание:
  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. Evgeny
    19 сентября 2020, 06:13
    Приветы, не могли бы помочь мне? Подскажите пожалуйста как реализовать вывод счетчиков количества просмотров в секции у статей блога допустим, чтобы у каждой статьи был счетчик количества-просмотров, искал по ticketmeta но ничего к сожалению не нашел, только вывод счетчика внутри статьи
    1. Александр Мальцев
      20 сентября 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
      20 июля 2020, 20:49
      Здравствуйте Александр!
      Простите за возможно простой вопрос.
      Мне нужно на сайте сделать возможность посетителю (неавторизированному) сделать комментарий, чтоб админ мог на него ответить. Плюс, нужно поставить reCaptcha чтоб защитится от спам-роботов.
      Как бы вы посоветовали это сделать?
      Ну то есть суть в том, что в данном случае мне не нужны ни блог ни форма обратной связи, а только возможность посетителям добавлять коменты а админу на них отвечать, и плюс ко всему этому капча
      1. Александр Мальцев
        22 июля 2020, 15:19
        Здравствуйте! В MODX имеется несколько компонентов для реализации подобного функционала. Можете это выполнить, например, на Tickets или easyComm. Либо можете просто взять FormIt! и написать этот функционал самостоятельно.
      2. Nik
        18 сентября 2019, 15:04
        Александр не подскажите где в настройках параметров Tickets можно убрать древовидную структуру? то есть без кнопочки «ответить», если это конечно предусмотрено в этом компоненте.
        И еще хотел спросить, какой переменной выводить номера постов, чтобы отображались числом, непосредственно за решеткой (на картинке показал стрелкой). Думаю так было бы удобней искать и направлять пользователя, к конкретному ответу с номером.
        1. Александр Мальцев
          19 сентября 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
            19 сентября 2019, 09:30
            Супер!!! Классное решение! Все работает как часы! Огромное спасибо!
            Я так понимаю с помощью JavaScript можно решать многие задачи, своеобразная палочка-выручалочка.
            Я бы до такого не дошел)) Еще раз спасибо!
            Насчет копий я уже понял)) потому что если не делать копий, то при первом обновлении например того же компонента tickets все поломается
            1. Александр Мальцев
              19 сентября 2019, 09:52
              Пожалуйста, с помощью JavaScript можно решить все задачи во фронтенде.
              1. Nik
                19 сентября 2019, 09:48
                Добавлю картинку с результатом
            2. Nik
              18 сентября 2019, 15:34
              Сам разобрался по второму вопросу, пора на свежий воздух)))) Там же просто [[+id]]
              А по первому убрал ссылку reply (закомментировал), не знаю это повлияет как-то на что-то, или нет, в настройках не нашел…
              1. Александр Мальцев
                19 сентября 2019, 06:47
                Убирание ссылки reply не на что не повлияет.
                1. Nik
                  18 сентября 2019, 15:47
                  Но, если просто id, это не то…
                  Как сделать чтобы нумерация начиналась с номера один поста данной темы
              2. Никита
                24 августа 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 сентября 2017, 23:56
                  Присоединяюсь к вопросу.

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

                        И еще один вопрос, не совсем по теме. Подскажите как вывести два сниппета COMPARE (сравнение товаров) на одной странице. Дело в том, количество добавленных к сравнению товаров обновляется (AJAX-ом) только в сниппете который стоит первым в коде. Во втором сниппете обновление значения происходит только после перезагрузки страницы.
                        Спасибо.
                        1. Александр Мальцев
                          25 ноября 2016, 14:01
                          По shopkeeper3 не подскажу. Может попробовать это реализовать через другие сниппеты getResources или pdoResources.
                        2. Алексей
                          17 ноября 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 ноября 2016, 13:28
                            Может быть это связано с версией MySQL. А также попробуйте удалить таблицу modx_tickets_views если, конечно же, она есть в базе данных.
                          2. Алексей
                            18 сентября 2016, 15:46
                            Большое спасибо. Но вот только не пойму как строятся констукции типа [[~[[+section.id]]]] (вызывает в чанке шаблона pdopage ссылку на родителя.) или эти плейсхолдеры относятся только к pdotools?
                            Спасибо.
                            1. Александр Мальцев
                              18 сентября 2016, 22:37
                              Плейсхолдеры генерируется сниппетами. В данном случае pdoPage.
                            2. Алексей
                              17 сентября 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 сентября 2016, 12:23
                                Получить родительский id можно так:
                                [[*parent]]
                                
                                1. Алексей
                                  17 сентября 2016, 13:43
                                  Большое спасибо.
                                  Заработало.
                                  Скажите, а где можно посмотреть список всех системных плейсхолдеров MODXrevo?
                                  1. Александр Мальцев
                                    18 сентября 2016, 05:38
                                    Вот на этой странице:
                                    _https://rtfm.modx.com/revolution/2.x/making-sites-with-modx/commonly-used-template-tags
                              2. Алексей
                                27 августа 2016, 19:08
                                Здравствуйте, Александр.
                                Помогите разобраться. Когда начал писать сайт подключил по вашему уроку, все работало, комментарии добавлялись. Написал главную страницу и вернулся к странице поста. К своему огорчению обнаружил, что комментарии перестали добавляться, хотя сам шаблон поста не трогал (все как у вас). Все элементы страницы выводятся даже те комментарии, что я добавлял в начале написания сайта (когда проверял работоспособность коментов). Нажимаешь кнопку «НАПИСАТЬ» страница перегружается((. Что делать?
                                Могу дать ссылку
                                1. Александр Мальцев
                                  28 августа 2016, 05:30
                                  Необходимо проверить правильно ли Вы подключили библиотеку jQuery.
                                  1. Алексей
                                    29 августа 2016, 15:21
                                    Большое спасибо за ответ.
                                    Ошибку, нашел — пробел в закрывающем теге body, убрал все работает.
                                2. Демьян Золин
                                  18 августа 2016, 03:53
                                  Здравствуйте.
                                  Захожу ресурс раздел с тикетами. (Дневник — моё название)
                                  Нажимаю кнопку "+Создать тикет".
                                  Открывается следующий вид (см. картинку)
                                  Отсутствуют кнопки «Сохранить» и т.д.
                                  Соответственно не могу создать тикет.
                                  Пару недель ничего на сайте не делал.(Tickets обновлено)

                                  Второй вопрос как называется эта группа кнопок(обведено красным)
                                  1. Александр Мальцев
                                    18 августа 2016, 13:25
                                    Попробуйте переустановить MODX (заменить все файлы с дистрибутива). А также проверить есть ли ошибки в журнале (Управление->Отчёты->Журнал ощибок) и в консоли браузера.
                                    В этой группе находятся кнопки для выполнения основных действий над текущим ресурсом: «Сохранить», «Посмотреть», «Отменить» и «Помощь».
                                    1. Демьян Золин
                                      18 августа 2016, 15:40
                                      Бэкап помог, но осадок остался.
                                      Жумлу напомнило, когда у нее вход в админку пропадал, приходилось через пхпадмин с юзером колдовать (
                                      Друпал ни разу подобных эмоций не вызывал )
                                      1. Александр Мальцев
                                        26 августа 2016, 12:22
                                        Да это не зависит от системы. Если у Вас произошло повреждение файлов, то это может случится с любой системой. Для этого и нужны бэкапы.
                                  2. Питон
                                    07 августа 2016, 07:15
                                    Добрался до комментариев :) Как сделать так чтобы форма добавления комментов разворачивалась по нажатию кнопку. Как у вас…
                                    — Извините — сам разобрался: надо в стили добавить —
                                    #comment-form {display: none;}
                                    1. Демьян Золин
                                      05 августа 2016, 10:36
                                      Здравствуйте. Выполнял все по Вашей инструкции. Но проблема вылезла когда написали комментарий. Посмотрите, пожалуйста, kprf-omsk.ru/dnevnik/krasnoe, может ошибка явная. Спасибо.
                                      1. Александр Мальцев
                                        05 августа 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 августа 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 августа 2016, 13:31
                                            Шаблон нормальный. Но где-то всё равно зарылся лишний закрывающий тег div. Скорее всего в чанке, которые использует сниппет TicketComments.
                                      2. Ника
                                        02 мая 2016, 02:43
                                        Здравствуйте, Александр! Подскажите, пожалуйста, куда копать? «Текст комментария» и «Автор комментария» после обновления страницы превращаются в "???????". Слетает только кириллица. Все комментарии от незарегистрированных пользователей, до регистрации и прав еще «руки не дошли» :(
                                        1. Ника
                                          02 мая 2016, 12:44
                                          Уточнения: комментарии на кириллице корректно отправляются на почту и выкладываются на сайте, слетают после обновления страницы, т.е. при попадании в интерфейс модх и базу. Хостинг на reg.ru: php 5.3, кодировка utf8_general_ci. В htaccess есть AddDefaultCharset UTF-8.
                                          Помогите, пожалуйста.
                                        2. Алексей
                                          27 декабря 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 декабря 2015, 16:24
                                            Здравствуйте, Алексей.
                                            pdoCrumbs выводят хлебные крошки на основании иерархии ресурсов в дереве.
                                            А у Вас товары организованы в таблице MIGX. Тут Вам придётся самостоятельно написать сниппет, который будет брать данные из таблицы и выводить их на странице.
                                          2. Анна
                                            31 октября 2015, 21:51
                                            Александр, подскажите пожалуйста как настроить модерацию комментариев, чтоб сначала проверить комментарий перед публикацией. Не разберусь с документацией, непонятно. спасибо
                                            1. Александр Мальцев
                                              02 ноября 2015, 14:32
                                              Привет, Аня.
                                              Там всё просто.
                                              Необходимо просто добавить параметр(ы) &autoPublishGuest=`0` (публиковать комментарии анонимных пользователей после модерации) и (или) &autoPublish=`0` (публиковать комментарии авторизированных пользователей после модерации) к сниппету TicketComments:
                                              [[!TicketComments? &allowGuest=`1` &allowGuestEmails=`1` &autoPublishGuest=`0`]]
                                              
                                              Теперь, после оставления пользователем комментария, он не опубликуется. Вам необходимо будет его проверить. Для этого необходимо зайти в Панель Управления MODX и перейти на страницу Комментарии:
                                              Приложения -> Тикеты -> Вкладка «Комментарии»
                                              На этой странице Вы его просматриваете и решаете, что с ним делать (публиковать или нет).
                                              1. Аня
                                                06 ноября 2015, 13:39
                                                Спасибо. Действительно всё просто. А я в параметрах чанка меняю меняю и никак. А что значит 0 и 1 в кавычках? это да — нет? Или другой вариант.
                                                1. Александр Мальцев
                                                  07 ноября 2015, 07:00
                                                  1 — автоматически публиковать комментарии, 0 — автоматически не публиковать, публикация комментария осуществляется администратором или модератором, после его проверки.
                                            2. velllum
                                              02 июня 2015, 22:37
                                              ШЕФ помоги разобрать!!! Вопрос по Tickets, как вывести количество комментария принадлежащей только той страници или *id к которым они относятся? В инете есть информация, тоько примеры у меня не получается реализовать!!! Описание ниже в коментариях! Зарание спасибо!!!
                                              1. Александр Мальцев
                                                03 июня 2015, 15:16
                                                1. Создаёшь сниппет TicketCommentCount
                                                <?php
                                                //получаешь id текущего ресурса
                                                $id = $modx->resource->id;
                                                $q = $modx->newQuery('modResource', $id);
                                                $q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-'");
                                                $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
                                                  03 июня 2015, 23:47
                                                  А как мне снипету объяснить с какой страницы брать и выводить комментарии? Допустим у меня 10 страниц и на всех коменты на разные темы, мне нужно в «N» месте показать количество комментарии с одной страницы? например вот так «КОММЕНТАРИИ — (15)», как мне это сделать объясните пожалуйста????
                                                  1. Александр Мальцев
                                                    05 июня 2015, 14:27
                                                    Этот сниппет получает комментарии для текущей страницы. Если вам надо получить количество комментариев для какой-то другой страницы, то её необходимо передать в сниппет:
                                                    [[!TicketCommentCount? &id=`5`]]
                                                    
                                                    А первую строку кода сниппета изменить на:
                                                    $id = $modx->getOption('id', $scriptProperties,$modx->resource->id);
                                                    
                                              2. Аня
                                                05 марта 2015, 09:21
                                                Спасибо
                                                1. Аня
                                                  01 марта 2015, 11:47
                                                  А возможно ли поменять слово «комментарии» на «отзывы»
                                                  1. Александр Мальцев
                                                    01 марта 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 февраля 2015, 14:00
                                                    Александр, а вот если я захочу вместо логотипа разместить просто картинку в хидер? Какой ширины делать непонятно, если ориентироваться на меню от и до? Я так понимаю сайт растягивается по ширине монитора. (То что под мобильники сделано тоже понятно) поскажете, как с этим быть
                                                    1. Александр Мальцев
                                                      21 февраля 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 февраля 2015, 21:54
                                                      Александр, всё получилось. Но почему то хлебные крошки прижаты кверху тела статьи. Конечно получается сделать отступ с помощью margin-top в 20px в .breadcrumb, но в мобильной версии опять прижимаются кверху. Может что-то не так делаю. Ищу. Не могу найти причину. Вроде всё верно)
                                                      1. Александр Мальцев
                                                        10 февраля 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;
                                                        }
                                                        
                                                      Войдите, пожайлуста, в аккаунт, чтобы оставить комментарий.