(使用 ModX 1.0.5)
当我执行当前的代码段(请参阅下面的代码片段)时,它似乎完全忽略了if(empty())
检查。我也尝试过if($promoX == '')
,也没有运气。
<?php
$promo1 = '[*sidepromotop*]'; // assets/images/promo1.jpg
$promo2 = '[*sidepromobot*]'; // this variable is empty.
if(empty($promo1) && empty($promo2)){
echo '[!Ditto? &startID=`92` &depth=`1` &display=`2` &randomize=`1` &tpl=`Promo-Block-Styles`!]';
}else{
if(empty($promo1)){
echo '[!Ditto? &startID=`92` &depth=`1` &display=`1` &randomize=`1` &tpl=`Promo-Block-Styles`!]';
}else{
echo '<div class="promo"><img src="'.$promo1.'" alt="" /></div>';
}
if(empty($promo2)){
echo '[!Ditto? &startID=`92` &depth=`1` &display=`1` &randomize=`1` &tpl=`Promo-Block-Styles`!]';
}else{
echo '<div class="promo"><img src="'.$promo2.'" alt="" /></div>';
}
}
?>
由于某种原因,上面的代码将显示以下内容:
<div class="promo">
<img src="assets/images/promo1.jpg" alt="">
</div>
<div class="promo">
<img src="" alt="">
</div>
如您所见,即使变量为空,当我通过代码运行它时,它显然仍然将其视为不为空。
我真的很感激对此的一些见解,因为我对 modx 很陌生,它让我非常头疼!
谢谢!
MODX 标签(如 [*sidepromotop*]
)不会从代码片段中解析(它是原始 php),因此实际上 empty() 检查在您将未解析的标签作为字符串传递它们时运行良好。
您需要做的是使用 $modx->getTemplateVar() 来检索当前文档的模板变量:
$promo1 = $modx->getTemplateVar('sidepromotop');
或者,您可以将它们作为参数传递到代码段调用中...
[!mySnippet? &promo1=`[*sidepromotop*]` &promo2=`[*sidepromobot*]`!]
。它们将作为变量$promo1
和$promo2
在代码片段代码中提供。
*
您还应该使用 $modx->runSnippet() 从代码片段中执行 Ditto,它会更有效率。
$output = $modx->runSnippet('Ditto', array(
'startID' => 92,
'depth' => 1,
'display' => 1,
'randomize' => 1,
'tpl' => 'Promo-Block-Styles',
));
return $output;
查看这篇维基文章,了解为 MODX 创建代码片段的一些重要提示:http://wiki.modxcms.com/index.php/Creating_Snippets