假设您有两种页面类型:页面和主页。显然,页面将作为所有页面的基本页面类型,主页仅用于主页。对于每个基本页面,你都想要一个自定义的标题照片,而对于主页,则没有。
在最佳实践中,理想的设置是什么?
页面扩展sitetree
,并具有标题的ImageUpload字段
主页扩展Page
并禁用标题的ImageUpload字段
或
页面扩展sitetree
,并具有标题的ImageUpload字段
主页扩展sitetree
而不需要任何额外的CMS字段
我就是这样做的:
Page.php
每个Page
和任何扩展Page
的页面都将继承Image upload字段。
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;
}
}
主页.php
然后在任何不需要图像上传字段的页面上,只需调用$fields->removeByName('Image');
class HomePage extends Page {
private static $db = array();
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->removeByName('Image');
return $fields;
}
}
您可以创建另一个继承page的页面类型。让我们称之为"BasicPage"。
主页直接继承Page。
BasicPage也直接继承Page。
然后,将图像"has_one"关系附加到BasicPage。
我避免在我的网站树中创建"页面"类型的页面。我倾向于把"Page"当作抽象类型来使用。你会遇到的问题是,你会在Page中填充很多共享功能,然后有一天,你需要创建一个新的页面类型,它的外观或功能集与你以前开发的大多数页面类型截然不同。当这种情况发生时,您将被从Page继承的所有东西所困扰,这将阻碍您和您的应用程序。您和您的应用程序都将减慢速度。