![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Witam,
mam pewien problem. Na stronie chciałbym mieć menu, które będzie pobierane z bazy danych. Chciałbym aby to menu było automatycznie generowane i wstawiane do szablonu. Nie mogę sobie poradzić z pełną automatyzacją tego zadania. MY_Controller.php
oraz przykładowy plik kontrolera:
W template.php wyświetlam menu poprzez:
W takiej formie wszystko działa poprawnie. Chciałbym jednak pozbyć się przypisania $this->template->menu w każdym kontrolerze. Próbowałem na różne sposoby, m.in.:
ale za każdym razem otrzymuję nieznaną zmienną $menu (odpowiedni wpis z samego kontrolera oczywiście usunąłem). Jak rozwiązać ten problem? Reasumując: w głównym szablonie chciałbym wczytać menu, które będzie generowanie dynamicznie na podstawie bazy danych (coś a'la komponent w Symfony). Pozdrawiam, pion |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 6 Dołączył: 2.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tworzysz kontroler główny np Main_Controller(ja to nazywam to u siebie) dziedziczący po Template_Controller
przykład:
Później w każdym kontrolerze dziedziczysz po Main np "class News_Controller extends Main_Controller". I masz przekazaną wartość do widoku w każdym kontrolerze. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
No właśnie nie bardzo, ponieważ $this->template nie jest obiektem tylko zwykłym stringiem. Próbowałem również zrobić coś takiego (w MY_Controller):
ale wtedy tracą się wszystkie zmienne, które są przypisywane do szablonu (w skrócie: nie działa ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 6 Dołączył: 2.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze raz, bo u siebie to wykorzystuje i nie ma najmniejszego problemu.
Main Controller
Kawałek Kontroler Nowości:
i widoku główny ustawiony wyświetlam 2 zmienne - $menu i $content, i tyle ![]() W tym przepadku mamy news i menu na jednej stronie. W kontrolerach już nie nadpisuje $this->template. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Bingo! Działa! Jest jeszcze jeden problem. Całość zrobiłem tak:
no a dalej to już nic magicznego. Jednak zawsze najpierw następuje próba wczytania szablonu template.php z katalogu views (wywołanie w Template_Controller). Niby to żaden problem: po prostu utworzyłem pusty plik views/template.php i jest on wczytywany, a później ładowany jest właściwy szablon (Config::item('shop.views').'/template'). Nie mam za bardzo koncepcji jak to elegancko zrobić... W sumie mógłbym przekopiować kod z Template_Controller i wrzucić go do Main_Controller_Core dziedzicząc równocześnie po samym Controller. Ale czy byłoby jakieś inne (lepsze) rozwiązanie? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 07:03 |