2012-01-30 7 views
3

Im utilisant joomla MVC et je veux construire un formulaire qui a différents onglets qui sont des sections différentes du formulaire avec des entrées en elle. Certains onglets sont communs aux autres formulaires que j'ai besoin d'inclure. Je voudrais être en mesure de charger ce contenu commun à partir d'un fichier ou d'une vue séparée, donc je n'ai pas de code en double, plus est plus facile quand je dois faire un changement au formulaire, donc je ne dois pas le faire dans tous les formulaires. C'est comme afficher une vue dans une autre vue.joomla ajouter vue dans une autre vue

Existe-t-il un moyen d'accomplir ceci?

Répondre

9

Un Joomla! fournit la méthode loadTemplate aux vues.

Donc, si vous êtes actuellement dans un fichier tmpl chargé pour la mise edit (ie. tmpl/edit.php) vous pouvez appeler $this->loadTemplate('tab1'); et Joomla! va charger le fichier tmpl/edit_tab1.php dans la même vue que votre edit.php.

Dans cette même vue, si vous souhaitez inclure tmpl/other_tab1.php, vous devez définir temporairement la disposition à autre, par exemple. dans l'un de nos composants au cours de la Run modèle nous avons besoin d'un onglet de la Modifier le modèle, nous utilisons donc:

<?php $this->setLayout('edit'); // This is ugly 
     echo $this->loadTemplate('plan'); 
     $this->setLayout('run'); ?> 

Pour charger un modèle d'une autre vue alltogether, je pense que vous auriez temporairement sur -ride la valeur view, charge le modèle puis restaure la vue. par exemple.

$jinput = JFactory::getApplication()->input; 
$jinput->set('view', 'other'); 
$this->loadTemplate('tab2'); 
$jinput->set('view', 'original'); 

NB: ce dernier bit que je ne l'ai pas eu le temps de tester, mais il devrait fonctionner.

+0

Merci cppl, c'était l'aswer que je cherchais! – arlievanos

+1

cela fonctionne avec les vues frère avec dans le tmpl, mais il ne fonctionne pas entre les différents points de vue – themis

+1

ne pas oublier l'ECHO $ ​​this-> loadTemplate – max4ever

0

Vous pouvez charger un fichier de modèle différent pour une vue différente manuellement, en le nécessitant simplement. Ce qui suit est pour une vue appelée "nameofotherview" avec la mise en page "layoutname". Si c'est pour une vue d'administration, utilisez plutôt JPATH_COMPONENT_ADMINSTRATOR.

require(JPATH_COMPONENT_SITE . '/views/nameofotherview/tmpl/layoutname.php'); 

Rappelez-vous que les données mises en place dans la classe de vue doit être compatible avec la mise en page principale, ainsi que la mise en page que vous chargez d'ailleurs.

Un effet secondaire de ce fait est que les remplacements de modèle ne fonctionneront pas. La fonction loadTemplate effectue un require mais vérifie d'abord les chemins de modèle pour les remplacements.

Questions connexes