silverstripeでホルダー/ページを作成しようとしましたが、アクションIDだけが表示されます。ブログページと同じようにIDがない場合(mydomain.com/programs/)プログラムの詳細ページが必要なID(mydomain.com/programs/spinning-with-chris/)がある場合、すべてのプログラムのリストを表示します。silverstripeアクションなしのホルダー/ページを作成する方法
誰かがこれを行う方法の例はありますか?
silverstripeでホルダー/ページを作成しようとしましたが、アクションIDだけが表示されます。ブログページと同じようにIDがない場合(mydomain.com/programs/)プログラムの詳細ページが必要なID(mydomain.com/programs/spinning-with-chris/)がある場合、すべてのプログラムのリストを表示します。silverstripeアクションなしのホルダー/ページを作成する方法
誰かがこれを行う方法の例はありますか?
あなたのコントローラでカスタム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 %>
これは出発点の例であり、必要に応じて調整する必要があります。
これは、フレームワークではなくページコンテンツのみをレンダリングするという唯一の問題です。 ProgramSchedulePage_ControllerはPage_Controllerを継承していますが、ページテンプレートを取得していないので、これを行う方法や「ProgramSchedulePage」テンプレートをフルページテンプレートにする必要がありますか? – Mi32dogs
@ Mi32dogsおそらくあなたのテンプレートは 'templates/ProgramSchedulePage.ss'です - これはページテンプレート全体を上書きします。 'templates/Layout/ProgramSchedulePage.ss'として保存する必要があります。内容をカバーするだけです。 –
私はレイアウトフォルダに持っていましたが、ページテンプレートを上書きしていました。私は最初にページデータを取得することによってそれを稼働させました。$ dObj = Page :: get() - > byID( '8');両方のテンプレートでレンダリングすると$ this-> customize($ dObj) - > renderWith(array( 'ProgramSchedulePage'、 'page'));が返されます。それは最善の解決策ではありませんが、それは働いています – Mi32dogs