Дешифратор коротких URL-адресов   •   Online-инструменты
127 просм
0 комм
Поделиться:

Подгрузка отзывов о товаре вместо стандартной пагинации в 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"];

Сохраняете изменения и отправляете файл обратно на сайт. На этом все. Текст в ссылках вы можете заменить на свой, но обратите внимание, что у последней идет автоматическое склонение в зависимости от количества остаточных отзывов.

0
комментарий
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Имя и фамилия
E-mail
Текст комментария