0

ホルダーページの子ページから画像を表示する関数を作成しようとしています。

SilverStripe にはテンプレートに関するいくつかの機能が欠けているため、すべてをコントローラーで処理するのが最善であると考えました。

私が必要とするいくつかの条件文がありますが、これはphpでしか実行できません。

Controller.php

public function LatestWork() {

$works = WorkPage::get();

$i = 1;
$html = "";
foreach ($works as $work) {

  //Build the IMage Object so we can add it to the Work Object
  $ImageObj = File::get()->byID($work->FeaturedImageID);

  if ($this->is_odd($i)) {
    $html .= "<div class='row'>";
    $span = "span8";
  } else {
    $span = "span4";
  }
  $html .= "<div class = '$span'>" . $ImageObj->croppedImage(200,100)  . "</div>";
  if ($this->is_even($i)  || $i == $works->Count()) {
    $html .= "</div>";
  }
  $i++;
}

return $html;
}

ビューで処理されると、div とスパンは表示されますが、画像は表示されません。コードにはさらに条件がありますが、これは単なる基本バージョンです。代わりに「Image_Cached」と表示されます。

画像を表示させるにはどうすればよいですか?

4

1 に答える 1

1

コントローラ:

public function LatestWork() {
    $rows=new ArrayList();
    foreach(WorkPage::get() as $workPage){
        if (!isset($bucket)){
              $bucket = new ArrayList();
              $bucket->push($workPage);
              $rows->push($bucket);
        } else {
              $bucket->push($workPage);
              unset($bucket);
        }
    }
    return $rows;
}

テンプレート:

<% loop LatestWork %>
    <div class="row">
    <% if Odd %>
        <div class="span-8">
            <% with $Me.First %>$FeaturedImage.CroppedImage(200,100)<% end_with %>
        </div>
        <div class="span-4">
            <% with $Me.Last %>$FeaturedImage.CroppedImage(100,50)<% end_with %>
        </div>
    <% else %>
        <div class="span-4">
            <% with $Me.First %>$FeaturedImage.CroppedImage(100,50)<% end_with %>
        </div>
        <div class="span-8">
            <% with $Me.Last %>$FeaturedImage.CroppedImage(200,100)<% end_with %>
        </div>
    <% end_if %>
    </div>
<% end_loop %>

表示ロジックがコントローラーを乱雑にしないように、それを行う SS の方法になります。

于 2013-02-27T03:59:23.353 に答える