Прогрессивный кэш Joomla не обрабатывает модули с переменным выходом
У меня есть модуль, который позволяет пользователю выбирать категорию, которая затем используется для фильтрации выходных данных компонента. Поэтому, когда пользователь сначала нажимает на элемент меню, в представлении отображаются элементы из всех категорий, затем, когда они нажимают на модуль, к URL-адресу добавляется параметр, такой как & catid = 69 и т.д., И используется для фильтрации отображаемых элементов.
Системный плагин дополняет поведение, регистрируя дополнительный параметр "catid" i.e.
$registeredurlparams->catid = 'INT';
$app->set('registeredurlparams', $registeredurlparams);
Модуль использует идентификатор категории для создания идентификатора кеша и показывает категории верхнего уровня + подкатегории выбранной категории.
Это прекрасно работает с включенным консервативным кешем в конфигурации системы и включен плагин System Cache.
Меня беспокоит, что я не могу заставить его работать с прогрессивным кешем: даже если вывод компонента кэширован правильно, модуль не обновляется (поэтому я никогда не вижу подкатегорий).
В конце концов я планирую сделать расширение доступным на JED, и я хотел бы быть совместимым со всеми возможными конфигурациями кешей. Есть ли возможность заставить прогрессивный кэш добавить параметры, которые я хочу использовать кэш-идентификатор?
Обходные пути, такие как отправка полного дерева категорий и выполнение его с помощью ajax, не принимаются.
Ответы
Ответ 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() для вашей модели.