Подгрузка отзывов о товаре вместо стандартной пагинации в OpenCart 2.3.*
OpenCart – один из популярных бесплатных движков для создания своего интернет-магазина и вообще веб-сайта в принципе. Для этой CMS существует большое количество как платных, так и бесплатных дополнений. Я тоже решил привнести свой вклад в процветание этого движка и рад представить вам (полноценным дополнением это назвать трудно) небольшую функцию, с помощью которой вы сможете убрать стандартную навигацию по отзывам в ваших товарах и организовать их подгрузку нажатием на ссылку.
Итак, как вы поняли из заголовка, работа скрипта тестировалась на OpenCart версии 2.3.0.2. Работа в других версиях возможна, но не гарантирована. Все изменения я буду показывать на примере стандартной темы «default». Вы проделываете все по аналогии, но только с вашей темой. Поехали!
1. Подключитесь к вашему сайту по FTP.
2. Откройте файл product.tpl в папке /catalog/view/theme/default/template/product/. В нем (примерно в самом конце) вы удаляете код, похожий на этот:
$('#review').delegate('.pagination a', 'click', function(e) {
e.preventDefault();
$('#review').fadeOut('slow');
$('#review').load(this.href);
$('#review').fadeIn('slow');
});
3. Здесь же, вы находите div:
<div id="review"></div>
И сразу после него вставляете:
<?php
function declOfNum($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $number." ".$titles[($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)]];
}
$numb_reviews = $all_numb_reviews - 5;
if($numb_reviews > 0) {
$whole_page = intval($numb_reviews / 5); // Считаем целые страницы
$residue = $numb_reviews % 5; // Считаем остаток
for($i = 1; $i <= $whole_page; $i++) {
$i = $i + 1;
if($i == 2) {
$style_link = "display: block";
} else {
$style_link = "display: none";
}
echo <<<HTML
<a href="javascript://" data-item="{$i}" class="get_reviews" style="{$style_link}">Подгрузить еще 5 отзывов</a>
HTML;
}
if($residue > 0) {
$i = $whole_page + 2;
$name_link = declOfNum($residue, array("отзыв", "отзыва", "отзывов");
echo <<<HTML
<a href="javascript://" data-item="{$i}" class="get_reviews" style="display: none">Подгрузить еще {$name_link}</a>
HTML;
}
echo <<<HTML
<a href="javascript://" class="get_reviews" style="display: none"></a>
HTML;
}
?>
</div>
<script>
$(".get_reviews").on("click", function() {
var item_id = $(this).attr("data-item");
$.get("index.php?route=product/product/review&product_id=<?php echo $product_id_fix; ?>&page="+item_id, function(data) {
$("#review").append(data);
});
});
$(".get_reviews").on("click", function() {
$(this).hide();
$(this).next().show();
});
</script>
Сохраняете изменения и файл отправляете обратно на сайт. Здесь непосредственно мы выводим (в случае существования излишних комментариев) ссылки для подгрузки информации. Визуального стиля у ссылок нет – его вы настраиваете сами. Для этого цепляйтесь за класс «get_reviews».
4. Далее открываете файл review.tpl в этой же папке (/catalog/view/theme/default/template/product/) и в нем удаляете строку:
<div class="text-right"><?php echo $pagination; ?></div>
С этим файлом все. Сохраняете его и посылаете обратно на сайт.
5. Завершающий шаг. Открываете файл product.php в папке /catalog/controller/product/. Здесь, сразу после строки:
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
вы вставляете:
$data["all_numb_reviews"] = (int)$product_info["reviews"];
$data["product_id_fix"] = $this->request->get["product_id"];
Сохраняете изменения и отправляете файл обратно на сайт. На этом все. Текст в ссылках вы можете заменить на свой, но обратите внимание, что у последней идет автоматическое склонение в зависимости от количества остаточных отзывов.