Silverstripe 中的 $LinkingMode 值

$LinkingMode Values in Silverstripe

为什么在 Silverstripe 中使用 $LinkingMode? Silverstripe 的 $LinkingMode 怎么能一次只有一个值,它可以同时是一个部分和当前,或者 link 和部分?

答案在这里,Silverstripe 专家(wmk、3dgo、greg、munomono 等)在这里,如果我错了,请纠正我。 $LinkingMode 用于样式,请注意示例。此外,$LinkingMode 只能有一个状态,因为它连接到单个菜单和菜单级别(即 menu(1)、menu(2)...等)。因此,如果您想设置其他菜单级别的样式,请将 class=$LinkingMode 分配给该级别中的该菜单。 Silverstripe CMS 是一个很棒的 PHP 框架,比 Laravel(目前最流行的)更好,但缺少它的文档。

进一步扩展 Jonh 的回答,LinkingMode is a function exposed on all objects inherited from SiteTree。正如您在使用它时可能已经注意到的那样,您具有值 "current"(如果此对象与当前正在执行的页面相同),"section"(如果该页面是当前正在执行的页面的祖先)或 "link"(对于其他任何内容)。

虽然 Greg 在评论中提到的是真实的,但您确实看到模板中经常使用它来帮助设置菜单样式,您可以在代码中的任何地方使用它,而不仅仅是模板。

LinkingModeSiteTree 对象 isCurrent() and isSection() 上的另外两个函数支持。顾名思义,您可以直接使用它们来找出 SiteTree 对象相对于当前执行页面的状态。

在撰写此答案时,这是 LinkingMode (Silverstripe 3.3) 背后的代码:

public function LinkingMode() {
    if($this->isCurrent()) {
        return 'current';
    } elseif($this->isSection()) {
        return 'section';
    } else {
        return 'link';
    }
}