我有一个GalleryHolder,其中Gallery-Pages是孩子们。每个Gallery-Page都有一个Dataobject(VisualObject)来存储图像。
我设法从Gallery Gallery页面上的GalleryPage获取3张随机图像,并在GalleryHolder页面上从所有画廊中随机获取3张图像。
但我想要的是GalleryHolder页面上显示的每个图库的3个随机图像。
这是我的代码, 谁能告诉我怎么做?
答案 0 :(得分:3)
简单的解决方案是让你的孩子远离
public function getRandomPreviewForAllChildren($numPerGallery=3) {
$images = ArrayList::create();
foreach($this->data()->Children() as $gallery) {
$imagesForGallery = $gallery->GalleryImages()
->filter(array('Visibility' => 'true'))
->sort('RAND()')
->limit($numPerGallery);
$images->merge($imagesForGallery);
}
return $images;
}
//编辑以回复您的评论:
如果您希望按库分组,我会一起做不同的事情(忘记上面的代码,然后执行以下操作):
将它放在您的Gallery类中:
// File: Gallery.php
class Gallery extends Page {
...
public function getRandomPreview($num=3) {
return $this->GalleryImages()
->filter(array('Visibility' => 'true'))
->sort('RAND()')
->limit($num);
}
}
然后在父模板(GalleryHolder
)中调用该函数:
// File: GalleryHolder.ss
<% loop $Children %>
<h4>$Title</h4>
<ul class="random-images-in-this-gallery">
<% loop $RandomPreview %>
<li>$Visual</li>
<% end_loop %>
</ul>
<% end_loop %>
//编辑另一条评论要求提供单个数据对象:
如果您只想要1个随机图库图片,请使用以下内容:
// File: Gallery.php
class Gallery extends Page {
...
public function getRandomObject() {
return $this->GalleryImages()
->filter(array('Visibility' => 'true'))
->sort('RAND()')
->first();
// or if you want it globaly, not related to this gallery, you would use:
// return VisualObject::get()->sort('RAND()')->first();
}
}
然后在模板中直接访问该方法:
$RandomObject.ID
或$RandomObject.Visual
或任何其他财产
或者您可以使用<% with %>
来限定它:
<% with $RandomObject %>
$ID<br>
$Visual
<% end_with %>