在代码段中使用页面变量(ModX,1.0.5)

时间:2012-05-06 21:08:53

标签: modx

(使用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很新,而且它让我头疼!

谢谢!

1 个答案:

答案 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