2013-02-27 3 views
0

Я пытаюсь написать функцию, которая отображает изображения с дочерних страниц на странице владельца.SilverStripe 3: Image Объект в функции контроллера

Поскольку у 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; 
} 

Когда его обработке в представлении дивы и пролеты есть, но изображение не является. В коде есть больше условий, но это всего лишь базовая версия. Вместо этого отображается «Image_Cached».

Как я могу отобразить изображение?

+0

При возврате $ ImageObj -> croppedImage (200 100) без html или чего-нибудь еще, например: return $ ImageObj-> croppedImage (200 100). "" он отображает изображение, но как только вы добавляете что-либо, оно отображает Image_cache – user742736

ответ

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, чтобы сделать это, так что ваша логика отображения не загромождать ваш контроллер

+0

Hi JF, Еще раз спасибо. Как я уже говорил, есть немного более условная логика там, где SS путь не сможет это сделать. Я попытался сделать это с помощью PHP. Если есть способ SS, чтобы чередовать каждую строку в примере, который у меня есть здесь http://stackoverflow.com/questions/15098248/silverstripe-3-alternate-value-in-template-within-a-loop?rq = 1, то это будет фантастично. – user742736

+0

Span8 будет иметь увеличенное изображение (Cropped), а Span4 будет иметь меньшее изображение (обрезанное). Каждая вторая строка затем переключается на Span4, сначала начинается, а Span8 начинает второй – user742736

+0

. Я обновил свой ответ с помощью того, что может быть подходом к вашему вопросу. – jfbarrois

Смежные вопросы