(使用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很新,而且它让我头疼!
谢谢!
答案 0 :(得分:2)
[*sidepromotop*]
之类的MODX标签不是从代码片段(它是原始的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;
查看这篇wiki文章,了解为MODX创建片段的一些重要提示: http://wiki.modxcms.com/index.php/Creating_Snippets