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

のような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のスニペットを作成するためのいくつかの優れたヒントについては、このwikiの記事を確認してください: http ://wiki.modxcms.com/index.php/Creating_Snippets

于 2012-05-10T13:32:30.900 に答える