2013-07-12 69 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