mFilter2 как убрать параметры ysclid (и другие) из ссылок и как заставить работать постраничную навигацию и кнопку "Показать еще"

Вчера пообещал немного написать про два вопроса, возникающие при работе mFilter:
1. Лишние параметры типа ysclid в постраничной навигации.
2. Как заставить совместно работать и постраничную навигацию и кнопку «Показать еще» при использовании mFilter2 в режиме ajaxMode = button.

Все, что я пишу ниже, не уверен, что относится к последней версии mSearch2. На моем сайте все механизмы работают, есть custom код в компонентах и обновляться я не хочу)))

Лишние параметры в постраничной навигации



Часто на нашем сайте в постраничной навигации появляются ссылки вида ?page=2&ysclid=длинная_строка
Совместно с ysclid лезут и utm метки и что-нибудь еще бывает.

Сначала не мог понять, что за история, потом чуть разобрался.

Теория: webmaster.yandex.ru/blog/novyy-parametr-dlya-bolee-tochnogo-raspoznavaniya-poiskovykh-fraz-v-metrike

Итог: браузеры стали ограничивать использование сторонних cookie, поисковики взамен стали добавлять параметры в url вашего сайта при переходе на него.

Так где ж косяк?
Дело в том, что эти параметры потом попадают в куки, и тут mSearch не совсем корректно работает на мой взгляд.

Смотрим файл /assets/components/msearch2/action.php, в районе 120-130 строки есть такая запись:
$_GET = $_REQUEST;
Весь $_REQUEST копируется в $_GET. Вот только $_REQUEST включает в себя и $_COOKIE…

В общем я сделал так:
$_GET = array_diff_assoc($_REQUEST, $_COOKIE);


Как заставить совместно работать постраничную навигацию и кнопку «Показать еще» в связке сниппетов pdoPage + mFilter2 в режиме ajaxMode = button



В общем если мы вызываем mFilter2 с пагинатором pdoPage и хотим, чтобы была и постраничная навигация и кнопка «Показать еще», то не все сразу заработает.

Итак, скопируем файл /assests/components/msearch/js/web/default.js куда-нибудь (если вы это еще не делали ранее), не забудем указать этот новый файл в настройках компонента и поехали:

1. Добавим кнопку «Показать еще» в шаблона сайта, ну например, перед блоком с постраничной навигацией #mse2_pagination. У этой кнопки должен быть класс ".btn_more" (или укажите другой в js скрипте, в mSearch2.options.more).

2. В функции handlePagination (прим. 170 строка) в начале внутри блока switch… case 'button' есть строки
// this.pagination.hide();
// Add more button
// this.results.after(this.options['more_tpl']);
комментируем их, не будем скрывать блок пагинации и добавлять кнопку (хотя наверное можно кнопку и скриптом добавлять… но я руками добавил).

3. Далее по всему файлу ищем код, который при режиме ajaxMode = button удаляет параметр page. Он встречается в нескольких местах, я его закомментировал:

1. Внутри handlePagination / switch / case 'button'
//if (mse2Config['page'] > 1) {
//    mse2Config['page'] = '';
//    mSearch2.Hash.remove('page');
//   mSearch2.load();
//}

2. Внутри handleSort
if (mse2Config['page'] > 1 && (mse2Config['mode'] == 'scroll' || mse2Config['mode'] == 'button')) {
    //mse2Config['page'] = '';
    //delete(params['page']);
}

3. Внутри handleTpl
if (mse2Config['page'] > 1 && (mse2Config['mode'] == 'scroll' || mse2Config['mode'] == 'button')) {
    //mse2Config['page'] = '';
    //delete(params['page']);
}

Внутри handleLimit
if (mse2Config['page'] > 1 && (mse2Config['mode'] == 'scroll' || mse2Config['mode'] == 'button')) {
    //mse2Config['page'] = '';
    //delete(params['page']);
}
В общем как-то так. Решение предоставляется «как есть», если что-то сломается — я не виноват :)
Наумов Алексей
21 февраля 2024, 11:10
modx.pro
3
1 113
+12

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

Дмитрий
22 февраля 2024, 15:07
0
Спасибо, интересная заметка.

В общем я сделал так:
$_GET = array_diff_assoc($_REQUEST, $_COOKIE);
Единственное, в url в пагинации остается параметр limit=

*?page=3&limit=36

Но при переходе он очищается из url.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1