我尝试在silverstripe中创建一个持有者/页面,列出没有动作的ID,就像博客页面一样,如果没有ID(mydomain.com/programs/),则显示所有程序的列表(如果有)一个ID(mydomain.com/programs/spinning-with-chris/),而不是我想要一个包含该程序的详细信息页面。
有人有一个如何做到这一点的例子吗?
答案 0 :(得分:1)
假设您尚未在控制器中定义自定义URL处理程序,则默认为:
private static $url_handlers = array(
'$Action//$ID/$OtherID' => 'handleAction',
);
这意味着您的路线将为routetocontroller/action
,之后的任何内容都将是可选的(more info)。路由的第一部分将在您的YAML配置中定义,例如:
Director:
rules:
routetocontroller: YourControllerName
因此,您的控制器需要公开索引操作:
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()
));
}
然后您可以在YourTemplateName.ss
:
<% loop $YourDataList %>
<li><a href="$Link">$Title</a></li>
<% end_loop %>
这些只是起点示例,您需要根据自己的需要进行调整。