Подтвердить что ты не робот

Прогрессивный кэш Joomla не обрабатывает модули с переменным выходом

У меня есть модуль, который позволяет пользователю выбирать категорию, которая затем используется для фильтрации выходных данных компонента. Поэтому, когда пользователь сначала нажимает на элемент меню, в представлении отображаются элементы из всех категорий, затем, когда они нажимают на модуль, к URL-адресу добавляется параметр, такой как & catid = 69 и т.д., И используется для фильтрации отображаемых элементов.

Системный плагин дополняет поведение, регистрируя дополнительный параметр "catid" i.e.

$registeredurlparams->catid = 'INT';
$app->set('registeredurlparams', $registeredurlparams); 

Модуль использует идентификатор категории для создания идентификатора кеша и показывает категории верхнего уровня + подкатегории выбранной категории.

Это прекрасно работает с включенным консервативным кешем в конфигурации системы и включен плагин System Cache.

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

В конце концов я планирую сделать расширение доступным на JED, и я хотел бы быть совместимым со всеми возможными конфигурациями кешей. Есть ли возможность заставить прогрессивный кэш добавить параметры, которые я хочу использовать кэш-идентификатор?

Обходные пути, такие как отправка полного дерева категорий и выполнение его с помощью ajax, не принимаются.

4b9b3361

Ответ 1

Одна вещь, на которую вы могли бы обратить внимание, - это ContentModelArticle в конце. Вы заметите, что cleanCache() принудительно очищает модули содержимого, на которые может влиять сохранение или создание.

protected function cleanCache($group = null, $client_id = 0)
{
    parent::cleanCache('com_content');
    parent::cleanCache('mod_articles_archive');
    parent::cleanCache('mod_articles_categories');
    parent::cleanCache('mod_articles_category');
    parent::cleanCache('mod_articles_latest');
    parent::cleanCache('mod_articles_news');
    parent::cleanCache('mod_articles_popular');
}

Я всегда думал, что это был кувалда /kludge, поскольку он не позволяет веб-мастеру контролировать, делать это или нет, но вы могли бы сделать что-то в соответствии с созданием пользовательской cleanCache() для вашей модели.