我有一个扩展ModularPage
的{{1}}类。网页上有一个“缩略图”Page
。
我有一条ajaxing Image
集合的路线。我用以下内容抓住了这个集合:
ModularPage
填充了ThumbnailID,但缩略图对象为空。这是一个错误吗?我是否需要在SS4中做任何不同的事情?
更新:因此,当我直接从浏览器访问路径时,链接会正确填充。通过Ajax访问它时,$rootPage = DataObject::get_by_id('SilverStripe\\CMS\\Model\\SiteTree', $id);
$pages = $rootPage->Children();
foreach ($pages as $page) {
var_dump($page->Thumbnail()->Link()); // Null
var_dump($page->ThumbnailID); // '4'
}
为空。
更新2:图像Link()在从同一个类访问时也可正常工作,只有通过ajax调用才会被剥离。
答案 0 :(得分:1)
达米安帮助在github问题上排除了这个问题:https://github.com/silverstripe/silverstripe-framework/issues/6048#issuecomment-248572357
有一个$owns
静态数组,告诉父对象在发布时要发布哪些关系。
添加以下内容导致缩略图被发布,现在正确显示:
class Page extends SiteTree {
private static $owns = [
'Thumbnail'
];
}
目前,这似乎是发布资产的唯一方法。看起来这些人正在讨论将来在资产上添加发布按钮。
答案 1 :(得分:-1)
您可以使用$page->Thumbnail()->Filename
获取文件名并自行构建img标记。或者您可以使用其中一种裁剪方法,例如$page->Thumbnail()->resize(1024,768);
https://docs.silverstripe.org/en/3.1/developer_guides/files/image/
Link
上没有Image
方法。