Редирект, если в фильтре всего 1 товар
Всем привет!
Фильтрация товаров реализована через mSearch2. По некоторым фильтрам выводится только один товар.
Как сделать 301 редирект на страницу товара, если в фильтре это единственный товар?
Фильтрация товаров реализована через mSearch2. По некоторым фильтрам выводится только один товар.
Как сделать 301 редирект на страницу товара, если в фильтре это единственный товар?
Комментарии: 1
Вообще запрос возвращает итоговое количество товаров, но не их id. Не уверен, но такой костыль должен сработать.
1) Так как сделать 301 с помощью js нельзя, а придется как минимум юзать php, то создаешь по адресу assets/components/msearch2/js/web/ файл custom.js
2) Копируешь в него код из default.js, находящегося в той же папке
3) Придется каким-то образом выводить id товара в карточке. Например в data-атрибуте или еще как-нибудь.
4) В созданном файле находишь строчку mSearch2.setTotal(response['data']['total']); и добавляешь следующий код после нее:
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;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.