Silverstripe - 每页不同的选项卡和字段

Silverstripe - Different tabs and fields per page

在 SilverStripe 3.1 中,是否可以在“关于”页面上添加不同的选项卡和字段。

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

关于页面 - 图片选项卡/附件选项卡

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

下面的代码是一个例子。我在一个有效的片段周围添加了 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();
    }
}

我建议根据您的需要使用单独的页面类型。

但是,如果您只想使用一种页面类型,则可以在 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;         
    }

}