2013-07-12 85 views
0

我正在努力獲得應該很簡單的工作。 我試圖在silverstripe模板文件沒有成功如下:silverstripe模板問題與if語句

<% if $objectCount > 10 %> 

我已經有沒有滿意的回答同樣的問題,其他人(http://www.silverstripe.org/template-questions/show/10053) 所以我想拿出一個替代的silverstripe閱讀在比基本方法等同時:

<% if $objectCountGreaterThanTen %> 

所以,我實現了一個簡單的類隱藏條件邏輯如下:

class EvaluateLogic extends DataObject { 
    public function greaterThan($exp, $x) { 
     print_r('calling logic.greaterThan()'); 
     return $exp > $x; 
    } 
    public function lessThan($exp, $x) { return $exp < $x; } 
    ... 
} 

然後,我實例化一個EvaluateLogic成員(命名爲$邏輯)在做這個,我在模板中使用DataObject類:

<% if $logic.greaterThan($objectCount, 10) %> 

但.greaterThan()調用被忽略了某些原因..這我不明白? 爲了對問題進行分區,我在DataObject中創建了一個getLogic()訪問器,以便打印一些內容並查看代碼是否已到達,它是什麼,但不調用greaterThan()函數中的print_r。

任何想法如何使這項工作?

感謝

+0

媽的,我覺得有點慚愧,這個錯誤是剛下我鼻子。 <% if %> – DarkUrse

回答

0

事實證明,即使刪除$符號固定我的方法調用,它並沒有讓我實現我想要的東西。 似乎ss解析器還不足以解釋方法變量:'objectCount'變量被解釋爲一個字符串。

0

你可以嘗試類型化變量。由於greaterThan和lessThan使用數字,因此可以用(int)或(float)進行類型轉換。

class EvaluateLogic extends DataObject { 
    public function greaterThan($exp, $x) { 
     print_r('calling logic.greaterThan()'); 
     return (float)$exp > (float)$x; 
    } 
    public function lessThan($exp, $x) { return (float)$exp < (float)$x; } 
    ... 
} 

http://www.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting

+0

顯然沒有允許$符號其實問題現在在其他地方。在例子('<%if $ logic.greaterThan($ objectCount,10)%>')中,** $ objectCount **被讀取/解釋爲字符串**'objectCount'**而不是變量。除非ss intepreter發展,否則我看不到解決我的問題的辦法。 – DarkUrse

0

模板解析器不會允許你動態變量傳遞到方法調用。這是在設計上 - 它阻止模型或控制器邏輯被推入模板(其中邏輯確實沒有位置)

您需要將數據存儲在模型或控制器上,並作爲模型的屬性在其中訪問它,或者控制器。

如果您正在尋找的時候已經處理的迭代一定數量的改變行爲或輸出,你可以使用$ iteratorPos(一些討論在這裏這樣做,在你的模板循環:http://www.silverstripe.org/general-questions/show/16838

0

最簡單的方法和正確的,方法是將objectCount從控制器返回到模板:

function templateName(){ 
    return array(
     "Objects"=>$objects, 
     "AboveTen"=>$objects->count() > 10 ? true : false 
    ); 
} 

此外,還有兩個變量稱爲$ TOTALITEMS和$波什在任何環路。 $ TotalItems變量會給你循環的對象的總數,而$ Pos會給你當前對象的總數,如5/10。

如果你想回路停在10,你也可以做(V3):

<% loop Object.Limit(10) %> 
這裏

更多信息http://doc.silverstripe.org/framework/en/reference/templates