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

  • 本文关键字:变量 代码 ModX 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 很陌生,它让我非常头疼!

谢谢!

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

最新更新