Не понимаю, что с переменными в сниппетах стало?! На примере доклистера. Вместо значения получаю имя плейсхолдера?!

До обновления была версия 9.0.4, тогда впервые заметил такое поведение, подумал может в новой версии исправили, а нет, потому решил всё-таки задать вопрос сообществу, так как проблема актуальна.

Делаю проверку на количество страниц ([+tplPublicListTovars.totalPages+]) в результатах доклистера (id=tplPublicListTovars):


Страниц: [+tplPublicListTovars.totalPages+]

[[if? &is=`[+tplPublicListTovars.totalPages+]:=:1` &then=`одна страница`
 &else=`не одна страница`]]


Выводится в браузере:
Страниц: 1
не одна страница


Пробую сравнить две строки своим сниппетом LevIf:
[[LevIf? &v=`[+tplPublicListTovars.totalPages+]` &v2=`1` &result=`равны` &def=`не равны` ]]


Сам сниппет простой:
if ($v==$v2){
 return $result;
}else{
 return $def;
}


Выводит:
не равны


Делаю в сниппете дамп переменной $v и вижу:
string(34) "1"


Замечу, что при этом дамп переменной $v2:
string(1) "1"


Что наводит на мысль, что длина «1» не может быть 34 символа.

Делаю в сниппете substr($v,1) и вижу:
+tplPublicListTovars.totalPages+]


Вместо значения получаю имя плейсхолдера?!
8-\ [confused]

Вопрос, как такое поведение убрать?! Или подскажите куда копать, как обработать кол-во страниц доклистера.

5 комментариев

avatar
попробуйте свой сниппет или if вывести некешированным
avatar
[!if? &is=`[+tplPublicListTovars.totalPages+]:>:1` &then=`БОЛЬШЕ 1` &else=`МЕНЬШЕ 1` !]		

[[if? &is=`[+tplPublicListTovars.totalPages+]:>:1` &then=`БОЛЬШЕ 1` &else=`МЕНЬШЕ 1` ]]	

Страница единственная.

http://hkar.ru/N4z2

Всё также ( Потому у меня modx последнее время как просто редактор ) использую сниппеты и javascript (
Комментарий отредактирован 2017-01-09 12:35:23 пользователем zabudkin
avatar
попробуйте еще так сделать
создайте сниппет, наприер test
в нем
echo !empty($p) ? $p : 'no param'; 

и вызове там же
[!test?p=`[+tplPublicListTovars.totalPages+]`!]
и посмотрите, что покажет
avatar
показываёт-то он то, что надо, суть в том, что почему-то передаётся ИМЯ плейсхолдера, а не его значение (, на входе $p равен [+tplPublicListTovars.totalPages+], а не количеству страниц, вот в чём проблема. Я узнал значение переменной $p путём записи её через file_put_contents в файл и уже в файле увидел, что передалось не значение, а прям тупым текстом: [+tplPublicListTovars.totalPages+]
Комментарий отредактирован 2017-01-09 13:05:17 пользователем zabudkin
avatar
как вариант решения, можно сделать сниппет обертку для доклистера, с вызовом 'api' => 1, получить totalPages, написать логику для этого значения и результат в виде шаблона поместить в плейсхолдер через $modx->setPlaceholder. Плейсхолдер можно будет вызвать вне вашего сниппета обертки в любом месте шаблона страницы.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.