Модификатор вывода на заполнителе modx не работает
У меня есть этот код в шаблоне
[[+isShowMore:is=`1`:then=`show more`:else=`no`]]
Это печать no
, Но это должно показать show more
в качестве заполнителя isShowMore
установлен в 1
по этой строке кода во фрагменте.
$modx->setPlaceHolder('isShowMore', 1);
Также проверено этим кодом
[[+isShowMore]]
[[+isShowMore:is=`1`:then=`show more`:else=`no`]]
[[+isShowMore]]
печатает 1
но строка с модификатором вывода показывает no
,
Любая подсказка, что здесь не так? Я использую Modx Revolution 2.2.8 традиционный.
Аналогичная проблема также размещена на форуме Modx. http://forums.modx.com/thread/85150/output-filter-on-placeholder-problem
5 ответов
У меня была эта проблема; моя страница использовала шаблон, который имел [[*content]]
, Меняя это на [[!*content]]
избавиться от кеширования решил мою проблему.
К вашему сведению, мой фрагмент вызывается с !
так что его вывод тоже не кэшируется.
Не уверен, почему это не работает в вашем случае, поэтому я рекомендую вам сделать это с помощью сниппета.
[[EvalIsShowMore? &val=`[[+isShowMore]]`]]
в фрагменте EvalIsShowMore положить что-то вроде
<?php
if($val){
echo 'something';
}else{
echo 'nothing';
}
Вы делаете это как-то условно внутри другого? Вложенные условия обычно вызывают странные проблемы такого типа. Вы пытались вызвать как ваш фрагмент, так и вывод заполнителя без кэширования?
Я также испытывал это несколько раз, и, кажется, нет очевидной причины, какой-то неизвестной магии в условной логике вывода modx. Опыт научил меня просто стараться избегать их использования столько, сколько я могу.
Это уродливо, но, возможно, вы могли бы обойти вашу проблему, поместив все, что вы хотите вывести, в фактический заполнитель, а затем просто распечатать заполнитель как есть.
Хм, вероятно, ваш заполнитель находится над фрагментом! В Modx вывод происходит в последний момент, но логика работает последовательно (каскадно).
Вот пример того, как это сделать:
[[+isShowMore]]
[[!yourSnippet]]
[[+isShowMore:is=`1`:then=`show more`:else=`no`:toPlaceholder=`isShowMore`]]
другой пример:
[[+snippet_placeholder1]]
[[!snippet]]
[[+snippet_placeholder1:add=`[[+snippet_placeholder2]]`:toPlaceholder=`snippet_placeholder1`]]
Попробуем модификатор eq:
[[+isShowMore:eq=`1`:then=`show more`:else=`no`]]