Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Переход к отзывам о товаре с категории


Recommended Posts

Всем привет:wink:
Нужна помощь в реализации одного момента
Мне нужно, что бы с категории человек мог нажать на отзывы и его перекидало на страницу товара с этими отзывами
вот пример как сделано на Розетке:

Спойлер

image.png.66d732a8c9317a9ce618e6f50ca42c5a.png


то-есть там рейтинг кликабельный и оно сразу кидает в карточку товара к отзывам

у меня же все аналогично(рейтинг есть в категории и подсчет отзывов тоже), но нет возможности нажать на этот рейтинг да бы сразу перейти к отзывам 

Спойлер

image.png.99a1259385a221082f90a2225640f189.png

можно-ли реализовать?
OC 2.3

буду благодарен хоть какой-то подсказки)
Всем добра и счастья!

Змінено користувачем sasha3337774
Надіслати
Поділитися на інших сайтах

Да, элементарно. Где-нибудь в tpl товара надо вот такое вставить.
 

$(window).load(function() { // как только вся страница загружена
  
    // проверяем GET параметр tab и заполняем js переменную им.
	var tab_open = '<?= isset($_GET['tab']) ? $_GET['tab'] : '' ?>';
	
    // если get параметр не пустой - вычисляем докуда скроллить, скроллим и по окончании скрола 
  	// нажимаем на этот таб, чтобы его открыть.
	if (tab_open) {
		setTimeout(function () { // небольшая задержка..
			let sc = $('a[href="#'+tab_open+'"]');
			let dn = sc.offset().top - 50;
			$('html, body').animate({scrollTop: dn}, 1000, function() {
				$('a[href="#'+tab_open+'"]').trigger('click'); // открываем таб
			});
		}, 300);
	}	
})

И в категории в рейтинге сделать ссылку на этот товар с добавкой '&tab=tab-review'

Надіслати
Поділитися на інших сайтах

Эту ссылку с добавкой, конечно, лучше сформировать в контроллере категории, если чпу включено.
Примерно так:

$href_tab = $this->url->link('product/product', 'product_id=' . $product_id . '&tab=tab-review');

и ее проставить в плитке товара там где рейтинг, или на саму цифру поставить, или добавить еще слово "отзывов".

Змінено користувачем Prooksius
Надіслати
Поділитися на інших сайтах

кстати, чтобы автоматом сформировать фразу "1 отзыв", "2 отзыва", "5 отзывов".
 

function plural($n) {
  return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
} 

$reviews_array = array('отзыв', 'отзыва', 'отзывов');  // значения слова при кол-ве 1, 2, 5
$reviews_count = 21; // реальное количество отзывов

$text_reviews = $reviews_count . ' ' . $reviews_array[plural($reviews_count)];

// получим '21 отзыв'

 

Змінено користувачем Prooksius
Надіслати
Поділитися на інших сайтах

@Prooksius огромное спасибо за Ваш труд!
вот единственное не понял, как сформировать ссылку с добавкой '&tab=tab-review'

Надіслати
Поділитися на інших сайтах

Можно через hash, например, #reviews в ссылке. А на странице товара скрипт.

$(document).ready(function() {
    if (window.location.hash == '#reviews') {
        $('a[href=\'#tab-review\']').trigger('click');
        $('html, body')
            .animate({
                scrollTop: $('#tab-review').offset().top - 200
            }, 800);
        return false;
    }
});

 

Надіслати
Поділитися на інших сайтах

Вот в контроллере категории заполняется массив всех товаров страницы:

$data['products'][] = array(
	'product_id'  => $result['product_id'],
	'thumb'       => $image,
	'name'        => $result['name'],
	'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
	'price'       => $price,
	'special'     => $special,
	'tax'         => $tax,
	'minimum'     => ($result['minimum'] > 0) ? $result['minimum'] : 1,
	'rating'      => $rating,
	'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);

Можно добавить еще один элемент 'href_tab'

$data['products'][] = array(
	'product_id'  => $result['product_id'],
	'thumb'       => $image,
	'name'        => $result['name'],
	'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
	'price'       => $price,
	'special'     => $special,
	'tax'         => $tax,
	'minimum'     => ($result['minimum'] > 0) ? $result['minimum'] : 1,
	'rating'      => $rating,
	'href_tab'	  => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . '&tab=tab-review'),
	'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);

и в tpl уже берешь ее и делаешь

<a href="<?php echo $product['href_tab'] ?>">твоя ссылка на отзывы</a>

 

Надіслати
Поділитися на інших сайтах

все, понял, огромное спасибо!
буду сейчас делать

Надіслати
Поділитися на інших сайтах

8 минут назад, ibond сказал:

Можно через hash, например, #reviews в ссылке. А на странице товара скрипт.

да, или так

 

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

Змінено користувачем Prooksius
Надіслати
Поділитися на інших сайтах

11 минут назад, ibond сказал:

Можно через hash, например, #reviews в ссылке. А на странице товара скрипт.

 

Не можно, на нужно именно только так!

  • +1 1
Надіслати
Поділитися на інших сайтах

9 минут назад, SooR сказал:

нужно именно только так!

почему?

ну взять не tab, а что-то посложнее, чтобы ни с чем не совпадало..

Змінено користувачем Prooksius
Надіслати
Поділитися на інших сайтах

7 минут назад, Prooksius сказал:

почему?

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

Второй момент, это использование $_GET прямо в шаблоне. Все комьюнити борется за то, чтобы в шаблонах использовать только данные из контроллера с минимальным усложнением всем жизни, вы же прямо рекомендуете нарушать это правило. Также ваш пример не будет работать на opencart 3, думаю, понятно.

И также вы нагружаете метод rewrite обработкой бесполезной get переменной.

  • +1 1
Надіслати
Поділитися на інших сайтах

2 минуты назад, SooR сказал:

Второй момент, это использование $_GET прямо в шаблоне.

да, я просто для скорости объяснения сделал так, потому что тогда тут еще надо полстраницы контроллера описывать))
Конечно лучше такие вещи делать в контроллере.
Это ж как пример..

  • +1 1
Надіслати
Поділитися на інших сайтах

2 минуты назад, Prooksius сказал:

вы прям идеалист)

Да нет :) усложнять не люблю. 

 

Надіслати
Поділитися на інших сайтах

Ваш пример хороший, но я не стал именно упираться в сео, но всегда реализую такой метод. Но @SooR все правильно сказал.

  • +1 1
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.