2015-12-19 14 views
5

コンテンツを分割するために何か必要な新しいページタイプを作成しました。私はページの3か所で使いたいストラップラインブロックを作成しましたが、ストラップブロックの1バージョンのみを作成し、その内容をダイナミックデータでドライブしたいと考えています。Silverstripe 3.2再利用可能なブロック

私はその後、私はHomePage.phpにCMSフィールドを追加Straplines.php

class Straplines extends DataObject{ 
    private static $db = array(
     'Title'=>'Text', 
     'Content'=>'HTMLText', 
     'SortOrder'=>'Int' 
    ); 
    private static $has_one = array(
     'Parent'=>'Page' 
    ); 

    private static $default_sort = 'SortOrder'; 

    public function getCMSFields(){ 
      $fields = parent::getCMSFields(); 
      $fields->addFieldToTab("Root.Main", new HtmlEditorField('Content','Content')); 
      $fields->addFieldToTab("Root.Main", new TextField('Title','Title')); 
      return $fields; 
    } 
} 

に次きました。私はそこに問題のないストラップラインを追加することができ、それらはすべて表示されます。 はその後HomePage.ssに私は、次の

<% include PricesBlock %> 
<% include TourStraplineBlock %> 
<% include QuickFacts %> 
<% include TourStraplineBlock %> 

を持っているしかし、私は、これらのそれぞれに別々のコンテンツを取得するために離れてTourStraplineBlockで把握することはできません。 includeをパラメータ化したり、複数のテンプレートを作成したりする必要はありません。私はSilverstripeの開発者にとって新しく、再利用可能なコンテンツを作成するのは難しいプロセスであると感じています。

編集:これは表示を処理するstrapline.ssテンプレートです。

<div class="strapline"> 
     <% loop Straplines %> 
      $Content   
     <% end_loop%> 
</div> 

おそらく私がこれを2回入力すると、すべてのストラップラインが表示されます。私は何かをしたいです

<% include Strapline?id=1 %> 

それを解読してそこから行ってください。

編集ありがとうございます。3.2 not 3.0。私は彼らがかなり似ていると思った。

+0

「private static $ db」は、Silverstripe 3.0とよく似ていません(3.1,3.2など)。どのバージョンのSSを使用していますか? HomePage.phpのコードと変更したいインクルードテンプレートをさらに表示できますか? – wmk

+0

リクエストに応じて編集しました@wmk –

答えて

5

Firesphereは、あなたがちょうどあなたがあなたのテンプレートで呼び出すと、それにオブジェクトIDを渡すことができます機能を作成することができます言及した同様。

Page_Controllerクラスにこの関数を追加するか、ホームページからのみアクセスする場合は、HomePage_Controllerクラスに配置します。

<% if $StraplineByID(1) %> 
    <% with $StraplineByID(1) %> 
    $Title, $Content, $WhatEver or an include 
    <% else %> 
    Can't find a strapline with this ID 
    <% end_with %> 
<% end_if %> 

あなたは(これは、よりユーザーフレンドリーになります)ではないidではなく名前でstraplinesを特定したい場合は、新しいフィールドを作成する必要があります。あなたは今、それを使用することができ、あなたのテンプレートで

public function StraplineByID($id) { 
    $strapline = Straplines::get()->byID($id); 
    if($strapline) { 
    return $strapline; 
    } 
} 

「名前」などと呼ばれるものを使用し、idの代わりにこれを使用します。しかし、ユニークでなければなりませんNameフィールドの値を書き留め

public function StraplineByName($name) { 
    $strapline = Straplines::get()->find('Name', $name); 
    if($strapline) { 
    return $strapline; 
    } 
} 

とテンプレートで

<% if $StraplineByName(prices) %> 
    <% with $StraplineByName(prices) %> 
    $Title, $Content, $WhatEver or an Include 
    <% else %> 
    Can't find a strapline with this Name 
    <% end_with %> 
<% end_if %> 

コードがテストされていないが、それは動作するはずです;)

+0

ありがとう、それは私のためにうまくいくつもりです。 –

4

pageで関数を作ることができます。この関数は引数をリテラルとして取り込み、希望のストラップラインを返します。例えば

<% $currentStrapline(1) %> 

やページ内の関数、

public function currentStrapline($id) { 
// returns the wished strapline or null; 
} 
+0

あなたの答えをありがとう。私はもう少し上手くいくことに従うことができたので私は他の人と一緒に行きました。私はシルバーストライプにはとても新しいです。 –

0

はいparametriseする方法があります含めると、あなたはほとんどそれを持っていた:Strapline.ssで次に

<% include Strapline MyVar=$someVar, MyVar2=$someVar2 %> 

<% if $MyVar == 1 %> 
Say One 
<% else_if $MyVar2 == 2 %> 
Say Two 
<% end_if %> 
関連する問題