首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SilverStripe虚拟页面/菜单项

SilverStripe虚拟页面/菜单项
EN

Stack Overflow用户
提问于 2016-07-06 17:47:50
回答 1查看 130关注 0票数 2

想象一下这样的站点结构/菜单布局:

首页

关于我们

服务

__Peeling马铃薯

__Slicing马铃薯

__Baking马铃薯

所有菜单项都链接到一个真实的页面,并有自己的URL和内容。但是粗体的项目仅仅是一个菜单项,没有链接、内容和URL,它唯一的目的就是在悬停时折叠出子菜单。SilverStripe不允许您直接创建这样一个页面实体。

我正在寻找一种最干净、最简单、最不麻烦的方法来创建一个虚拟页面,仅仅作为菜单项,没有内容,而且在最好的情况下也没有URL段塞(后者可能很难)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-06 19:10:47

只需创建一个RedirectorPage并选择您的第一个子页面作为重定向目标,您就可以实现“虚拟”页面,而无需任何额外的代码。

就我个人而言,过去我使用过一个更简单的"RedirectorPage“版本,如果直接访问它,它会自动重定向到第一个子页面。

示例:

代码语言:javascript
复制
class ChildRedirectorPage extends Page 
{
    private static $description = 'Page that has no content but automatically redirects to the first of its child-pages';

    public function ContentSource() {
        if($firstChild = $this->Children()->First()) {
            return $firstChild;
        } else {
            return $this;
        }       
    }

    public function Link($action = null) {
        // prevent link "redirection" when we're in CMS
        if (!is_subclass_of(Controller::curr(),'LeftAndMain')){
            if($firstChild = $this->Children()->First()) return $firstChild->Link($action);
            else return parent::Link($action);
        }
    }

    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->removeByName('Content', true);
        return $fields;
    }
}

class ChildRedirectorPage_Controller extends Page_Controller 
{
    function init() {
        parent::init();
        if($firstChild = $this->Children()->First()) {
            $this->redirect($firstChild->Link(), 301);
        }           
    }
}

我认为URL段段实际上是有益的,因为您的URL将是services/peeling-potatoes等,这很可能是更好的SEO的目的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38230492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档