Приветствую всех в новой статье, в данном уроке мы с вами реализуем отзывы о наших товарах. Вот как они выглядят сейчас на шаблоне нашего интернет-магизина:

В общем, я думаю, понятно, какого типа отзывы у нас будут реализованы. Реализовать их можно разными компонентами (FormIt, Tickets, свой сниппет и т.д.), но реализовать с наименьшими трудовыми затратами нам поможет компонент из репозитория modStore.pro – EasyComm. Данный компонент платный, но скажу вам, что он стоит своих денег.
После того как мы скачали и установили компонент, давайте посмотрим, что с ним идет в комплекте, а именно 4 сниппета:
- ecForm – форма отправки отзыва
- ecMessages – сниппет вывода сообщений определенной цепочки
- ecMessagesCount – сниппет вывода количества сообщений определенной цепочки или цепочек
- ecThreadRating – сниппет вывода рейтинга определенной цепочки.
Также вы увидете новый раздел в админке (Приложения->easyComm), где вы сможете отвечать на отзыввы пользователей и управлять публикациями отзывов.

Итак, начнем мы с самой формы. Создадим чанк, на основе дефолтного (tpl.ecForm), у меня он получился такой (ecFormCustomTpl):
<form id="contact-form" class="ec-form contact-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]]</label>
<input type="text" name="[[+antispam_field]]" class="form-control" id="ec-[[+antispam_field]]-[[+fid]]" value="" />
</div>
<div class="row field-row">
<div class="col-xs-12 col-sm-6">
<label>Ваше имя*</label>
<input type="text" name="user_name" class="le-input" id="ec-user_name-[[+fid]]" value="[[+user_name]]" />
<span class="ec-error help-block" id="ec-user_name-error-[[+fid]]"></span>
</div>
<div class="col-xs-12 col-sm-6">
<label>Email*</label>
<input type="text" name="user_email" class="le-input" id="ec-user_email-[[+fid]]" value="[[+user_email]]" />
<span class="ec-error help-block" id="ec-user_email-error-[[+fid]]"></span>
</div>
</div><!-- /.field-row -->
<div class="field-row star-row">
<label for="ec-rating-[[+fid]]" class="control-label">[[%ec_fe_message_rating]]</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]]"></span>
<span data-rating="2" data-description="[[%ec_fe_message_rating_2]]"></span>
<span data-rating="3" data-description="[[%ec_fe_message_rating_3]]"></span>
<span data-rating="4" data-description="[[%ec_fe_message_rating_4]]"></span>
<span data-rating="5" data-description="[[%ec_fe_message_rating_5]]"></span>
</div>
<div class="ec-rating-description">[[%ec_fe_message_rating_0]]</div>
</div>
<span class="ec-error help-block" id="ec-rating-error-[[+fid]]"></span>
</div>
<div class="field-row">
<label>Ваш отзыв</label>
<textarea type="text" name="text" class="le-input" rows="5" id="ec-text-[[+fid]]">[[+text]]</textarea>
<span class="ec-error help-block" id="ec-text-error-[[+fid]]"></span>
</div><!-- /.field-row -->
<div class="buttons-holder">
<button type="submit" class="le-button huge">Отправить</button>
</div><!-- /.buttons-holder -->
</form><!-- /.contact-form -->
<div id="ec-form-success-[[+fid]]"></div>
По чаку выше я попрошу вас уделить внимание скрытым полям, name’ам, классам и идентификаторам, так как это довольно распространенная ошибка. Теперь давайте выведем нашу форму в шаблоне, следующим вызовом:
[[!ecForm?
&tplForm=`ecFormCustomTpl`
]]
Форма, должна после этого вывестись. Пока мы не будем ее тестировать, а сразу создадим чанк вывода наших отзывов (ecMessageTpl):
<div class="comment-item" id="ec-[[+thread_name]]-message-[[+id]]">
<div class="row no-margin">
<div class="col-lg-1 col-xs-12 col-sm-2 no-margin">
<div class="avatar">
<img alt="avatar" src="assets/images/default-avatar.jpg">
</div>
</div>
<div class="col-xs-12 col-lg-11 col-sm-10 no-margin">
<div class="comment-body">
<div class="meta-info">
<div class="author inline">
<span class="bold">[[+user_name]]</span>
</div>
<div class="star-holder inline">
<div class="star" data-score="[[+rating]]"></div>
</div>
<div class="date inline pull-right">
[[+date:dateAgo]]
</div>
</div>
<p class="comment-text">[[+text]]</p>
</div>
[[+reply_text]]
</div>
</div>
</div>
<!--ec_reply_text <div class="ec-message__reply">[[+reply_author]]<p>[[+reply_text]]</p></div>-->
<!--ec_reply_author <p><strong>[[+reply_author]]</strong></p>-->
Я создал этот чанк также на основе дефолтного (tpl.ecMessages.Row), и попрошу вас делать все внимательно. Осталось вывести наши сообщения вызовом сниппета:
[[!ecMessages?
tpl=`ecMessageTpl`
]]
Отлично! Если рассматривать код вкладки “Отзывы” в целом, то она получилась у меня такая:
<div class="tab-pane" id="reviews">
<div class="comments">
[[!ecMessages?
&tpl=`ecMessageTpl`
]]
</div>
<div class="add-review row">
<div class="col-sm-8 col-xs-12">
<div class="new-review-form">
<h2>Написать отзыв</h2>
[[!ecForm?
&tplForm=`ecFormCustomTpl`
]]
</div>
</div>
</div>
</div>
Попробовали оставить отзыв? Я думаю, что вы догадались, что нам не хватает вывода нашего общего рейтинга вверху страницы:

Для того, чтобы это сделать, я создал простенький чанк (ecBlankTpl):
[[+rating_simple]]
И вызвал в нужном месте сниппет ecThreadRating:
<div class="star-holder inline"><div class="star" data-score="[[!ecThreadRating? &tpl=`ecBlankTpl`]]"></div></div>
Вот и все! Более подробно про компонент вы можете почитать в документации к easyComm. До следующих уроков!
Комментарии (6)
Написать комментарий