2015-03-11 3 views
1

Я пытаюсь переопределить шаблон страницы в зависимости от размера изображения. Когда я проверяю конвейер с помощью showtemplate, он говорит, что правильный шаблон является рендерингом, но факт, что он по умолчанию. Мой контроллер нижеSilverStripe Overiding Template SS3.1.10

class Artwork_Controller extends Page_Controller { 

    private static $allowed_actions = array (
    ); 

    public function init() { 
     parent::init(); 

     $image = $this->OrderedImages()->first(); 

     if($image && $ratio = $image->getRatio()) { 

      if($ratio > 1.2) { 
       $this->renderWith("ArtworkWide"); 
      } elseif ($ratio < 0.8) { 
       $this->renderWith("ArtworkNarrow"); 
      } else { 
       $this->renderWith("Artwork"); 
      } 

     } 

    } 

} 

Если я впрыснуть Debug в блоке, если он оказывает на странице, так что это правильно звонить. Но быть закрытым в последней точке трубопровода

ответ

1

ViewableData::renderWith() возвращает объект HTMLText, с которым вы ничего не делаете.

SilverStripe не передает данные для вывода волей-неволей, как это сделал CodeIgniter.

Что вы ищете это:

public function index() { //this is important - do not perform this in init! 

    $image = $this->OrderedImages()->First(); 
    $ratio = $image->Ratio; 

    if($ratio > 1.2) $layoutTemplate = 'ArtworkWide'; 
    if($ratio < 0.8) $layoutTemplate = 'ArtworkNarrow'; 

    //the array/second element is redundant if your template is a 'main' template, not a 'Layout' one. 
    return $image ? $this->renderWith([$layoutTemplate, Page]) : $this; 
} 
Смежные вопросы