Редирект, если в фильтре всего 1 товар

Всем привет!

Фильтрация товаров реализована через mSearch2. По некоторым фильтрам выводится только один товар.

Как сделать 301 редирект на страницу товара, если в фильтре это единственный товар?
Денис
10 мая 2023, 10:22
modx.pro
283
0

Комментарии: 1

Dan
Dan
16 мая 2023, 16:02
0
Вообще запрос возвращает итоговое количество товаров, но не их id. Не уверен, но такой костыль должен сработать.
1) Так как сделать 301 с помощью js нельзя, а придется как минимум юзать php, то создаешь по адресу assets/components/msearch2/js/web/ файл custom.js
2) Копируешь в него код из default.js, находящегося в той же папке
3) Придется каким-то образом выводить id товара в карточке. Например в data-атрибуте или еще как-нибудь.
4) В созданном файле находишь строчку mSearch2.setTotal(response['data']['total']); и добавляешь следующий код после нее:
if (response['data']['total'] == 1) {
   let product_id = //получаешь id единственного товара в результатах. Как получить - зависит от реализации 3-го пункта. 
   $.post(document.location.href, {action: 'sendRedirect', id:product_id}, function(data) {
      console.log(data);             
   });                    
}
5) Создаешь сниппет с любым названием и вызываешь его некешированным на странице каталога, там где вызван mFilter2.
<?php
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
if (empty($_POST['action'])) {return;}

switch ($_POST['action']) {
	case 'sendRedirect':
                $url = $modx->makeUrl($_POST['id']);
		header("Location: ".$url."", true, 301);
                exit();

		break;
}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1