web-dev-qa-db-fra.com

Comment obtenir le nom du modèle assigné dans onAfterInitialise?

Cela ressemble à un bogue et j’ai testé à la fois sur les versions 2.5.x et 3.x, mais il n’existe aucun moyen d’obtenir un nom de modèle attribué dans onAfterInitialise en utilisant

$app = JFactory::getApplication();
$templatename =  $app->getTemplate();
    echo $templatename;

En réalité, une fois que vous avez appelé $app->getTemplate(), le modèle que vous avez attribué est remplacé par le modèle par défaut.

Dans mon plugin système, je le fais

public function onAfterInitialise() {

    $app = JFactory::getApplication();
    $templatename =  $app->getTemplate();
    echo $templatename;

}

Cela fonctionne bien si je l’utilise dans onAfterRoute, mais comme demandé, j’en ai besoin à l’intérieur de onAfterInitialise.

Quelqu'un peut-il s'il vous plaît poster une solution possible pour obtenir le nom du modèle attribué dans onAfterInitialise. SQL, méthode joomla n'importe quoi. Merci!

PDATE: Toute méthode de JFactory :: getApplication, lorsqu'elle est appelée dans onAfterInitialise, réinitialise le modèle attribué à celui par défaut. Je doute qu'il y ait une solution à ce problème car même si nous appelons $app->getMenu()->getActive() pour voir le modèle attribué, notre modèle attribué est réinitialisé à celui par défaut.

Ceci ne fonctionne que si SEF est désactivé:

/**
 * Get the assigned frontend template name
 *
 * @return  string  - template name
 */
public $assignedTemplate = '';

public function getAssignedTemplate() {

    $jinput   = JFactory::getApplication()->input;
    $current  =  $jinput->getInt('Itemid');

    $db    = JFactory::getDbo();
    $query = $db->getQuery( true );

    $query
    ->select($db->quoteName(array('m.template_style_id', 't.template')))
    ->from($db->quoteName('#__menu', 'm'))
    ->join('INNER', $db->quoteName('#__template_styles', 't') . ' ON (' . $db->quoteName('m.template_style_id') . ' = ' . $db->quoteName('t.id') . ')')
    ->where($db->quoteName('m.id') . ' = '.$current.'');


    // Make sure there aren't any errors
    try{

        $db->setQuery($query);
        $currentTemplate = $db->loadObjectList();
        if($currentTemplate){
            $this->assignedTemplate = $currentTemplate[0]->template;
        }
        //

    }catch (RuntimeException $e){
        echo $e->getMessage();
        exit;
    }

    return $this->assignedTemplate;
}



public function onAfterInitialise() {

    echo $this->getAssignedTemplate();

}
5
Dan

Je peux me tromper, mais je ne pense pas que cela fonctionnera avant la fin du routage. Tout simplement parce que le modèle actif dépend du routage.

Si vous souhaitez le faire dans l'événement onAfterInitialise pour une raison quelconque, vous devez probablement interroger la table de la base de données #__menu et lisez le template_style_id pour le Itemid actuel.

7
Bakual

Cela ne fonctionne que si SEF est désactivé

/**
 * Get the assigned frontend template name
 *
 * @return  string  - template name
 */
public $assignedTemplate = '';

public function getAssignedTemplate() {

    $jinput   = JFactory::getApplication()->input;
    $current  =  $jinput->getInt('Itemid');

    $db    = JFactory::getDbo();
    $query = $db->getQuery( true );

    $query
    ->select($db->quoteName(array('m.template_style_id', 't.template')))
    ->from($db->quoteName('#__menu', 'm'))
    ->join('INNER', $db->quoteName('#__template_styles', 't') . ' ON (' . $db->quoteName('m.template_style_id') . ' = ' . $db->quoteName('t.id') . ')')
    ->where($db->quoteName('m.id') . ' = '.$current.'');


    // Make sure there aren't any errors
    try{

        $db->setQuery($query);
        $currentTemplate = $db->loadObjectList();
        if($currentTemplate){
            $this->assignedTemplate = $currentTemplate[0]->template;
        }
        //

    }catch (RuntimeException $e){
        echo $e->getMessage();
        exit;
    }

    return $this->assignedTemplate;
}



public function onAfterInitialise() {

    echo $this->getAssignedTemplate();

 }
1
Dan