5

OOP フレームワーク全般、特に Silverstripe は初めてです。私は何か重要なものを見逃していると確信しています!

現在、メインページの Twitter フィードを作成しようとしています。私の Page_controller には次のものがあります。

public function getTwitterFeed() { ... }

...一連のつぶやきを取得します。このデータは好きなようにフォーマットできるので、データの構造と関数は関係ありません。

Silverstripe のチュートリアルでは、次の例が示されています。

public function LatestNews($num=5) {
    $holder = NewsHolder::get()->First();
    return ($holder) ? News::get()->filter('ParentID', $holder->ID)->sort('Created', 'DESC')->limit($num) : false;
}

これは、テンプレートで次のように呼び出されます。

<% loop LatestNews %>
    <% include NewsTeaser %>
<% end_loop %>

ただし、この関数は DataModel オブジェクト (NewsHolder) に基づいており、データベースからデータを取得しています (これは私の twitter 関数ではありません)。

では、この関数はどの型の変数を返すべきでしょうか? 配列?オブジェクト?

4

1 に答える 1

16

SilverStripe 3.0には、と呼ばれる2つのものが<% loop %>あります。<% with %>

  • <% loop %>SS_Listを実装するものすべてを期待します(例:DataList、ArrayList)
  • <% with %>私が思うViewAbleDataを拡張するあらゆるタイプのオブジェクトを受け入れます(例:DataObject、ArrayData、...)

(SilverStripe 2.xには<% control %>、両方を実行するものがあります)

だから、あなたはしたいです<% loop TwitterFeed %>か?次に、ArrayListを返す必要があります

短い例(テストされていませんが、機能するはずです):

    public function getTwitterFeed() {
            return new ArrayList(array(
                    new ArrayData(array(
                            'Name' => 'Zauberfisch',
                            'Message' => 'blubb',
                    )),
                    new ArrayData(array(
                            'Name' => 'Foo',
                            'Message' => 'ohai',
                    )),
                    new ArrayData(array(
                            'Name' => 'Bar',
                            'Message' => 'yay',
                    ))
            ));
    }


    <% loop TwitterFeed %>
            $Name wrote: $Message<br />
    <% end_loop %>

したがって、Twitterから取得した配列をArrayDataオブジェクトに変換し、それらをすべてArrayListに配置します(各ツイートは1つのArrayDataオブジェクトである必要があります)

于 2012-08-22T15:16:55.203 に答える