2012-05-06 45 views
1

(使用鏌鋣1.0.5)使用頁面變量(鏌鋣,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很陌生,它給了我這麼頭疼!

謝謝!

回答

2

MODX標記(例如[*sidepromotop*])不是從代碼片段(它是原始的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文章: http://wiki.modxcms.com/index.php/Creating_Snippets

+0

謝謝你洙多,正是我一直在尋找! – MrE