Василий, у меня трабл с getPage плиз хелп

Суть проста, вывожу getResources через getPage внутри чанка есть НЕ кэшируемый сниппет, но каким то раком у ПЕРВОГО элемента он все равно кэшируется.

Происходит сие где то после 60й строки в getPage

$elementObj->process($properties);

И выглядит так (допустим что в чанке самый простой сниппет <? date(H:i:s, time()) ?>) делаем вызов на странице, а после этой строчки делаем дамп, видно что данные первого элемента уже успели где то спарсится, я непонимаю откуда такое поведение =(

09:04:2013
...
[[!getDate]]
...
[[!getDate]]

getPage вызываю с флагом cache=`1`, но не понимаю почему в первом элементе НЕкэшируемые сниппеты таки кэшируются.

Вся надежда на тебя stackoverflow молчит =(
Yaya Yayan
09 апреля 2013, 09:43
modx.pro
1 288
0

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

Василий Наумкин
09 апреля 2013, 16:25
0
Попробуй сделать чанк наоборот, кэшируемым.
    Yaya Yayan
    09 апреля 2013, 16:41
    0
    Делал, я даже этот сниппет выносил в отдельный чанк, с поменткой не кэшировать, все равно тоже самое, причем на любой странице, то-есть первый элемент на каждой странице из getPage если в нем не кэшируемые сниппеты, все равно их кэширует. А у тебя такое поведение прослеживается? может у меня сборка глюкнула… не понимаю как такое может быть просто.
      Мордынский Николай
      09 апреля 2013, 16:50
      0
      если вы вызываете getPage с флагом cache 1 то там как минимум еще 2 параметра которые влияют на результат которые желательно указать(тем более если у вас кэширование в память идет а не в файлы) Посмотрите вкладку параметры в снипете гет пейдж. Там для кэша есть параметры key и hendler поумолчанию они false
      Может в этом дело
        Yaya Yayan
        09 апреля 2013, 18:04
        0
        по умолчанию они

        cache_key default: value of cache_resource_key setting
        cache_handler default:value of cache_resource_handler setting, or xPDOFileCache

        в принципе я пытался задавать, но толку мало, один отвечает всего лишь за директорию кэша, а второй точно не в тему =)
    Василий Наумкин
    09 апреля 2013, 17:49
    0
    Проверил — всё верно, сниппет в чанке полюбому кэшируется.

    Более того, мне на это жаловались, когда я выпускал Tickets, и там же быстро нашли решение:
    [[+id:snippet]]

    То есть, запускать сниппет, как фильтр вывода — тогда он не кэшируется. Но вообще, это изврат, ибо выходит вот такой запуск: сниппет <= чанк <= getresources <= getpage

    Я бы переписал на pdoTools, с получением всей нужной инфы в сниппете, чтобы в чанках только подставлялись пелейсхолдеры. Так быстрее и правильнее.
      Yaya Yayan
      09 апреля 2013, 18:08
      0
      Спасибо Василий, только я немного не понял как это запускать сниппет, как фильтр вывода, вот например мой чанк скажем

      <div class="thumbnail">
      	<div >
      		[[!nodeShop_getAddedItems:gt=`0`:show? &id=`[[+id]]`]] //Вот эта часть у меня почему то кэшируется
      	</div>
      </div>
      UPD, кажется я понял, я должен к какому нибудь параметру дописать как бы кастомный модификатор, который будет моим несчастным сниппетом, верно?
        Василий Наумкин
        09 апреля 2013, 18:10
        0
        Ага.
          Yaya Yayan
          09 апреля 2013, 18:16
          0
          Спасибо огромнейшее, я уже собирался переписывать по своему и чуть было не сошел с ума =), могу чем нибудь отблагодарить?
            Василий Наумкин
            09 апреля 2013, 18:18
            0
            Оформи подписку, прочитай про pdoTools и перепиши всё по-человечески.
              Yaya Yayan
              09 апреля 2013, 18:36
              0
              Первый в моей жизни Донэйт, спасибо еще раз.
                Василий Наумкин
                09 апреля 2013, 18:55
                0
                У меня донейты полезные — можно взамен кучу информации прочитать.

                На здоровье!
                  Yaya Yayan
                  09 апреля 2013, 19:09
                  0
                  Блин, у меня трабл, сделал так как посоветовали, теперь он кэширует все подряд, а при таком вызове [[!+id:snippet]] опять кэшируется первый элемент =(
                    Yaya Yayan
                    09 апреля 2013, 19:25
                    0
                    причем заметил глюк, если вывести [[!+id]] не кэшированный, то у первого ресурса он определяется верно, а у остальных он заменяется на какой то произвольный и потом ваабще не меняется, выводится у всех один и тот же… бред какой то с этим гет пейдж
                      Василий Наумкин
                      09 апреля 2013, 19:26
                      0
                      Это у тебя что то уже наворочено.

                      Смотри вызов:
                      [[!getPage?
                      	&element=`getResources`
                      	&parents=`0`
                      	&tpl=`test`
                      ]]

                      Чанк test:
                      [[+id:snippet]]

                      Сниппет snippet
                      return rand();

                      В итоге:
                        Yaya Yayan
                        09 апреля 2013, 19:30
                        0
                        cache=`1` точно не забыл? потому что я сделал такой же сниппет и тоже вызвал как кэшируемый [[+id:snippet]] он сразу закэшировал все рандомы
                          Василий Наумкин
                          09 апреля 2013, 19:33
                          0
                          А зачем мне cache=`1`?

                          Никогда им не пользовался. Все написал как есть. Ща создам сайтик на modx-test.com — там проверим.
                          Yaya Yayan
                          09 апреля 2013, 19:36
                          0
                          Без cache=`1` то работает на отлично, но только вывод вместо 0.04000 => 3.0000- это же ад на локальном компе от 2 до 3х секунд рендер странички
                          Василий Наумкин
                          09 апреля 2013, 19:46
                          0
                          Ты кэшируешь работу всего getPage и удивляешься тому, что он выводит кэшированные данные?

                          Пиши нормальный сниппет на pdoTools — будет без кэша и быстро. Быстрее я ничего не знаю — сам только им и пользуюсь.

                          На этом сайте, кстати, все комментарии и заметки выводятся без кэша через такой сниппет.
                          Yaya Yayan
                          09 апреля 2013, 19:55
                          0
                          Ну насколько я понял, getPage кэширует не весь свой вывод, а только то что помечено как кэшируемое, тоесть если тэг [[! он его пропускает и отдает дальше по цепочке в парсер, тоесть сам кэш getPage выглядит так: (взято из оригинального кэша)

                          .... .... ....
                            'output' => '<div class="thumbnail">
                          	<div class="prodCounter" id="prod_160">
                          		7
                          	</div>
                          	...
                          </div>
                          
                          <div class="thumbnail">
                          	<div class="prodCounter" id="prod_130">
                          		[[!+id:nodeShop_getAddedItems]]
                          	</div>
                          	...
                          </div>
                          
                          <div class="thumbnail">.... итд
                          Если присмотреться видно что кусок кэша сохранился уже отрендеренный, сфига — я непонимаю

                          Все ресурсы, кроме первого отдали в getPage нативный код, а первый почему то отдает рендер =( почему не понимаю
                          Василий Наумкин
                          09 апреля 2013, 20:20
                          0
                          Не надо тратить время и пытаться запустить и гибко закэшировать вызов сниппета в чанке.

                          Потрать время и напиши уже свой сниппет, который будет сам проверять все значения и отдавать в чанк готовые данные.

                          Сейчас ты просто извращаешься. Если парсер MODX это позволяет — не значит, что так нужно делать.

                          Чанк — это html код, который оформляет результаты работы сниппета. Запускать из него сниппет — извращение.
                          Yaya Yayan
                          09 апреля 2013, 22:33
                          0
                          Потестил на хостинге с кэш 0 открывает за 0.4, с кеш 1 открывает за 0.1, в принципе терпимо, посмотрю как будет под нагрузкой, в конце концов свой сниппет таки напишу. П.С. видимо на виртуальной машине тяжко мускул работает поэтому разница больше.
                          Василий Наумкин
                          09 апреля 2013, 22:54
                          0
                          Не, тут слабое место php и процессор, а не MySql.
                          Yaya Yayan
                          10 апреля 2013, 09:38
                          0
                          Попробую виртуалке больше ресурсов выделить
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      23