W domyślnym kontrolerze dziedziczącym po Controller_Template ustalam domyślną
ilość kolumn:
public $columns = '3columns';
W before() ustalam kolejno odpowiedni widok dla danej liczby kolumn, i przekazuje liczbę kolumn
aby załadować plik stylu dla danej opcji.
$this->template->main = View::factory($this->columns); $this->template->columns = $this->columns;
I teraz mogę ustalać sobie dla każdego kontrolera inna ilość, przykładowo:
class Controller_About extends Controller_Index { public $columns = '2columns'; public function action_index() { $this->template->main->content = View::factory('about'); } }
Oprócz tego jak już wymieniłem są default2columns.css, default3columns.css, i default.css dla tego co jest wspólne, w głównym widoku odpalam <?php echo $main ?>,
który odpala widok 2columns.php(który w rzeczywistości jest jedną kolumną) lub 3columns.php(który w rzeczywistości ma dwie kolumny - trzecia, statyczna kolumna jest na tym samym poziomie co zmienna $main), które z kolei wyświetlają co tam jeszcze chcą.
Jednak w takim rozwiązaniu nie mogę ustalić różnej ilości kolumn dla różnych akcji.
Jakie proponujecie bardziej elastyczniejsze rozwiązanie bardziej lub mniej różniące się od powyższego?
Może po prostu coś takiego, efekt chyba taki sam, choć z palca pisane, trochę więcej kodu w poszczególnych akcjach, ale można bardziej szczegółowo definiować:
class Controller_About extends Controller_Index { public $columns; public function action_index() { $this->columns = '2columns'; $this->template->columns = $this->columns; $this->template->main = View::factory($this->columns); $this->template->main->content = View::factory('about'); } }
A może jakoś fajniej można to zrobić?
Próbowałem rozszerzyć klasę View, aby można było zrobić coś w stylu:
$this->template->main = View::factory('about')->set('tekst', 'blabla')->set_columns('2columns');
co dało by efekt taki jak we wcześniejszym listingu, ale nie mogłem sobie z tym poradzić - utworzenie nowej metody to nie problem, ale oprócz tego wypadałoby chyba rozszerzyć render() w taki sposób aby w określonym przypadku widok wrzucała do widoku 2columns/3columns, który z kolei zwracać zmiennej main, plus jakaś zmianna, może set_global do określenia odpowiedniego css.
