2

我在模板中有这段代码

[[+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

4

5 回答 5

1

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

仅供参考,我的代码片段正在被调用,!因此它的输出也不会被缓存。

于 2017-11-04T05:19:58.947 回答
0

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

我也经历过几次,似乎没有明显的原因,modx输出条件逻辑中有一些未知的魔法。经验告诉我要尽量避免使用它们。

这很丑陋,但也许您可以通过将您希望输出的任何内容放在实际占位符中,然后按原样打印占位符来解决您的问题。

于 2014-01-16T08:23:31.997 回答
0

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

[[EvalIsShowMore? &val=`[[+isShowMore]]`]]

在 EvalIsShowMore 片段中放一些类似

<?php

if($val){
  echo 'something';
}else{
  echo 'nothing';
}
于 2014-01-16T19:51:40.313 回答
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`]]
于 2015-01-07T23:24:22.340 回答
-1

试试 eq 修饰符:

[[+isShowMore:eq=`1`:then=`show more`:else=`no`]]
于 2014-01-15T19:00:32.213 回答