问题描述
我们正在开发一个使用 Elemental Module 来布局内容的 Silverstripe 项目。
该项目还使用博客模块,博客用于网站的两个部分 - 工作组合和标准博客。
实现这一目标的最佳方法是什么?
我们是否应该将 Blog
& BlogPost
扩展到新对象 Portfolio
& PortfolioItem
以区分两种不同的行为?
if ($this->BlogType == 'portfolio'){
// enable Elemental
} else {
// disable Elemental
}
最后,我们如何在特定页面上禁用 Elemental?它在文档中并不明显。
解决方法
这是我们的解决方案 - 使用 includeElemental
方法根据具体情况禁用/启用 Elemental。
class BlogPostExtension extends DataExtension
{
public function updateCMSFields(FieldList $fields){
$fields->insertBefore(new
DropdownField("LayoutIndex","Layout",["Portfolio","Blog"]),"Title");
}
public function includeElemental(){
if ($this->owner->LayoutIndex == 0) {
return true;
} else if ($this->owner->LayoutIndex == 1) {
return false;
}
}
}