Silverstripe 3 - 用于Dataobject的LinkingMode()

时间:2014-05-12 14:08:30

标签: silverstripe

我创建了这个函数,将dataobjects显示为页面

// DISPLAY ITEM AS PAGE
public function produkt(SS_HTTPRequest $request) {
    $urlSegment = $this->request->param('URLSegment');
    $item = ShopItem::get()->filter('URLSegment', $urlSegment)->first();

    if( $item ) {
        $data = array(
            'Item' => $item,
            'Title' => $item->Title,
            'Parent' => Shop::get()->First(),
            'Controller' => $this,
            'URLSegment' => $item->URLSegment
        );
        return $this->customise($data)->renderWith(array('ShopItem', 'Page'));
    } else {
        return $this->httpError(404);
    }
}

这是我的YML文件

---
Name: productRoute
After: 'framework/routes#coreroutes'
---
Director:
  rules:
    'onlineshop//produkt/$URLSegment!': 'Shop_Controller'

该功能在我的Shop_Controller上。和Dataobjects显示在onlineshop / produkt / blablabla-1

工作正常,但在导航中,“Onlineshop”链接不会突出显示为部分。

我想我需要将“LinkinMode()”函数放在我的数据对象中。但我不知道该功能应该包含什么。返回部分当前或链接doesen't work。

有人可以帮助我吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

您只想突出显示" Onlineshop "这是SiteTree中的一个页面,对吧?

如果是这样,只需覆盖该类中的LinkingMode()方法(扩展SiteTree)并让其返回sectioncurrent,以使您的自定义路由处于活动状态...

如果您希望在导航中显示每个DataObject并在活动时突出显示,那么您只需要在DataObject本身上使用该方法。

请参阅http://www.ssbits.com/tutorials/2010/dataobjects-as-pages-part-1-keeping-it-simple/