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 %>