基本上,您需要在您的投资组合页面控制器(或您需要此逻辑的任何页面)中创建一个函数。
这里有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
关系只是 a 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
通过调用函数名称来循环访问。所以在这里,要么$AllFeaturedImages
要么$DescendantFeaturedImages
。在你的情况下,你会得到类似的东西:
<% loop $DescendantFeaturedImages %>
<img src="$URL"/>
<% end_loop %>
我可以在 SilverStirpe 教程中找到一个使用控制器功能的示例:http: //doc.silverstripe.org/framework/en/tutorials/2-extending-a-basic-site
让我知道这是怎么回事。