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