2016-09-18 35 views
1

我有ModularPage类延伸Page。页面有一个'缩略图'Image图像无法通过ORM加载到SS4中

我有一个路线为ajaxing ModularPage集合。我用以下方法获取集合:

$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' 
} 

ThumbnailID已填充,但缩略图对象为空。这是一个错误?我需要在SS4中做任何不同的事情吗?

更新:所以,当我直接从浏览器访问路由的链接填充正确。通过Ajax访问时,Link为空。

更新2:图像链接()也可以按照正常方式从同一类访问,只有在通过ajax调用时才会被剥离。

+0

只是出于好奇,如果你得到是作为真正的页面类的神奇方法thumbnail()然后返回corret实体。例如,get_by_id(“Page”或应该如何使用oit来与命名空间一起使用。没有4.0版本的内部版本来测试它。 –

+0

过滤Id也使用正确的类名直接获取对象,如果您访问数据字段不是主要查询的一部分,它会为每次迭代的数据库请求。Page :: get() - > filter(“parentId”,无论);应该比SiteTree :: get更优化,因为后者会导致迭代加载每个项目的新数据。也就是说,如果我知道它是如何在至少3.2版本上完成的话)。 –

+0

@FinBoWa我试着调用真正的'Page类,当从端点收到时仍然为空。在'SiteTree'上使用'Page'的效率很好,我将来会这样做。 – nickspiel

回答

1

达米安排序帮助这一个在github上的问题:https://github.com/silverstripe/silverstripe-framework/issues/6048#issuecomment-248572357

有一个$owns静态数组告诉父对象发布时公布什么关系。

添加以下引起缩略图出版,现在正确显示:

class Page extends SiteTree { 
    private static $owns = [ 
     'Thumbnail' 
    ]; 
} 

目前这个看起来像出版资产的唯一方法。看起来这些人正在讨论未来在资产上添加发布按钮。