Silverstripe 博客 - DataExtension 以使用幻灯片放映覆盖特色图像
Silverstripe Blog - DataExtension to Override FeaturedImage with Slideshow
我目前正在尝试用幻灯片替换 silverstripe 博客上的单个 "FeaturedImage"。原来的BlogPost.php是这样的:
class BlogPost extends Page {
private static $has_one = array(
'FeaturedImage' => 'Image',
);
}
我创建了以下名为 BlogPostExtension.php 的文件,并在我的主 config.yml 中用它扩展了 BlogPost(BlogImage 是一个数据对象,带有 has_one 图像、元信息和必需的关系)
class BlogPostExtension extends DataExtension {
private static $has_many = array(
'Images' => 'BlogImage.Post',
);
public function FeaturedImage(){
if($r = $this->owner->Images()->first()){
if($r->Image()->ID>0){
return $r->Image() ;
}
}
return false ;
}
}
我希望 FeaturedImage 函数能够优雅地降低 BlogPost 上旧的 has_one 关系,而不是在我的幻灯片放映中提供第一张图片。不幸的是,这没有用。我还尝试将 FeaturedImage 函数命名为 "getFeaturedImage" 但没有成功。
任何人都可以建议我如何实现我的目标吗?我是否需要删除我的 DataExtension 中原来的 has_one 关系,如果需要,我如何在不修改核心文件的情况下实现这一点?
您采用的方法很有趣,但您需要采用不同的方法来解决此问题。扩展扩展了一个 DataObject,不一定要覆盖它。
我建议将 FeaturedImageID
设置为 onBeforeWrite()
中的第一个图像 ID。为了可用性起见,您可能还想调用 updateCMSFields()
并删除 FeaturedImage
字段。
像这样的东西将是您想要的东西的良好开端:
class BlogPostExtension extends DataExtension {
private static $has_many = array(
'Images' => 'BlogImage.Post',
);
public function onBeforeWrite(){
if($r = $this->owner->Images()->first()){
if($r->Image()->ID > 0){
$this->owner->FeaturedImageID = $r->Image()->ID ;
}
}
}
}
我目前正在尝试用幻灯片替换 silverstripe 博客上的单个 "FeaturedImage"。原来的BlogPost.php是这样的:
class BlogPost extends Page {
private static $has_one = array(
'FeaturedImage' => 'Image',
);
}
我创建了以下名为 BlogPostExtension.php 的文件,并在我的主 config.yml 中用它扩展了 BlogPost(BlogImage 是一个数据对象,带有 has_one 图像、元信息和必需的关系)
class BlogPostExtension extends DataExtension {
private static $has_many = array(
'Images' => 'BlogImage.Post',
);
public function FeaturedImage(){
if($r = $this->owner->Images()->first()){
if($r->Image()->ID>0){
return $r->Image() ;
}
}
return false ;
}
}
我希望 FeaturedImage 函数能够优雅地降低 BlogPost 上旧的 has_one 关系,而不是在我的幻灯片放映中提供第一张图片。不幸的是,这没有用。我还尝试将 FeaturedImage 函数命名为 "getFeaturedImage" 但没有成功。
任何人都可以建议我如何实现我的目标吗?我是否需要删除我的 DataExtension 中原来的 has_one 关系,如果需要,我如何在不修改核心文件的情况下实现这一点?
您采用的方法很有趣,但您需要采用不同的方法来解决此问题。扩展扩展了一个 DataObject,不一定要覆盖它。
我建议将 FeaturedImageID
设置为 onBeforeWrite()
中的第一个图像 ID。为了可用性起见,您可能还想调用 updateCMSFields()
并删除 FeaturedImage
字段。
像这样的东西将是您想要的东西的良好开端:
class BlogPostExtension extends DataExtension {
private static $has_many = array(
'Images' => 'BlogImage.Post',
);
public function onBeforeWrite(){
if($r = $this->owner->Images()->first()){
if($r->Image()->ID > 0){
$this->owner->FeaturedImageID = $r->Image()->ID ;
}
}
}
}