Silverstripe - 每页不同的标签和字段

时间:2015-04-26 08:41:08

标签: silverstripe

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

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

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

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

以下代码就是一个例子。我已经在一个可行的代码片段周围添加了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();
    }
}

1 个答案:

答案 0 :(得分:2)

我建议您根据自己的意愿使用单独的页面类型。

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

}