web-dev-qa-db-fra.com

Définir le modèle préféré avec le parent: display ()?

J'ai un site qui utilise 2 styles de modèles pour 2 noms de domaine différents s'exécutant sur la même installation de Joomla. (Les deux ont le même modèle racine.)

Je crée un composant personnalisé et une tâche spécifique doit afficher une vue. J'utilise parent :: display () pour changer de vue.

Le problème que je rencontre est que le modèle A est le modèle par défaut. Lorsque j'exécute cette tâche à partir d'une page du modèle B, j'obtiens les résultats souhaités, mais du modèle A.

J'ai besoin d'obtenir les résultats souhaités sur le même style de modèle que celui utilisé lorsque la tâche est appelée.

Comment savoir quel style est actif lorsque la tâche est appelée? Comment définir le bon style lorsque j'affiche le résultat?

Merci d'avance pour votre aide. Je suis coincé!

1
Deleyna

Vous pouvez forcer le style de template comme ceci:

     $templateStyleId = 3; // set here the template style id
     $app = JFactory::getApplication();
     JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_templates/tables');
     $tmplStyle = JTable::getInstance('Style', 'TemplatesTable');
     $tmplStyle->load($templateStyleId);

     if (!empty($tmplStyle->template)){
        $app->setTemplate($tmplStyle->template, $tmplStyle->params);
     }
2
Dennis Heiden

Un ami m'a fait remarquer cela.

Le modèle est défini par l'élément de menu actif. S'il n'y a pas d'élément de menu actif, il n'y a pas de modèle actif, il passe donc au modèle par défaut.

Dans view.html.php pour la vue avec laquelle je travaillais, j'avais une fonction pour préparer le document. Je devais ajouter/Tweak le code suivant:

protected function _prepareDocument()
    {
        $app   = JFactory::getApplication();
        $menus = $app->getMenu();
        $menu = $menus->getActive();
        // If the active menu item isn't set, we lose the template
        if (!$menu) {
        $menus->setActive(573);
        }
}

L'identifiant d'élément de menu actif peut être tout ce dont vous avez besoin. J'ai créé un élément de menu sur un menu masqué pour le représenter (ce qui signifie que je peux également ajouter des modules, etc. à la page), puis j'ai pris le numéro d'identification du gestionnaire de menus dans la zone d'administration.

1
Deleyna