0

我有一个 GalleryHolder 和 Gallery-Pages 作为孩子。每个 Gallery-Page 都有一个 Dataobject(VisualObject) 来存储图像。

我设法从它的画廊页面上的 GalleryPage 中获取 3 张随机图像,并从 GalleryHolder 页面上的所有画廊中获得 3 张随机图像。

但我想要的是 GalleryHolder 页面上显示的每个画廊的 3 张随机图像。

这是我的代码,有人可以告诉我该怎么做吗?

4

1 回答 1

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;
}

// 编辑作为对您的评论的回应:

如果你希望它按画廊分组,我会一起做不同的(忘记上面的代码,只需执行以下操作):

把它放在你的画廊课上:

// File: Gallery.php
class Gallery extends Page {   
    ...

    public function getRandomPreview($num=3) {
        return $this->GalleryImages()
            ->filter(array('Visibility' => 'true'))
            ->sort('RAND()')
            ->limit($num);
    }
}

然后在 Parent (the 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 %>
于 2013-10-16T11:51:31.163 回答