easyComm — создание отзывов для товаров в MODX Revo

easyComm - создание отзывов для товаров MODX Revo

easyComm — это платный компонент для MODX Revo, который предназначен для создания отзывов, комментариев и создания разделов с вопросами пользователей. Плюс в отличии от tickets, у него из коробки есть звездный рейтинг.

Компонент предназначен в первую очередь для работы с неавторизованными пользователями (но поддержка работы авторизованными тоже есть).

Покупка и установка easyComm

Для того чтобы купить компонент, вам необходимо зарегистрироваться (авторизоваться) на сайте modstore.pro, перейти на страницу https://modstore.pro/packages/utilities/easycomm и добавить компонент в корзину, после чего оплатить его  удобным для вас способом.

После покупки, добавляем на сайт репозиторий от modstore.pro и устанавливаем компонент.

Что идет в комплекте

После установки easyComm, у вас появится 4 сниппета:

  • ecForm – форма отправки комментариев/отзывов.
  • ecMessages – сниппет вывода сообщений определенной цепочки
  • ecMessagesCount – сниппет вывода количества сообщений определенной цепочки или цепочек
  • ecThreadRating – сниппет вывода рейтинга определенной цепочки.

Также в админке, появится новый раздел (Приложения->easyComm), где вы сможете модерировать и отвечать на отзывы пользователей.

Отзывы о товаре MODx Revo miniShop2

Зависимости

Для корректной работы компонента, вам самостоятельно необходимо установить (подключить) на сайт:

  • в шаблон подключить библиотеки: jquery 1.7 + (если не подключен) и плагин jquery.form — без него вы получите ошибку can t find jquery ajaxform plugin
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
  • Установить компоненты (если не установлены): pdoTools (т.к. в чанках используется Fenom) и dateAgo — для формирования «красивой» даты.

Если что то не работает проверьте подключение вышеуказанных библиотек и пакетов.

Кастомизация (изменение внешнего вида) дефолтных чанков

Внимание! Не вносите изменения в чанки которые идут в комплекте, т.к. после обновления компонента все изменения будут затерты.

Меняем внешний вид формы отправки и выводим ее на сайте

Для того чтобы изменить стандартный вид формы сделаем копию дефолтного чанка (tpl.ecForm) и назовем его tpl.ecForm.custom

делаем копию чанка

Далее открываем копию только созданного чанка и меняем в нем код на свой (осторожнее со скрытым полям, name, классами и идентификаторами), у меня он получился следующим:

<div class="container mt-3 mb-4">
    <form id="contact-form" class="ec-form" method="post" role="form" id="ec-form-{$fid}" data-fid="{$fid}" action="">
        <input type="hidden" name="thread" value="{$thread}">
        <div class="form-group ec-antispam">
            <label for="ec-{$antispam_field}-{$fid}" class="control-label">{'ec_fe_message_antismap' | lexicon}</label>
            <input type="text" name="{$antispam_field}" class="form-control" id="ec-{$antispam_field}-{$fid}" value="" />
        </div>
        <div class="row">
            <div class="col-md-6">
                <div class="md-form mb-0">
                    <input type="text" id="ec-user_name-{$fid}" name="user_name" class="form-control" value="{$user_name}" >
                    <label for="ec-user_name-{$fid}" class="">{'ec_fe_message_user_name' | lexicon}</label>
                    <span class="ec-error help-block" id="ec-user_name-error-{$fid}"></span>
                </div>
            </div>
            <div class="col-md-6">
                <div class="md-form mb-2">
                    <input type="text" id="ec-user_email-{$fid}" name="user_email" class="form-control" value="{$user_email}" >
                    <label for="ec-user_email-{$fid}" class="">{'ec_fe_message_user_email' | lexicon}</label>
                    <span class="ec-error help-block" id="ec-user_email-error-{$fid}"></span>
                </div>
            </div>
        </div>
        <label for="ec-rating-{$fid}" class="d-none">{'ec_fe_message_rating' | lexicon}</label>
        <input type="hidden" name="rating" id="ec-rating-{$fid}" value="{$rating}" />
        <div class="ec-rating ec-clearfix" data-storage-id="ec-rating-{$fid}">
            <div class="ec-rating-stars">
                <span data-rating="1" data-description="{'ec_fe_message_rating_1' | lexicon}"></span>
                <span data-rating="2" data-description="{'ec_fe_message_rating_2' | lexicon}"></span>
                <span data-rating="3" data-description="{'ec_fe_message_rating_3' | lexicon}"></span>
                <span data-rating="4" data-description="{'ec_fe_message_rating_4' | lexicon}"></span>
                <span data-rating="5" data-description="{'ec_fe_message_rating_5' | lexicon}"></span>
            </div>
            <div class="ec-rating-description">{'ec_fe_message_rating_0' | lexicon}</div>
        </div>
        <span class="ec-error help-block" id="ec-rating-error-{$fid}"></span>
        <div class="md-form">
            <textarea type="text" id="ec-text-{$fid}" name="text" rows="2" class="form-control md-textarea">{$text}</textarea>
            <label for="ec-text-{$fid}">{'ec_fe_message_text' | lexicon}</label>
            <span class="ec-error help-block" id="ec-text-error-{$fid}"></span>
        </div>
        {$recaptcha}
        <div class="form-actions">
            <input type="submit" class="btn btn-primary" name="send" value="{'ec_fe_send' | lexicon}" />
        </div>
    </form>
    <div id="ec-form-success-{$fid}"></div>
</div>

В данной форме я убрал 2 стандартных поля: контактная информация и тема сообщения, по этому вызов будет следующим:

[[ecForm &allowedFields=`user_name,user_email,rating,text` &tplForm=`tpl.ecForm.custom`]]

После этого форма выведется.

Кастомизация и вывод отзывов

Внешний вид вывода отзыва хранится в чанке tpl.ecMessages.Row. Сделаем его копию и назовем tpl.ecMessages.Row.custom и отредактируем, у меня получился следующий код:

<div id="ec-{$thread_name}-message-{$id}" class="container ec">
    <div class="d-block"><strong class="ec-message__author">{$user_name}</strong> <span class="ec-message__date">{$date | dateAgo}</span>
        {if $voting_enable}
            {set $voting_button_classes = $voting_can_vote ? 'js-ec-vote-button enabled' : ''}
            <div class="ec-message__votes ec-clearfix" data-message-id="{$id}" data-properties-key="{$properties_key}">
                <div class="ec-message__votes-item">
                    <a href="javascript:void(0)" class="{$voting_button_classes} ec-message__votes-button ec-message__votes-button-like {if $vote==1}active{/if}" data-value="1">
                        {$likes}
                    </a>
                </div>
                <div class="ec-message__votes-item">
                    <a href="javascript:void(0)" class="{$voting_button_classes} ec-message__votes-button ec-message__votes-button-dislike {if $vote==-1}active{/if}" data-value="-1">
                        {$dislikes}
                    </a>
                </div>
                <div class="ec-message__votes-bar"><span class="js-ec-vote-bar" style="width: {$votes_rating_percent}%"></span></div>
            </div>
        {/if}
    </div>
    <div class="ozenka">Оценка:</div>
    <div class="ec-stars">
       <span class="rating-{$rating}"></span>
    </div>
    <p class="h6">Отзыв:</p>
    <p>{$text}</p>
    {if $reply_text}
    <div class="ec-message__reply">
        {if $reply_author}
        <p><strong>{$reply_author}</strong></p>
        {/if}
        <p>{$reply_text}</p>
    </div>
    {/if}
</div>

Теперь выводим сообщения:

[[ecMessages? &tpl=`tpl.ecMessages.Row.custom`]]

Вывод расширенного рейтинга отзывов (комментариев)

Для вызова расширенного рейтинга используем следующий вызов

[[ecThreadRating? tpl=`tpl.ecThreadDetailedRating`]]

Если не нравится внешний вид по умолчанию, то делаем копию чанка tpl.ecThreadDetailedRating и вносим свои классы

Что у меня получилось

И так я выводил это все в табе, а форму добавления отзыва в модальном окне и общий код у меня выглядит так:

<div class="tab-pane fade" id="otzivi" role="tabpanel" aria-labelledby="otzivi-tab">
        <div class="container">
            <p class="h4">Отзывы</p>
            <div class="row">
                <div class="col-sm-7">
                    [[ecThreadRating? &tpl=`tpl.ecThreadDetailedRating.custom`]]
                </div>
                <div class="col-sm-5">
                    <p>Для расчёта рейтинга используются общие оценки товара за всё время. Оставьте свой отзыв о товаре: <strong>[[*pagetitle]]</strong></p>
                    <button type="button" class="btn btn-primary mb-3" data-toggle="modal" data-target="#ostavitOtzivModal">Оставить отзыв</button>
                </div>
            </div>
            <hr>
            <div class="row">
                <div class="col-12">
                    [[ecMessages? &tpl=`tpl.ecMessages.Row.custom`]]
                </div>
            </div>
            <!-- Modal -->
            <div class="modal fade" id="ostavitOtzivModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
              aria-hidden="true">
              <div class="modal-dialog" role="document">
                <div class="modal-content">
                  <div class="modal-header">
                    <p class="h5 modal-title" id="exampleModalLabel">Оставить отзыв</p>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                      <span aria-hidden="true">×</span>
                    </button>
                  </div>
                  <div class="modal-body">[[ecForm? &allowedFields=`user_name,user_email,rating,text` &tplForm=`tpl.ecForm.custom`]]</div>
                </div>
              </div>
            </div>
        </div>
    </div>

А на сайте так.

внешний вид на сайте

Чем то похоже на то что у Mvideo

Ну и осталось вывести общий рейтинг.

Вывод общего рейтинга

Для того, чтобы сделать его, просто вызываем сниппет

[[ecThreadRating]]
Документация по пакету: https://docs.modx.pro/components/easycomm/

Оценить статью
web-revenue.ru
Добавить комментарий