silverstripe如何在没有操作的情况下创建持有者/页面

时间:2017-09-07 00:57:25

标签: php silverstripe

我尝试在silverstripe中创建一个持有者/页面,列出没有动作的ID,就像博客页面一样,如果没有ID(mydomain.com/programs/),则显示所有程序的列表(如果有)一个ID(mydomain.com/programs/spinning-with-chris/),而不是我想要一个包含该程序的详细信息页面。

有人有一个如何做到这一点的例子吗?

1 个答案:

答案 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 %>

这些只是起点示例,您需要根据自己的需要进行调整。