Używanie większej ilości modeli w jednym widoku

Kategoria: Kurs pisania komponentów dla Joomla 1.5 [MVC] Utworzono: wtorek, 30, wrzesień 2008 Opublikowano: wtorek, 30, wrzesień 2008 Wojciech Romanek Drukuj E-mail

Opis załadowania drugiego dowolnego modelu który opisałem w lekcji 4 nie został przezemnie sprawdzony - byłem pewien że już kiedyś to wykorzystywałem, jednak okazało się, że ten sposób nie działa. Ale nic straconego - tutaj przeczytasz jak to zrobić!

Dodanie dodatkowego modelu do naszego widoku wymaga trochę więcej nakładu pracy niż tego się spodziewałem, ale to nic... postaram się Wam to szybko i konkretnie wytłumaczyć. Po pierwsze musimy zmodyfikować metodę display naszego konktrolera! Musimy usunąć z niej wiersz: parent::display(); a w jego miejsce wstawiamy instrukcję switch:

switch(JRequest::getVar('view'))
{
	case 'nazwa_widoku_1':
		$view =& $this->getView( 'nazwa_widoku_1', 'html');
		$view->display();
	break;
	default:
		$view =& $this->getView( 'Witaj', 'html');
		$view->setModel($this->getModel('witaj', 'WitajModel'), true);
		$view->setModel($this->getModel('drugi', 'WitajModel'));
		$view->display();
}

Poprzez instrukcję switch wybieramy nasz widok. Następnie tworzymy instancję tego widoku metodą getView - pierwszy parametr to nazwa widoku drugi to typ (html, pdf, raw lub inny). Metoda ta posiada jeszcze dwa argumenty prefiks który domyślnie ustawiony jest na View oraz config - tablica konfiguracyjna. Narazie nie potrzebujemy jej używać...

Następna rzecz jaką robimy to przypisanie do naszego widoku modeli, używamy do tego metody setModel która jako pierwszy argument przyjmuje referencję do modelu którą w tym przypadku pobieramy poprzez getModel. Drugi argument to wartość logiczna i odpowiedzialny jest on za domyślny model. Jeśli ustawione true to dany model jest domyślny.Kiedy już wszystko mamy przygotowane i możemy wyświetlić nasz widok metodą display();

Teraz możemy przystąpić do używania metod naszego modelu. Mając np w modelu witaj metody: getData(), getUsers() to w widoku możemy je wywołać w sposób następujący:

$data =& $this->get('data');
$users =& $this->get('users');

Tak jak wyżej możemy odnosić się jedynie do modeli domyślnych. Metody z innych modeli wywołujemy w sposób następujący (metoda getTelefony):

$telefony =& $this->get('telefony', 'drugi');

Powyższe wywołanie różni się jedynie tym że jako drugi argument metody get musimy podać nazwę modelu zarejestrowanego przez nas w kontrolerze.

Jedna mała uwaga, chcąc korzystać z modeli które nie należą do naszego komponentu lub znajdują się w katalogu administratora w wywołujemy go z frontendu lub na odwrót to musimy w kontrolerze jeszcze wywołać metodę:

$this->addModelPath( ścieżka_do_katalogu_z_modelem );

Metoda musi być wywołana przed rejestracją modelu.

Odsłony: 7530