Стандартная система отзывов не удовлетворяет по причине отсутствия CAPTCHA, контроля за спамом и наличия обязательного указания e-mail (не каждый захочет светить мыло при добавлении коммента). В принципе все это можно вылечить порывшись на форумах, видел некоторые платные решения, но все же решили обойтись без танцев с бубном и уйти в сторону компонента jcomments. Он и так используется у нас на сайте в связке с компонентом K2 и в стандартных материалах для комментирования статей и обзоров, удобен для модерации, имеет гибкие настройки. Да и общий стиль сайта хочется сохранить использовав глобально один компонент, а не разводить винегрет.
Для решения данного вопроса воспользовались плагином com_jshopping.plugin.php (
http://joomlaforum.ru/index.php?action=dlattach;topic=237810.0;attach=453021589) - Распаковать и скопировать в /components/com_jcomments/plugins/ а так же заменой содержимого файла /components/com_jshopping/templates/default/product/review.php, следующим кодом:
<?php
if ($this->allow_review){
$comments = JPATH_SITE.'/components/com_jcomments/jcomments.php';
if (file_exists($comments)) {
require_once($comments);
print JComments::showComments($this->product->product_id, 'com_jshopping', $this->product->name); }
}
?>
В этой связке форма комментариев jcomments заменяет стандартные отзывы и все работает чудесно. Далее столкнулись с проблемой счетчика количества отзывов в списке товаров категории, так как он считает только стандартные отзывы. Лечится просто: в файле /components/com_jshopping/templates/default/list_products/product.php заменяем часть кода внутри <div class="count_commentar">
<?php print sprintf(_JSHOP_X_COMENTAR, $product->reviews_count);?>
на это:
<?php
$comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
if (file_exists($comments)) {
require_once($comments);
$options = array();
$options['object_id'] = $product->product_id;
$options['object_group'] = 'com_jshopping';
$options['published'] = 1;
$count = JCommentsModel::getCommentsCount($options);
echo $count ? ('Отзывов: ('. $count . ')') : 'Нет отзывов';
}
?>
Этот же код надо заменить и в /components/com_jshopping/templates/default/products/listproducts.php (список сопутствующие товары) и в /components/com_jshopping/templates/default/search/result.php (список товаров результата поиска)
Осталась последняя проблема - звезды рейтинга. Во-первых они используются у нас как часть общего дизайна сайта, фактор доверия к товарам у посетителей и как расширенный сниппет в выдаче поисковиков. Они так же привязаны только к стандартным отзывам но хотелось бы сохранить данный элемент. Для этого я поступил совершенно варварским способом и в файл /components/com_jshopping/templates/default/product/review.php, помимо ранее вставленного кода формы комментариев jcomments втулил следующее:
<!--Оценить товар-->
<hr/>
<form action="<?php print SEFLink('index.php?option=com_jshopping&controller=product&task=reviewsave');?>" name="add_review" method="post" onsubmit="return validateReviewForm(this.name)">
<input type="hidden" name="product_id" value="<?php print $this->product->product_id?>" />
<input type="hidden" name="back_link" value="<?php print $_SERVER['REQUEST_URI']?>" />
<div style="display:none;">
<noindex>
<input type="text" name="user_name" id="review_user_name" class="inputbox" value="review"/>
<input type="text" name="user_email" id="review_user_email" class="inputbox" value="review@test.com" />
<textarea name="review" id="review_review" class="jshop inputbox">review</textarea>
</noindex>
</div>
<?php for($i=1; $i<=$this->stars_count*$this->parts_count; $i++){?>
<input style="margin:5px 0;" name="mark" type="radio" class="star {split:<?php print $this->parts_count?>}" value="<?php print $i?>" <?php if ($i==$this->stars_count*$this->parts_count){?>checked="checked"<?php }?>/>
<?php } ?>
<?php print $this->_tmp_product_review_before_submit;?>
<input type="submit" class="button validate" value="<?php print 'Оценить товар'?>" />
</form>
<!--Оценить товар-->
То есть у меня на странице используются комментарии jcomments и стандартная форма отзывов, поля для заполнения которой скрыты для пользователя и заполнены левыми данными. Таким образом со стандартной формы остались только звезды голосования.
Способ не самый лучший, хотелось бы уйти в сторону плагина extravote (
http://joomlamaster.org.ua/plaginy/40-plagin-otsenki-materialov-joomla-extravote-30.html) Но рецепта по его связке с JoomShopping пока не нашел. В настройках плагина extravote есть возможность включить в текст материала доп.голосование вставив код {extravote #}, где # это id голосования. Все мои попытки внедрить данное решение на страницы товаров магазина заканчивались выводом текста вроде {extravote 45}. То есть код не обрабатывается плагинами. Подскажите, кто знает решение данного вопроса. Буду очень признателен, спасибо заранее ))