0

簡単に動作するはずのものを手に入れるのに苦労しています。Silverstripe テンプレート ファイルで次のことを試みましたが、成功しませんでした。

<% if $objectCount > 10 %>

私はsilverstripeで、満足のいく答えがない同じ問題を抱えている別の人を読んだことがあります(http://www.silverstripe.org/template-questions/show/10053) 。基本的な方法:

<% 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; }
   ...
}

次に、テンプレートで使用する DataObject クラスで EvaluateLogic メンバー ( $logic という名前) をインスタンス化し、次のようにします。

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

しかし、 .greaterThan() 呼び出しは何らかの理由で無視されています..どれがわかりませんか? 問題を分割するために、DataObject に getLogic() アクセサーを作成して何かを印刷し、コードに到達したかどうかを確認しましたが、greaterThan() 関数の print_r は呼び出されません。

これを機能させる方法はありますか?

ありがとう

4

4 に答える 4

0

最も簡単で正しい方法は、objectCount をコントローラーからテンプレートに返すことです。

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

さらに、どのループにも $TotalItems と $Pos という 2 つの変数があります。$TotalItems 変数は、ループされているオブジェクトの合計量を示し、$Pos は、5/10 のように、合計のうちの現在のオブジェクトを示します。

ループを 10 で停止したい場合は、次のようにすることもできます (v3):

<% loop Object.Limit(10) %>

詳細はこちらhttp://doc.silverstripe.org/framework/en/reference/templates

于 2014-09-17T11:37:15.963 に答える
0

結局のところ、$ 記号を削除するとメソッド呼び出しが修正されましたが、目的を達成することはできませんでした。ss パーサーはまだメソッド変数を解釈できるほど強力ではないようです。'objectCount' 変数は文字列として解釈されました。

于 2013-07-15T07:44:18.613 に答える
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

于 2013-07-23T07:17:19.343 に答える