SilverStripe 3:循环中模板中的备用值
我正在尝试创建一个页面,显示持有者子页面中的最新图像。 每行将在以下示例之间交替: 大图像|小图像 小图像|大图像 大图像|小图像 等等 模板SilverStripe 3:循环中模板中的备用值,silverstripe,Silverstripe,我正在尝试创建一个页面,显示持有者子页面中的最新图像。 每行将在以下示例之间交替: 大图像|小图像 小图像|大图像 大图像|小图像 等等 模板 <div class="row"> <div class="span8"> LARGE IMAGE </div> <div class="span4"> SMALL IMAGE </div> </div> <div class="row"> <d
<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>
这仅返回图像id I;我尝试了左连接,但它不返回文件路径
$works = WorkPage::get()->leftJoin("File", "\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");
可能是您正在使用的sql查询(未经测试)我就是这样做的,不确定这是否是最好的方法,但它确实有效
$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;
}
你的问题不是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 %>
大图像
小图像
小图像
大图像
文件参考位于
要在循环中获得不同大小的图像,只需使用
$FeaturedImage->crappedimage(xxx,xxx)
。这假设你每行有一个“工作”,每一个工作有两个图像,但正如我所说的,问题不是那么清楚,所以如果我的假设不正确,你需要提供更多关于你的模型和你试图实现的信息 仅就您测试的加入发表评论:
这行不通:
$works=WorkPage::get()->leftJoin(“文件”,“文件”ID“=”WorkPage\”FeaturedImageID\”)
该联接不获取联接表的数据;本质上,您是requestion workpage对象,它没有数据。如果你以其他方式加入,你将能够获得你想要的信息
无论如何,正如Columba allready所提到的,您可以通过调用字段来正确地获取关系,因为“函数”有一个也有多个,例如$this->hasmanyrelation()<返回数据列表(这是ss3的正确术语:))。在tempate上使用$hasmanyrelation关系时,它会神奇地获取集合
此外,您还应该使用Link()来获取我所在位置文件的路径,因为该路径也适用于sitetree对象。在模板中,我可以使用$thismyimage创建图像,我还可以使用$thismyimage->crappedimage(770390)创建图像并将其裁剪到指定大小。当我使用$works=WorkPage::get()时,如何在控制器中执行上述操作;现在,我下面的答案返回了文件路径,因此我不能使用$thismyimage->cropedimage(770390)。如何在下面的答案中的图像上使用图像功能?我想每个
工作页
都与图像
对象功能图像
有一个关系?因此,只需使用$work->FeaturedImage()
就可以取回图像对象。如果使用$Page.FeaturedImage
和$Page.FeaturedImage->setWidth(?)
循环浏览工作页,这也可以直接在模板中工作。
$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;
}
<% 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 %>