定义Dataobject的URL - Silverstripe 3.1

时间:2013-10-20 13:22:30

标签: php silverstripe

如何更改数据对象的网址? 我可以使用此函数在以下url下获取dataobject。

是www.domain.tld /物品/艺术?= 1234

    public function ArticleByID() {
    $articleID = isset($_GET['art']) ? $_GET['art'] : false;
    return $articleID ? Articles::get()->filter(array('ShortNumber' => $articleID))->First() : false;
}

但我想要的就是这个例子 www.domain.tld / articles / 1234 www.domain.tld / members / member-name

1 个答案:

答案 0 :(得分:4)

您可以创建一个show()函数,您可以在ArticleHolder上调用此函数,并使用 www.domain.tld /这样的网址返回您想要的Articles页面物品/显示/ 1234

<强> ArticleHolder.php

...

class ArticleHolder_Controller extends Page_Controller {

    ...

    public function show(SS_HTTPRequest $request) {

        if ($request->param('ID') && $article = Articles::get()->filter(array('ShortNumber' => $page->param('ID')))->First()) {

            return $this->customise(array(
                'Title' => $article->Title,
                'Content' => $article->Content,
                'MetaTitle' => $article->MetaTitle,
                'MetaDescription' => $article->MetaDescription,
                'MetaKeywords' => $article->MetaKeywords
            ))->renderWith(
                array('ArticlesPage', 'Page')
            );
        }

        return $this->httpError(404);
    }

    ...

}

或者,更好的是,使用URLSegment来获取您的文章。为此,您需要URLSegment课程中的Article

在ssbits.com上有一个很好的教程: http://www.ssbits.com/tutorials/2010/dataobjects-as-pages-part-2-using-model-admin-and-url-segments-to-create-a-product-catalogue/

本教程适用于Silverstripe 2.4,但代码应该适用于Silverstripe 3.1中的小调整。

本教程还有一个名为DataObjectAsPage的模块:https://github.com/arambalakjian/DataObjects-as-Pages

您可以将此作为代码的基础。