modx占位符上的输出修饰符不起作用

时间:2014-01-15 09:50:15

标签: php modx modx-revolution modx-templates

我在模板中有这段代码

[[+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革命2.2.8传统。

类似的问题也发布在modx论坛中。 http://forums.modx.com/thread/85150/output-filter-on-placeholder-problem#dis-post-469615

5 个答案:

答案 0 :(得分:0)

你是否正在以某种方式在另一个条件中做条件?嵌套条件通常会导致这种奇怪的问题。您是否尝试过将您的代码段和占位符输出调用为未缓存?

我也经历了好几次,似乎没有明显的原因,modx输出条件逻辑中有一些未知的魔法。经验教会我尽量避免尽可能多地使用它们。

这很难看,但也许您可以通过在实际占位符中放置您想要输出的内容然后只是按原样打印占位符来解决您的问题。

答案 1 :(得分:0)

不确定为什么这在你的情况下不起作用所以我建议你用一个片段来做。

[[EvalIsShowMore? &val=`[[+isShowMore]]`]]
在EvalIsShowMore片段中添加类似

的内容
<?php

if($val){
  echo 'something';
}else{
  echo 'nothing';
}

答案 2 :(得分:0)

嗯,可能你的占位符位于片段上方! 在Modx输出发生在最后一刻,但逻辑工作一致(级联)。

以下是如何操作的示例:

 [[+isShowMore]]
 [[!yourSnippet]]
 [[+isShowMore:is=`1`:then=`show more`:else=`no`:toPlaceholder=`isShowMore`]]

另一个例子:

 [[+snippet_placeholder1]]
 [[!snippet]]
 [[+snippet_placeholder1:add=`[[+snippet_placeholder2]]`:toPlaceholder=`snippet_placeholder1`]]

答案 3 :(得分:0)

我有这个问题;我的网页使用的是[[*content]]模板。将其更改为[[!*content]]以摆脱缓存解决了我的问题。

仅供参考,使用!调用我的代码段,以便其输出也不会被缓存。

答案 4 :(得分:-1)

尝试使用eq修饰符:

[[+isShowMore:eq=`1`:then=`show more`:else=`no`]]