2017-09-07 5 views
0

silverstripeでホルダー/ページを作成しようとしましたが、アクションIDだけが表示されます。ブログページと同じようにIDがない場合(mydomain.com/programs/)プログラムの詳細ページが必要なID(mydomain.com/programs/spinning-with-chris/)がある場合、すべてのプログラムのリストを表示します。silverstripeアクションなしのホルダー/ページを作成する方法

誰かがこれを行う方法の例はありますか?

答えて

1

あなたのコントローラでカスタムURLハンドラを定義していないと仮定すると、デフォルトではこれです:これはあなたのルートはroutetocontroller/action、その後に何がオプションになります(more info)になることを意味し

private static $url_handlers = array(
    '$Action//$ID/$OtherID' => 'handleAction', 
); 

。ルートの最初の部分は、例えば、あなたのYAMLの設定で定義されます:YourTemplateName.ssで、その後

private static $allowed_actions = array('index'); 

public function index(SS_HTTPRequest $request) 
{ 
    // Handle an ID passed 
    if ($id = $this->urlParams['ID']) { 
     return $this->doSomethingWithYourId($id); 
    } 

    // Otherwise, show all of your data 
    return $this->renderWith(array('YourTemplateName', array(
     'YourDataList' => YourModel::get() 
    )); 
} 

そして、あなたがループして表示することができます:

Director: 
    rules: 
    routetocontroller: YourControllerName 

したがって、あなたのコントローラがindexアクションを公開する必要があります。

<% loop $YourDataList %> 
    <li><a href="$Link">$Title</a></li> 
<% end_loop %> 

これは出発点の例であり、必要に応じて調整する必要があります。

+0

これは、フレームワークではなくページコンテンツのみをレンダリングするという唯一の問題です。 ProgramSchedulePage_ControllerはPage_Controllerを継承していますが、ページテンプレートを取得していないので、これを行う方法や「ProgramSchedulePage」テンプレートをフルページテンプレートにする必要がありますか? – Mi32dogs

+0

@ Mi32dogsおそらくあなたのテンプレートは 'templates/ProgramSchedulePage.ss'です - これはページテンプレート全体を上書きします。 'templates/Layout/ProgramSchedulePage.ss'として保存する必要があります。内容をカバーするだけです。 –

+1

私はレイアウトフォルダに持っていましたが、ページテンプレートを上書きしていました。私は最初にページデータを取得することによってそれを稼働させました。$ dObj = Page :: get() - > byID( '8');両方のテンプレートでレンダリングすると$ this-> customize($ dObj) - > renderWith(array( 'ProgramSchedulePage'、 'page'));が返されます。それは最善の解決策ではありませんが、それは働いています – Mi32dogs

関連する問題