it-swarm.com.de

Wie bekomme ich einen Vorlagennamen in onAfterInitialise zugewiesen?

Dies scheint ein Fehler zu sein und ich habe sowohl auf 2.5.x als auch auf 3.x getestet, aber es gibt keine Möglichkeit, den zugewiesenen Vorlagennamen in onAfterInitialise mithilfe von zu erhalten

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

Was es tatsächlich macht, wenn Sie $app->getTemplate() aufrufen, schaltet es Ihre zugewiesene Vorlage auf die Standardvorlage um.

In meinem System Plugin mache ich das

public function onAfterInitialise() {

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

}

Es funktioniert gut, wenn ich es in onAfterRoute benutze, aber wie gefragt, ich brauche es in onAfterInitialise.

Kann jemand bitte eine mögliche Lösung posten, um einen zugewiesenen Vorlagennamen in onAfterInitialise zu erhalten. SQL, Joomla-Methode alles. Vielen Dank!

PDATE: Jede Methode von JFactory :: getApplication, die in onAfterInitialise aufgerufen wird, setzt die zugewiesene Vorlage auf die Standardvorlage zurück. Ich bezweifle, dass es eine Lösung dafür gibt, da selbst wenn wir $app->getMenu()->getActive() aufrufen, um die zugewiesene Vorlage anzuzeigen, unsere zugewiesene Vorlage auf die Standardvorlage zurückgesetzt wird.

Dies funktioniert nur, wenn SEF AUS ist:

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

Ich kann mich irren, aber ich denke nicht, dass es überhaupt funktionieren wird, bevor der Routing-Teil abgeschlossen ist. Einfach weil die aktive Vorlage vom Arbeitsplan abhängt.

Wenn Sie dies aus irgendeinem Grund im Ereignis onAfterInitialise tun möchten, müssen Sie wahrscheinlich die Datenbanktabelle #__menu und lies das template_style_id für das aktuelle Itemid.

7
Bakual

Dies funktioniert nur, wenn SEF AUS ist

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