it-swarm-eu.dev

Come ottenere il nome del modello assegnato in onAfterInitialise?

Sembra un bug e ho testato su 2.5.xe 3.x ma non c'è modo di ottenere il nome del modello assegnato in onAfterInitialise usando

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

Che cosa fa effettivamente quando chiami $app->getTemplate() cambia il modello assegnato a quello predefinito.

Nel mio plugin di sistema lo faccio

public function onAfterInitialise() {

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

}

Funziona bene se lo uso in onAfterRoute ma, come richiesto, ne ho bisogno in onAfterInitialise.

Qualcuno può pubblicare la possibile soluzione per ottenere il nome del modello assegnato in onAfterInitialise. SQL, metodo joomla qualunque cosa. Grazie!

PDATE: Qualsiasi metodo da JFactory :: getApplication quando chiamato in onAfterInitialise, ripristina il modello assegnato a quello predefinito. Dubito che ci sia una soluzione a questo poiché, anche se chiamiamo $app->getMenu()->getActive() per vedere il modello assegnato, il nostro modello assegnato viene ripristinato a quello predefinito.

Funziona solo se SEF è OFF:

/**
 * 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

Potrei sbagliarmi, ma non credo che funzionerà affatto prima che la parte di routing sia terminata. Semplicemente perché il modello attivo dipende dal routing.

Se vuoi farlo nell'evento onAfterInitialise per qualsiasi motivo, probabilmente dovrai interrogare la tabella del database #__menu e leggi il template_style_id per l'attuale Itemid.

7
Bakual

Funziona solo se SEF è OFF

/**
 * 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