eventsCalendar2 + Fenom = глюки

Здравствуйте.

Использую на сайте, на котором все шаблоны выполнены через Fenom, — eventsCalendar2. Вывод некешированный. Пробовал и через $modx, и через $_modx. При переключении месяцев вываливает всю страницу на место календаря, вместо того, чтобы заменить блок календаря со старым месяцем на новый.

При вызове некешированного eventsCalendar2 через MODX тег сниппета — всё норм. Если кешированным вызываем — такая же беда, как и в случае с вызовом через Феном.

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

Пост скорее всего только для Василия, но если кто-то сможет посоветовать решение, я буду рад этому.
Павел Гвоздь
27 августа 2015, 13:18
modx.pro
4 559
0
Поблагодарить автора Отправить деньги

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

Василий Наумкин
27 августа 2015, 16:23
+2
eventsCalendar2 сам ловит и отвечает на ajax запросы, так что кэшированным его вызывать вообще нельзя.

А так, он очень старенький и его нужно переписывать — у меня пока ни времени, ни желания. Поэтому пока придётся вызывать его как тег MODX, не зря же такая возможность при использовании Fenom предусмотрена.

И вообще, я с понедельника в отпуске на 2 недели и уже вообще ничего делать не хочется!
    Павел Гвоздь
    27 августа 2015, 16:24
    +2
    Удачного отпуска! :)
      Василий Наумкин
      27 августа 2015, 16:59
      3
      +2
      В общем, этот конкретный недостаток — суть продолжение достоинств Fenom.

      Все ajax запросы eventsCalendar2 отправляются на текущую страницу, где сниппет должен их словить, обработать, выдать ответ и прервать работу парсера. В общем, как написано в этой статье.

      И всё отлично работает, за исключение того, что при компиляции шаблона Fenom он прописывает вывод всех данных не в переменную, которую покажет в конце, а выводит их сразу через echo.

      Соотвественно, в ответ ajax запроса попадают все сниппеты, обработанные до eventsCalendar2 — и ты видишь их на странице. Это косяк старой архитектуры eventsCalendar2, ведь по уму нужно бы отправлять все запросы на отдельный коннектор или плагин, как в mFilter2 и miniShop2.

      Но можно выйти из ситуации и сейчас:
      1. Нужно вызывать eventsCalendar2 в шаблоне, перед всеми другими сниппетами, и сохранять его вывод в переменную.
      2. А переменную уже выводить на странице. Но не в контенте, а тоже в шаблоне или в чанке, потому что ресурс обрабатывается перед шаблоном и переменная там еще будет пуста.

      Тогда при обычной загрузке страницы сниппет отработает, данные сохранятся в переменную и выведутся в нужном месте страницы. А при ajax запросе сниппет отреагирует первым и выдаст чистый ответ, без других сниппетов.

      Примерно так:
      {set $calendar = $_modx->runSnippet('!eventsCalendar2', [
      	...
      ])}
      
      {$calendar}

      Кстати говоря, можно так сохранять и вывод других сниппетов, чтобы вызывать их в одном месте, а показывать в другом.
        mngatoff
        20 октября 2016, 18:45
        0
        Василий, приветствую. До улучшений pdopage можно было так:
        &ajax=`1`
        $.get('?page=3', function(response) {
         своя логика без переделывания стандартного скрипта
        }
        щас response естесственно всю страницу отдает при включенном fenom

        какие-то аналогичные способы есть для подобных штук в новых реалиях?
          Александр Иванов
          08 мая 2017, 19:39
          0
          Василий, извините что навязываюсь с вопросом.
          Как вы думаете в чём может быть проблема если eventsCalendar2 на всех страницах кроме главной нормально работает. А на главной site.eu вечная загрузка.
          Есть какие-нибудь идеи с чем это может быть связано?
            Александр Иванов
            08 мая 2017, 20:43
            0
            Сорри за беспокойство!
            В моём случае это был лишний слеш символах.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6