We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32725
    • 107 Posts
    Есть страница, на которой 2 сниппета. snip1 - кешируемый устанавливает плейсхолдер. Например:
    $modx->setPlaceholder('test', $test);

    Второй сниппет - snip2 проверяет этот плейсхолдер и некоторые параметры, которые передаются через $_GET.

    так как snip2 проверяет $_GET, то кешировать я его не могу (иначе переменные тоже кешируются), но если я не кеширую snip2, тогда он не получает плейсхолдер от snip1 undecided

    Кто подскажет грамотный выход из ситуации?
    Пока что, как временное решение, я просто не кеширую эту страницу.

    Хотелось бы чтоб страница кешировалась и сниппеты вызывались как [[snip1]] [!snip2!].
      My portfolio
      Самурай без меча подобен самураю с мечом, только без меча.
      • 32725
      • 107 Posts
      Так никто и не ответил. Зато я придумал решение, вдруг кому-то пригодится.

      Добавляем 3й сниппет (кешируемый), который получает плейсхолдер и выводит его.
      Этот плейсхолдер передаем второму сниппету, как параметр

      
      [[snip1]] <!-- Устанавливает плейсхолдер -->
      
      [!snip2? &val=`[[snip3]]`!] <!-- Получаем плейсхолдер в сниппете snip3 и передаем его в snip2 -->
      
        My portfolio
        Самурай без меча подобен самураю с мечом, только без меча.
        • 1611
        • 591 Posts
        странное поведение MODx...
        © «А можеть есть способ лучше?»

        Интересно, из-за чего так?
          • 32725
          • 107 Posts
          Из-за чего так.. сначала думал, что какой-то баг.
          Потом решил, что все-таки нет.

          Так как snip1 кешируется, то исполняется он только после очистки кеша. А в большинстве случаев, он просто выводит то, что сохранено в кеше и ничего больше не делает. Естественно плейсхолдер он тоже не устанавливает!
          Если добавить snip3, то после очистки кеша исполнятся все сниппеты (и установится плейсхолдер) и snip3 вернет значение плейсхолдера. Потом все закешируется и далее snip1 не будет выводить ничего, а snip3 будет выдавать значение плейсхолдера из кеша. В итоге все отлично работает.

          Способ получше - это первое, что мне пришло в голову:
          [!snip2? &val=`[+placeholder+]`!]

          Утитывая все вышенаписаное и то, что [+placeholder+] должно кешироваться, все должно работать. Но как-то оно у меня через раз срабатывает :-/
          Нужно будет еще разобраться.
            My portfolio
            Самурай без меча подобен самураю с мечом, только без меча.
            • 1611
            • 591 Posts
            занятно. спасибо что объяснили
              • 26586
              • 184 Posts
              В репозитории есть плагин который позволяет управлять кешированием, не просто документа, а в зависимости еще и от каких-то парметров.
              Например кешировать для различных групп вебюзверей по разному. Или для разных значений _GET[hz]

              parallelpagecache