0

我正在尝试创建一个页面,显示来自持有者子页面的最新图像。每行将在以下示例之间交替:

大图 | 小图像

小图 | 大图

大图 | 小图像

等等....

模板.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 中的最新图像

控制器.php

$works = WorkPage::get();

这仅返回图像 ID,我尝试了左连接,但它不返回文件路径。

$works = WorkPage::get()->leftJoin("File", "\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");
4

4 回答 4

0
File::get()->
    leftJoin("SiteTree", "\"SiteTree\".\"ParentID\" = ".$this->ID)->
    leftJoin("WorkPage", "\"WorkPage\".\"ID\" = \"SiteTree\".\"ID\"")->
    where("\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");

可能是您所追求的 sql 查询(虽然未经测试)

于 2013-02-26T22:14:18.333 回答
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;

}
于 2013-02-27T00:53:44.030 回答
0

只是为了评论您测试的加入:

这不起作用: $works = WorkPage::get()->leftJoin("File", "\"File\".\"ID\" = \"WorkPage\".\"FeaturedImageID\"");

该联接没有得到联接表的数据;本质上,您是请求工作页对象,没有将其作为数据。如果您以相反的方式完成了加入,您将能够获得您所追求的信息

无论如何,正如 Columba 已经提到的那样,您可以通过调用该字段来正确获取关系,因为“函数”有一个并且有很多,例如 $this->hasmanyrelation() < 返回数据列表(是 ss3 的 coorect 术语 :) )。当在 tempate 上使用 $hasmanyrelation 关系时,它会神奇地获得集合。

此外,您应该使用 Link() 在我的意见中获取文件的路径,因为它也适用于 sitetree 对象。

于 2013-02-28T13:16:14.497 回答
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). 这假设您每行都有“工作”并且每个工作有两个图像,但正如我所说的问题并不那么清楚,所以如果我的假设不正确,您将需要提供有关您的模型和您正在尝试的内容的更多信息达到。

于 2013-02-28T03:57:15.697 回答