Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> różna ilość kolumn (widok), mvc
nmts
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


Najpierw opiszę to co mam aktualnie. Na bazie Kohany.

W domyślnym kontrolerze dziedziczącym po Controller_Template ustalam domyślną
ilość kolumn:
  1. 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.
  1. $this->template->main = View::factory($this->columns);
  2. $this->template->columns = $this->columns;


I teraz mogę ustalać sobie dla każdego kontrolera inna ilość, przykładowo:
  1. class Controller_About extends Controller_Index {
  2.  
  3. public $columns = '2columns';
  4.  
  5. public function action_index()
  6. {
  7. $this->template->main->content = View::factory('about');
  8. }
  9. }


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ć:
  1. class Controller_About extends Controller_Index {
  2.  
  3. public $columns;
  4.  
  5. public function action_index()
  6. {
  7. $this->columns = '2columns';
  8. $this->template->columns = $this->columns;
  9. $this->template->main = View::factory($this->columns);
  10. $this->template->main->content = View::factory('about');
  11. }
  12. }


A może jakoś fajniej można to zrobić?

Próbowałem rozszerzyć klasę View, aby można było zrobić coś w stylu:
  1. $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. (IMG:style_emoticons/default/snitch.gif)

Ten post edytował nmts 3.08.2010, 19:14:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mógłbyś sobie rozszerzyć kontroler o jakąś metodę typu: podaj nazwę widoku, podaj zmienne do niego (to co robi teraz View::factory()) + podaj nazwę szablonu (2columns etc). Kod takej metody ograniczyłby się do:
  1. protected function abc($view, array $data = array(), $style = null) {
  2. $style = $style ?: 'default';
  3. $this->template->templateStyle = $style;
  4. $this->template->main = View::factory($style);
  5. $this->template->content = View::factory($view, $data);
  6. }


btw: co to ma wspólnego z MVC?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 20:39