У меня есть GalleryHolder с Gallery-Pages в качестве детей. Каждая Галерея-страница имеет объект Dataobject (VisualObject) для хранения изображений.
Мне удалось получить 3 случайных изображения из галереи на странице галереи и 3 случайных изображения из всех галерей на странице GalleryHolder.
Но то, что я хочу, – это 3 случайных изображения для каждой галереи, показанной на странице GalleryHolder.
Вот мой код, может ли кто-нибудь сказать мне, как это сделать?
простое решение состоит в том, чтобы просто направлять ваших детей
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; }
// EDIT как ответ на ваши комментарии:
если вы хотите, чтобы он был сгруппирован по галерее, я бы сделал все по-другому (забудьте вышеприведенный код и просто выполните следующее):
поместите это в свой класс 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 %>