图像未通过SS4中的ORM加载

时间:2016-09-18 23:02:24

标签: silverstripe

我有一个扩展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调用才会被剥离。

2 个答案:

答案 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方法。