Spulciando il codice della classe JController ho notato che nel metodo display() vengono eseguite le seguenti principali operazione:
- creazione della view
- settaggio del template alla view
- creazione del model e conseguente assegnazione alla view
Quindi il metodo classico di richiamare la view da un task del controller con parent::display() ha l'effetto di creare una nuova istanza del model anche se ne era già stata creata una nel controller stesso.
Volendo invece assegnare alla view l'istanza del model già creata nel controller va scavalcato il metodo parent::display istanziando direttamente la view, assegnargli il template, assegnargli il model (quello già creato) ed eseguirne il display.
Tradotto in codice dovrebbe essere come segue:
// Inizializza il model per le recensioni
$model =& $this->getModel('recensioni');
// Crea la view, assegna il model
$document =& JFactory::getDocument();
$viewType = $document->getType();
$view = $this->getView("recensioni", $viewType);
$view->setModel( $model, true );
// Setta il template da visualizzare e lo visualizza
$view->setLayout( JRequest::getCmd( 'layout', 'default' ) );
$view->display();
Quanto sopra dovrebbe sostituire la più classica metodologia seguente
JRequest::setVar('view', 'recensioni');
parent::display();
Questa è stata l'unica soluzione che sono riuscito a trovare.
Sono bene accette soluzioni alternative specialmente se più semplici.