2012-07-05 64 views
1

我有一個智者的if語句如下:縮短Smarty的if語句

<{if $page->getURLName() eq 'big-issues' or $page->getURLName() eq 'polls' or $page->getURLName() eq 'what-we-do' or $action eq 'events' or $action eq 'blogs' or $action eq 'news'}> 

我要比較相同的語句在模板幾個時間。而且,重複這些陳述幾次都很醜陋。我知道我可以緩存報表和重複使用它很多次,但我一直在尋找,如果它能夠做這樣的事情:

<{if $page->getURLName() eq 'big-issues' or 'polls' or 'what-we-do' or 'events' or $action eq 'blogs' or 'news'}> 

像在PHP中,我們可以這樣做:

$url = array ("big-issues","polls","what-we-do"); 
$needle = $page->getURLName(); 
if(in_array($needle, $centered)) { 
    //Do something 
} 

請注意,我沒有訪問模板的PHP代碼,所以只能使用smarty。任何建議將不勝感激。

乾杯。

回答

2

其實這是我想出了一個解決方案。

注意:在我的模板中,我必須使用< {}>而不是{}來啓動smarty。它只是如何設置模板。

 <{$urlName = ['big-issues','polls','what-we-do']}> 
     <{$actionType = ['news','blogs','events']}> 

     <{foreach item="url" from=$urlName}> 
      <{if $page->getURLName() eq $url}> 
       <{assign var=showBlock value=1}> 
      <{/if}> 
     <{/foreach}> 

     <{foreach item="act" from=$actionType}> 
      <{if $action eq $act}> 
       <{assign var=showBlock value=1}> 
      <{/if}> 
     <{/foreach}> 

現在我可以在我的HTML中檢查很多次相同的語句,而不會弄亂代碼。

<{if $showblock}> 
    <div class="block"> 
<{else}> 
    <{div class="regular"}> 
<{/if}> 
0

檢查: http://www.smarty.net/forums/viewtopic.php?p=48466

而本作中分配模板陣列: How to assign an array within a smarty template file?

應該是這樣的:

{assign var='pages' value=','|explode:"big-issues,polls,what-we-do,events"} 
{assign var='actions' value=','|explode:"blogs,news"} 

{if in_array($page->getURLName(), $pages) or in_array($action, $actions)} 
do something 
{/if} 
+0

非常感謝您的幫助。但是這並不能回答我的問題,可能是一個評論。 – Subash

+0

但是你想縮短支票嗎?你可以分配一次「頁面」和「動作」,然後只用縮短「if」語句 – bksi

+0

我沒有看到你編輯。我會盡力讓你知道它是怎麼回事。乾杯。 – Subash