RSForm! Pro не работает при включенном кэше Joomla

Некоторое время назад столкнулся со странностями на одном сайтов, сделанных на Joomla. Странность заключалась в следующем: на одной из страниц в текст материала была вставлена форма компонента RSForm. Эта форма прекрасно отображалась, но при попытке ее отправить в браузере клиента просто снова открывалась эта же страница, никакого сообщения об удачной отправки данных не появлялось. Письма администратору и клиенту так же не отправлялись, и в БД не было вообще никаких упоминаний о том, что эта форма когда-либо была заполнена.
После небольшого гугления выяснилось, что во всем виновато кэширование. Вот что по этому поводу говорится на официальном сайте компонента RS Form:

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

  • Загружается статья;
  • Плагин RSForm запускается и заменяет плейсхолдер в тексте статьи на соответствующую форму;
  • Система кэширования Joomla «запоминает», как выглядит страница и сохраняет это представление в кэше.
  • При следующих обращениях к этой странице первые два этапа пропускаются, и страница сразу загружается из кэша. Это ускоряет работу сайта, но так же это значит, что страница не будет загружать плагин RSForm. Форма будет отображаться на странице, так как ее внешний вид сохранен в кэше, но ее функционал — нет.

Единственное решение, которое предлагается — отключить кэширование.

Однако, как быть, если совсем отключать кэширование нельзя? Ведь при этом может сильно возрасти нагрузка на хостинг.  Мне известны следующие варианты:

  • Добавить в index.php шаблона строки
    $cache = &JFactory::getCache('com_rsform');
    $cache->clean();

    В таком случае при каждом обращении к сайту будет происходить очистка кэша RSForm. На мой взгляд, это не очень оптимальный метод, ведь форма все рано будет кэшироваться, а потом каш будет очищаться — получаем лишние действия. Еще один минус: этот код сработает только в том случае, когда доступ к форме осуществляется по адресу вида index.php?option=com_rsform.Если на сайте используются SEF-ссылки, этот метод не сработает.

  • Более сложный вариант, найденный мной у «ИТ Осминогов»: в файле /plugins/system/cache.php в каждой функции добавили условие, которое запрещает выполнение, если запрошена страница, содержащая форму (для проверки страницы использовался $_SERVER[‘REQUEST_URI’] ). Этот вариант более предпочтительный, однако требует некоторых знаний PHP и принципов работы CMS Joomla.

3 комментария

  1. Привет меня зовут Дамир, я тоже из города Набережные Челны занимаюсь SEO-продвижением, дизайном макетов сайтов и адаптивной версткой сайтов. Учитывая что ты веб-программист а я веб-дизайнер может пообщаемся вместе или как нибудь скооперируемся, или просто пообщаемся? мой ВК vk.com/damir.gabdrahimov

  2. если форма находится в модуле, то можно отключить кеширование модуля в его настройках.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *