我正在尝试创建一个页面,显示持有者子页面中的最新图像。 每行将在以下示例之间交替:
大图片|小图片
小图片|大图
大图片|小图片
依旧......
template.ss
<div class="row">
<div class="span8">
LARGE IMAGE
</div>
<div class="span4">
SMALL IMAGE
</div>
</div>
<div class="row">
<div class="span4">
Small Image
</div>
<div class="span8">
Large IMage
</div>
</div>
</div>
<div class="row">
<div class="span8">
Large Image
</div>
<div class="span4">
Small Image
</div>
</div>
如何在模板文件中处理?
我尝试编写自定义函数来处理Holder Controller中的最新图像
Controller.php这样
$works = WorkPage::get();
这只返回图片ID,我尝试了左连接,但没有返回文件路径。
$works = WorkPage::get()->leftJoin("File", "\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");
答案 0 :(得分:0)
File::get()->
leftJoin("SiteTree", "\"SiteTree\".\"ParentID\" = ".$this->ID)->
leftJoin("WorkPage", "\"WorkPage\".\"ID\" = \"SiteTree\".\"ID\"")->
where("\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");
可能是您所追求的SQL查询(尽管未经测试)
答案 1 :(得分:0)
这就是我的方式,不确定它是否是最好的方式,但它有效。
$works = WorkPage::get();
foreach ($works as $work) {
//Build the IMage Object so we can add it to the Work Object
$ImageObj = File::get()->byID($work->FeaturedImageID);
$Image->ID = $ImageObj->ID;
$Image->Title = $ImageObj->Title;
$Image->Name = $ImageObj->Name;
$Image->Filename = $ImageObj->Filename;
$work->ImageObj = $Image;
$ImagePath = $work->ImageObj->Filename;
}
答案 2 :(得分:0)
您的问题并非100%明确。我不确定你是否遇到模板循环和条件问题,或者从WorkPage获取图像对象,所以我会试着回答它们。
要创建交替布局,最简单的方法是根据循环计数是奇数还是偶数来使用条件。一个快速未经测试的例子:
<% loop $Works %>
<div class="row">
<% if $Odd %>
<div class="span8">LARGE IMAGE</div>
<div class="span4">SMALL IMAGE</div>
<% else %>
<div class="span4">SMALL IMAGE</div>
<div class="span8">LARGE IMAGE</div>
<% end_if %>
</div>
<% end_loop %>
文档参考位于http://docs.silverstripe.org/framework/en/reference/templates#position-indicators
要在循环中获取不同大小的图像,只需使用$FeaturedImage->CroppedImage(xxx,xxx)
即可。这假设你每行都有'工作'并且每件作品有两张图片,但正如我所说的那样问题不是那么清楚,所以如果我的假设不正确,你需要提供更多关于你的模型和你正在尝试的内容的信息。实现。
答案 3 :(得分:0)
只是评论您测试的加入:
这不会起作用: $ works = WorkPage :: get() - &gt; leftJoin(“File”,“\”File \“。\”ID \“= \”WorkPage \“。\”FeaturedImageID \“”);
该连接不会获取连接表的数据;本质上,你是请求工作页面对象,没有那个作为数据。如果您已经完成了加入,那么您将能够获得您之后的信息
无论如何,正如Columba所提到的那样,你可以通过调用字段来正确地获得关系,因为“一个函数”有一个并且有很多,例如$ this-&gt; hasmanyrelation()&lt;返回datalist(是ss3 :)的coorect term)。在tempate上使用$ hasmanyrelation关系时,它只是神奇地获得了集合。
此外,您应该使用Link()来获取oppinnion中文件的路径,因为它也适用于sitetree对象。