Modx $_SESSION
Здравствуйте.
Непонятная для меня проблема c $_SESSION в MODx revo 2.2.14 — 2.3.1
Вот не большой сниппет, который получает рандомно отсритрованные id нужных ресурсов, но во избежание повтора id использую сессию, следующим образом:
Непонятная для меня проблема c $_SESSION в MODx revo 2.2.14 — 2.3.1
Вот не большой сниппет, который получает рандомно отсритрованные id нужных ресурсов, но во избежание повтора id использую сессию, следующим образом:
<?php
$output = $modx->runSnippet('pdoResources',array(
'includeTVs' => 'place_banner',
'parents' => '3',
'depth' => '2',
'limit' => '0',
'sortby' => 'RAND()',
'returnIds' => '1',
'where' => '{"template:=":"5", "place_banner:!=":""}'
));
$outputArray = explode(',', $output);
echo("<script>console.log('IN SES: " . $_SESSION['current_adimg'] . "');</script>");
echo("<script>console.log('IN ARR: " . $outputArray[0] . "');</script>");
if ( empty( $_SESSION['current_adimg'] ) ) {
$_SESSION['current_adimg'] = $outputArray[0];
echo("<script>console.log('ON EMPTY SES: " . $_SESSION['current_adimg'] . "');</script>");
$modx->setPlaceholder($toPlaceholder, $_SESSION['current_adimg']);
return;
}
else if ($_SESSION['current_adimg'] == $outputArray[0]) {
$_SESSION['current_adimg'] = $outputArray[1];
echo("<script>console.log('ON REP SES: " . $_SESSION['current_adimg'] . "');</script>");
$modx->setPlaceholder($toPlaceholder, $_SESSION['current_adimg']);
return;
}
else {
$_SESSION['current_adimg'] = $outputArray[0];
echo("<script>console.log('JUST SES: " . $_SESSION['current_adimg'] . "');</script>");
$modx->setPlaceholder($toPlaceholder, $_SESSION['current_adimg']);
return;
}
Так вот, проблема состоит в том, что после сохранения в сессию одного значение на входе у сессии уже совсем другое, как будто снипет сработал невидимо второй раз. Комментарии: 12
Уберите echo. Возможно в этом проблема.
rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/snippets/how-to-write-a-good-snippet#HowtoWriteaGoodSnippet-DonotPrint
rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/snippets/how-to-write-a-good-snippet#HowtoWriteaGoodSnippet-DonotPrint
В 2.3.1 писали, что должен быть
return "";
А зачем в каждой секции if стоит return? Достаточно одного в самом конце сниппета.
Еще спрошу на всякий случай, а ты свой сниппет вызываешь кэшированным? Чтоб все эти вычисления работали он должен быть некэшируемым.
Вызываю сниппет не кешируемым, echo убрать не помогает никак, ну а return так поставил т.к. уже в голову не приходит от чего такое поведение $_SESSION, хотя и его перестановка в конец, как написал Сергей не помогла.
Ради теста, можете сделать то же самое просто подставив массив чисел и делать suffle, по алгоритму random without repeating(для чего я и использую сессию) обрабатывать его в итоге увидите, что в сессию на входе поступает не то на чем скрипт остановился(и остановился ли?).
причем с $_COOCKIE точно такая же ситуация…
Так вот, проблема состоит в том, что после сохранения в сессию одного значение на входе у сессии уже совсем другое, как будто снипет сработал невидимо второй раз.Я так думаю, что сниппет действительно срабатывает 2 раза — это самое логичное объяснение.
Да ето действительно так, проверил — на тестовом сайте все ок. Как в других шаблонах сайта. Т.е только в шаблоне галавной сайте, где етот сниппет и нужен такое происходит.
Определил что проблему создает getImageList — сниппет вывода значений MIGX. Если убрать его вызов все работает как надо. Можно как то выводить MIGX tv с помощю pdoPage\Resources например, вместо getImageList?
Определил что проблему создает getImageList — сниппет вывода значений MIGX. Если убрать его вызов все работает как надо. Можно как то выводить MIGX tv с помощю pdoPage\Resources например, вместо getImageList?
UPD:
Дальнейшее исследование определило что в чанке-шаблоне для getImageList ету проблему создает pthumb.
Что именно в самом pthumb является причиной установить не удалось.
Дальнейшее исследование определило что в чанке-шаблоне для getImageList ету проблему создает pthumb.
Что именно в самом pthumb является причиной установить не удалось.
Спасибо всем за ответы.
Отдельное спасибо Василию — Вы великий человек раз находите время на ответы рядовым пользователям:)
Пришлось избавится от pThumb, который в начале казалось не при чем.
Отдельное спасибо Василию — Вы великий человек раз находите время на ответы рядовым пользователям:)
Пришлось избавится от pThumb, который в начале казалось не при чем.
Да не за что.
Интересно, что такого внутри pThumb, что он так может помешать.
Интересно, что такого внутри pThumb, что он так может помешать.
для меня там довольно сложный код, да и дебажить ето заняло бы прилично времени у меня, но в любом случае из-за него некэшируемый сниппет с сессией или куки выполняется 2 раза подряд.
Заменил на phpThumbOn — все работает отлично, странно конечно что его выпилили из официального репозитория — вроде как лучший в своем роде.
Заменил на phpThumbOn — все работает отлично, странно конечно что его выпилили из официального репозитория — вроде как лучший в своем роде.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.