2013-02-26 53 views
0

我試圖創建一個頁面,顯示持有者的子頁面中的最新圖像。 下面的示例中的每一行將交替顯示:SilverStripe 3:循環中的模板中的替代值

大圖|小圖片

小圖片|大圖像

大圖|小圖片

等等....

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> 

我怎麼可以處理,在模板文件?

我試圖寫一個自定義的函數來處理該架控制器中的最新畫面

Controller.php這樣

$works = WorkPage::get(); 

這隻返回圖片ID,我,已經盡力左連接但它不返回文件路徑。

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

在模板中,我可以使用$ ThisIsMyImage創建圖像 我也可以使用$ ThisIsMyimage-> CroppedImage(770,390)創建圖像並將其裁剪爲指定尺寸。當我使用$ works = WorkPage :: get()時,如何在Controller中執行上述操作? 目前我的答案下面返回的文件路徑,所以我不能使用$ ThisIsMyimage-> CroppedImage(770,390)。 如何在下面的答案中使用圖像功能? – user742736 2013-02-27 01:04:23

回答

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

可能是sql查詢你以後(雖然未經測試)

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

我想每個'WorkPage'都與'Image'對象具有has_one關係'FeaturedImage'?所以你可以通過使用'$ work-> FeaturedImage()'來獲取Image對象。如果你用'$ Page.FeaturedImage'和'$ Page.FeaturedImage-> setWidth(??)'循環工作頁面,這也可以在模板中直接使用。 – colymba 2013-02-27 07:29:55

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)在循環中得到不同大小的圖像。這假設你每行有'工作',每個工作有兩個圖像,但正如我所說的問題不是那麼清楚,所以如果我的假設是不正確的,你需要提供更多關於你的模型和你想要什麼實現。

0

只是對你的評論你一起測試:

這不會工作: - 「\」 $工作= WorkPage ::得到()> leftJoin( 「文件」, 「\」 文件\ ID \ 「= \」WorkPage \「。\」FeaturedImageID \「」);

該連接沒有得到連接表的數據;實質上,你是問題的工作頁面對象,而沒有那樣的數據。如果你已經完成加入另一個周邊你將能夠得到你後的信息

不管怎麼說,作爲Columba已經提到你可以通過調用該字段作爲「一個函數」有一個,並有許多正確的關係,例如$ this-> hasmanyrelation()<返回數據列表(是ss3的那個coorect項:))。當在tempate上使用$ hasmanyrelation關係時,它只是神奇地獲得集合。

此外,您應該使用Link()獲取我的oppinnion中的文件的路徑,因爲它也適用於sitetree對象。