【问题标题】:Silverstripe - Different tabs and fields per pageSilverstripe - 每页不同的选项卡和字段
【发布时间】:2015-04-26 08:41:07
【问题描述】:

例如,在 SilverStripe 3.1 中,是否可以在 about 页面上添加不同的选项卡和字段。

然后是服务页面上的不同选项卡和字段。

关于页面 - 图片标签/附件标签

服务页面 - 图片选项卡/附件选项卡/员工人员选项卡

以下代码是一个示例。我在一个确实有效的 sn-p 周围添加了 if 语句。但它似乎只适用于所有页面,通过在所有页面上显示相同的选项卡。

我一直在 SilverStripe 网站上做视频课程,我可以看到你可以创建页面类型,但我真的需要知道你是否可以在不创建额外页面类型的情况下实现这一点。

// I want this on the about page 

// if page=about {

class Page extends SiteTree {

    private static $has_one = array (
        'Photo' => 'image',
        'Brochure' => 'file',
    );

    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->addFieldToTab('Root.Images', $photo = UploadField::create('Photo'));
        $fields->addFieldToTab('Root.Attachments', $brochure = UploadField::create('Brochure'));

        return $fields;
    }

}

// I want this on the services page 

// } elseif page=services {

class Page extends SiteTree {

    private static $has_one = array (
        'Photo' => 'image',
        'Brochure' => 'file',
        'Staff Person' => 'image',
    );

    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->addFieldToTab('Root.Images', $photo = UploadField::create('Photo'));
        $fields->addFieldToTab('Root.Attachments', $brochure = UploadField::create('Brochure'));
        $fields->addFieldToTab('Root.Staff', $staff = UploadField::create('Staff'));
        return $fields;
    }

}

// }

class Page_Controller extends ContentController {

    private static $allowed_actions = array();

    public function init() {
        parent::init();
    }
}

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    我建议为您想要做的事情使用单独的页面类型。

    但是,如果您只想使用一种页面类型,您可以在 getCMSFields 函数中使用 if 语句来显示不同的字段。

    在此示例代码中,我检查了URLSegment,尽管您可以检查其他内容,例如Title

    class Page extends SiteTree {
    
        private static $has_one = array (        
            'Photo' => 'image',   
            'Brochure' => 'file', 
            'Staff Person' => 'image', 
        );
    
        public function getCMSFields() {        
            $fields = parent::getCMSFields();
    
            if ($this->URLSegment == 'about' || $this->URLSegment == 'services') {
                $fields->addFieldToTab('Root.Images', $photo = UploadField::create('Photo'));
                $fields->addFieldToTab('Root.Attachments', $brochure = UploadField::create('Brochure'));     
            }
            if ($this->URLSegment == 'services') {
                $fields->addFieldToTab('Root.Staff', $staff = UploadField::create('Staff'));
            }
    
            return $fields;         
        }
    
    }
    

    【讨论】:

    • 是的,请使用不同的页面类型。如果您不小心更改了 $URLSegment,您将无法再访问这些字段。不同的页面类型还有一个很大的优势,就是您可以轻松地为它们添加单独的布局模板。
    • @3dgoo 谢谢,这工作 nicley。我确实了解页面类型如何更加稳定。我只是好奇它实际上是否可以主要用于主页。我想要一种简单的方法让客户通过标签添加几块主页内容,这看起来是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2015-09-21
    • 2014-04-08
    • 2012-09-10
    相关资源
    最近更新 更多