基本的に、Portfolio Page Controller (またはこのロジックが必要なページ) に関数を作成する必要があります。
ここに2つの例があります。まずFeaturedImage
、データベースから既存のものをすべて取得し、ランダムな順序で返します。
function AllFeaturedImages()
{
return FeaturedImage::get()->sort('RAND()');
}
そして、これFeaturedImage
はページの子の子からすべてを取得し、それらをランダムな順序で返します:
function DescendantFeaturedImages()
{
$featuredImages = array();
foreach ($this->Children() as $child)
{
foreach ($child->Children() as $grandChild)
{
$images = $grandChild->FeaturedImage();
if ( $images )
{
$featuredImages = array_merge( $featuredImages, $images->toArray() );
}
}
}
shuffle($featuredImages);
return ArrayList::create($featuredImages);
}
FeaturedImage
リレーションが単なる の場合has_one
、これは少し変わります:
function DescendantFeaturedImages()
{
$featuredImages = array();
foreach ($this->Children() as $child)
{
foreach ($child->Children() as $grandChild)
{
$image = $grandChild->FeaturedImage();
if ( $image )
{
array_push( $featuredImages, $image );
}
}
}
shuffle($featuredImages);
return ArrayList::create($featuredImages);
}
FeaturedImage
次に、Portfolio Page テンプレートで、関数名を呼び出してループすることができます。ここでは、 または のいずれ$AllFeaturedImages
か$DescendantFeaturedImages
です。あなたの場合、次のようなものが得られます:
<% loop $DescendantFeaturedImages %>
<img src="$URL"/>
<% end_loop %>
コントローラー関数を使用した SilverStirpe チュートリアルで 1 つの例を見つけることができました: http://doc.silverstripe.org/framework/en/tutorials/2-extending-a-basic-site
これがどうなるか教えてください。