Решить проблему кеша мусора в GetPageNavStringEx

Рейтинг: 72.6631  
Внедрено
Предложил Пользователь 11948 08.01.2012 02:27:14

Решить проблему кеша мусора в GetPageNavStringEx

Кратко изложить не поулчится, но каждый разработчик точно от этого пострадает :) так что - плюсуем.

Итак, внутри кеша, часто делаем такую конструкцию:
if ($arParams['PAGE_COUNT']>0)
   $arResult['NAV_STRING'] = $rsElements->GetPageNavStringEx($navComponentObject, '', $arParams['PAGER_TEMPLATE'], false);


А теперь представим, что на наш пока еще не кешированный список зашли с какой-то ссылкой, например, r1=yandex&r2=direct.

Что сделала постраничка? Она засчитала r1=yandex&r2=direct как важные параметры и КАЖДОМУ номеру страницы в постраничке подмешала данные параметры. Получили
PAGEN_1=1&r1=yandex&r2=direct
PAGEN_1=2&r1=yandex&r2=direct
PAGEN_1=3&r1=yandex&r2=direct
.... (1)

Теперь все это дело кешируется, и что мы получаем? Что любой пользователь, попавший на список БЕЗ r1=yandex&r2=direct в СВОЕЙ ссылке, в ссылках получит блок (1). Получается, рекламная кампания r1=yandex&r2=direct испорчена совершенно левыми посетителями.

Как решить эту проблему, я даже не знаю... передавать GetPageNavStringEx значимые параметры, и, если они переданы, учитывать только их?

Рейтинг: 0  
Пользователь 14686 09.01.2012 20:25:14
Сейчас уже давно не окрывал редактор, но пару раз сталкивался, когда произвольные параметры из URL подмешиваются в идентификатор кеша.

Имхо, для таких вещей нужно делать настройку с перечислением значимых параметров.
Рейтинг: 0  
Пользователь 35052 14.05.2015 14:15:55
Полностью поддерживаю идею. Бывает так что попадает что-то вообще левое, которое на функционал влияет.

Можно, например, добавить параметр для всех компонентов PAGER_PARAMS -  в котором бы был массив параметров, которые могут присутствовать в постраничке текущего компонента.
Если не пустой параметр, то использовать его убирая все лишнее.

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