关于pagetypes的SilverStripe最佳实践

时间:2016-03-31 20:39:58

标签: php silverstripe

想象一下,您有两种类型:页面主页。显然,Page将作为所有页面的基本页面类型,仅作为主页的HomePage。对于每个基本页面,您需要一个自定义标题照片,而对于主页没有。

在最佳实践中,理想的设置是什么?

页面扩展sitetree并且标题为

的ImageUpload字段

HomePage扩展Page并禁用标题

的ImageUpload字段

OR

页面扩展sitetree并且标题为

的ImageUpload字段

HomePage扩展sitetree,无需任何其他CMS字段

2 个答案:

答案 0 :(得分:4)

这就是我这样做的方式:

<强> page.php文件

每个Page以及任何扩展Page的网页都会继承图片上传字段。

class Page extends SiteTree {

    private static $has_one = array(
        'Image' => 'Image'
    );

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();
        $fields->addFieldToTab('Root.Main', UploadField::create('Image'), 'Content');
        return $fields;
    }

}

<强> HomePage.php

然后,在您不想要图片上传字段的任何页面上,只需致电$fields->removeByName('Image');

class HomePage extends Page {

    private static $db = array();

    public function getCMSFields() {

        $fields = parent::getCMSFields();

        $fields->removeByName('Image');

        return $fields;
    }
}

答案 1 :(得分:2)

您可以创建另一个继承Page的页面类型。我们称之为&#34; BasicPage&#34;。

HomePage直接继承了Page。

BasicPage也直接继承了Page。

然后,附上图片&#34; has_one&#34;与BasicPage的关系。

我避免创建类型&#34; Page&#34;在我的网站树中。我倾向于主要使用&#34; Page&#34;好像它是一个抽象类型。您遇到的问题是,您将在页面中填充大量共享功能,然后有一天,您需要创建一个具有非常不同的外观或设置的新页面类型功能比您之前开发的大多数页面类型都要多。如果发生这种情况,您将无法继续使用从Page继承的所有内容,这将阻碍您和您的应用程序。你和你的申请都会变慢。