0

ホルダーの子ページから最新の画像を表示するページを作成しようとしています。各行は、次の例の間で交互に表示されます。

大きな画像 | 小さい画像

小さな画像 | 大きな画像

大きな画像 | 小さい画像

等々....

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\"");
4

4 に答える 4

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). これは、行ごとに「作品」があり、各作品に2つの画像があることを前提としていますが、質問が明確ではないので、私の仮定が間違っている場合は、モデルと試していることについてより多くの情報を提供する必要があります達成する。

于 2013-02-28T03:57:15.697 に答える
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\"");

その結合は、結合されたテーブルのデータを取得しません。本質的に、あなたはそれをデータとして持っていないリクエストワークページオブジェクトです。逆に参加した場合は、必要な情報を取得できます

とにかく、コロンバがすでに述べたように、「関数」には1つと多くのフィールドがあるため、フィールドを呼び出すことで関係を正しく取得できます。たとえば、 $this->hasmanyrelation() < はデータリストを返します(ss3の正しい用語でした:))。テンプレートで $hasmanyrelation リレーションを使用すると、魔法のようにコレクションが取得されます。

また、Link() を使用して、私の意見でファイルへのパスを取得する必要があります。これは、sitetree オブジェクトでも機能するためです。

于 2013-02-28T13:16:14.497 に答える