Собственная маршрутизация и pdoPage в mFilter2
Настроил собственную маршрутизацию по инструкции Василия.
У меня mFilter2 выбирает по значению какой-то тв-шке. То есть адрес такой:
Всё прекрасно работает кроме пагинации — при перелистывании не срабатывает фильтр по какому-то одному признаку (тв-шке). То есть сбрасываются все значения и выводится абсолютно весь каталог не учитывая условие по тв-шке.
Пагинация у mFilter2 работает на ajax-е. При нажатии сбрасываются все значения и выводится весь каталог, в то время как при обычном обновлении на F5 страницы
Как решить эту проблему? Или как переключить у mFilter2 pdoPage на не-ajax-овскую?
У меня mFilter2 выбирает по значению какой-то тв-шке. То есть адрес такой:
/catalog/category/strana_franciya
в коде парсится последняя часть урла и выбирается по тв strana все товары со значением franciya. Так у меня выбираются по разным тв-шкам.Всё прекрасно работает кроме пагинации — при перелистывании не срабатывает фильтр по какому-то одному признаку (тв-шке). То есть сбрасываются все значения и выводится абсолютно весь каталог не учитывая условие по тв-шке.
Пагинация у mFilter2 работает на ajax-е. При нажатии сбрасываются все значения и выводится весь каталог, в то время как при обычном обновлении на F5 страницы
/catalog/category/strana_franciya?page=2
то всё срабатывает правильно и фильтруется по нужно тв-шке и выводит вторую страницу.Как решить эту проблему? Или как переключить у mFilter2 pdoPage на не-ajax-овскую?
Поблагодарить автора
Отправить деньги
Комментарии: 10
Можно ли отключить у mFilter2 ajax-пагинацию и оставить стандартную? Или как сохранить параметры поиска в mFilter2 при переключении страниц пагинации?
Или же я не в ту сторону копаю?
Или же я не в ту сторону копаю?
Столкнулся ровно с такой же проблемой. Пока не нашел решения.
Нужно в чанке tpl.mFilter2.outer удалить id=«mse2_pagination»
Получилось убрать ajax-пагинацию просто убрав у списка ul в чанке tpl.mFilter2.outer следующее:
id="mse2_pagination"
Теперь пагинация стала стандартной, с перезагрузкой и добавляет к параметрам в адресной строке и название параметра, например вот так:/catalog/category/strana_franciya?page=2&strana=franciya
Такое ощущение, что ты пропустил вот это место в моей статье:
В твоём случае нужно так же выставить уже выбранную страну в переменные PHP, чтобы pdoPage включил их в ссылку.
Нет разницы, через ajax идёт запрос или нет — пляшет он всё равно от ссылки на страницу, которую формирует pdoPage.
// Осталось выставить нужные переменные в запрос, как будто юзер их сам указал
// Так как это mFilter2 - выставляем выбранный бренд
$_GET['ms|vendor'] = $_REQUEST['ms|vendor'] = $id;
В твоём случае нужно так же выставить уже выбранную страну в переменные PHP, чтобы pdoPage включил их в ссылку.
// если с псевдонимами
$_GET['country'] = $_REQUEST['country'] = $strana;
// или если без них
$_GET['tv|country'] = $_REQUEST['tv|country'] = $strana;
Нет разницы, через ajax идёт запрос или нет — пляшет он всё равно от ссылки на страницу, которую формирует pdoPage.
В том-то и дело, что все нужные мне переменные я выставил в GET PHP, но глюки всё равно имели место…
Вот место как они выставляются у меня:
Вот весь код плагина, если нужно(там у меня идёт выборка тв-шек, их транслитерация, сравнивание транслита с урлом и т.д.):
Вот место как они выставляются у меня:
$_GET[$filter] = $_REQUEST[$filter] = $name;
$_GET['parents'] = $_REQUEST['parents'] = $categoryId;
Но работают они только на первой странице с ajax-ом…Вот весь код плагина, если нужно(там у меня идёт выборка тв-шек, их транслитерация, сравнивание транслита с урлом и т.д.):
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if (count($tmp) >= 2) {
if (!$section = $modx->findResource($tmp[0] . '/')) {
return false;
}
$tmp2 = explode('_', $tmp[2]);
$filter = $tmp2[0];
$name = str_replace('.html', '', $tmp2[1]);
if ($tmp2[1] != $name || (isset($tmp[2]) && $tmp[2] == '')) {
$modx->sendRedirect($tmp[0] . '/' .$filter.'_'.$name);
}
if ($fltr = $modx->getObject('modTemplateVar', array('name' => $filter))) {
$rus = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',' ');
$lat = array('a','b','v','g','d','e','e','gh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','y','y','y','e','yu','ya','a','b','v','g','d','e','e','gh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','y','y','y','e','yu','ya','-');
$in=$modx->runSnippet('msProducts', array('limit'=>'0', 'returnIds'=>'1'));
$in = explode(",", $in);
$tv = $modx->getObject('modTemplateVar', array('name' => $filter));
$tv_name = $tv->get('name');
$tv_desc = $tv->get('description');
$tv_id = $tv->get('id');
$q = $modx->newQuery('modTemplateVarResource');
$q->where(array('tmplvarid' => $tv_id));
$q->where(array('contentid:IN' => $in));
$q->sortby('value', 'ASC');
$q->select(array('DISTINCT modTemplateVarResource.value'));
$q->prepare();
$q->stmt->execute();
$recipe = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$arr = array();
foreach($recipe as $r)
{
$rarr = explode("||", $r['value']);
foreach($rarr as $r2)
{
$arr[] = $r2;
}
}
$arr = array_unique($arr);
if (!empty($arr)){
foreach($arr as $a) {
$latina = str_replace($rus, $lat, $a);
if($latina == $name) {
$name = $a;
$modx->setPlaceholder('pagetitle', $tv_desc.': '.$name);
break;
}
}
}
$_GET[$filter] = $_REQUEST[$filter] = $name;
$categoryId = $modx->findResource($tmp[0] .'/'.$tmp[1].'/');
$cat = $modx->getObject('modResource', $categoryId);
$cattitle = $cat->get('pagetitle');
$caturl = $modx->makeUrl($categoryId);
$_GET['parents'] = $_REQUEST['parents'] = $categoryId;
$modx->setPlaceholder('longtitle', $parentId.$tv_desc.': '.$name);
$modx->setPlaceholder('category.title', $cattitle);
$modx->setPlaceholder('category.link', $caturl);
$modx->setPlaceholder('category.id', $categoryId);
$modx->setPlaceholder('category.fltr', $name);
$modx->sendForward($section);
}
}
Ну значит у меня как-то всё это магически до сих пор само работает на mamaboutique.
Есть и посвежее пример, хоть и без mFilter2, но принцип тот же.
Есть и посвежее пример, хоть и без mFilter2, но принцип тот же.
Нда, магия..
Значит что-то где-то у меня.
Спасибо за помощь, и вообще, СПАСИБО ЗА ПРИМЕР СОБСТВЕННОЙ МАРШРУТИЗАЦИИ!
Если убрать id=«mse2_pagination», то в этом случае к пагинации не подцепляется параметр фильтрации?
Как быть в этом случае? Страница перезагружается и не сохраняет данные
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.