1

(使用 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 很陌生,这让我很头疼!

谢谢!

4

1 回答 1

2

诸如[*sidepromotop*]未从片段中解析的 MODX 标记(它是原始 php),因此实际上当您将未解析的标记作为字符串传递给它们时,empty() 检查工作得很好。

您需要做的是使用$modx->getTemplateVar()来检索当前文档的模板变量:

$promo1 = $modx->getTemplateVar('sidepromotop');

或者,您可以将它们作为参数传递到您的代码片段调用中......

[!mySnippet? &promo1=`[*sidepromotop*]` &promo2=`[*sidepromobot*]`!]

...并且它们将作为变量$promo1$promo2您的代码段提供。

*

您还应该使用$modx->runSnippet()从代码片段中执行同上,它会更有效。

$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

于 2012-05-10T13:32:30.900 回答