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

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

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

В общем, я думаю, понятно, какого типа отзывы у нас будут реализованы. Реализовать их можно разными компонентами (FormIt, Tickets, свой сниппет и т.д.), но реализовать с наименьшими трудовыми затратами нам поможет компонент из репозитория modStore.proEasyComm. Данный компонент платный, но скажу вам, что он стоит своих денег.

После того как мы скачали и установили компонент, давайте посмотрим, что с ним идет в комплекте, а именно 4 сниппета:

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

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

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

Итак, начнем мы с самой формы. Создадим чанк, на основе дефолтного (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>

Попробовали оставить отзыв? Я думаю, что вы догадались, что нам не хватает вывода нашего общего рейтинга вверху страницы:

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

Для того, чтобы это сделать, я создал простенький чанк (ecBlankTpl):


[[+rating_simple]]

И вызвал в нужном месте сниппет ecThreadRating:


<div class="star-holder inline"><div class="star" data-score="[[!ecThreadRating? &tpl=`ecBlankTpl`]]"></div></div>

Вот и все! Более подробно про компонент вы можете почитать в документации к easyComm. До следующих уроков!

Оцените статью:

Проголосовало: 33

Комментарии (0)