it-swarm-es.tech

¿Cómo obtener el nombre de plantilla asignado en onAfterInitialise?

Esto parece un error y probé en 2.5.xy 3.x, pero no hay forma de obtener el nombre de plantilla asignado en onAfterInitialise usando

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

Lo que realmente hace una vez que llamas a $app->getTemplate() cambia tu plantilla asignada a la predeterminada.

En mi plugin del sistema hago esto

public function onAfterInitialise() {

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

}

Funciona bien si lo uso en onAfterRoute pero, según me preguntaron, lo necesito dentro de onAfterInitialise.

¿Alguien puede publicar una posible solución para obtener el nombre de plantilla asignado en onAfterInitialise. SQL, método joomla cualquier cosa. ¡Gracias!

ACTUALIZACIÓN: Cualquier método de JFactory :: getApplication cuando se llama dentro de onAfterInitialise, restablece la plantilla asignada a la predeterminada. Dudo que haya alguna solución para esto, ya que incluso si llamamos a $app->getMenu()->getActive() para ver la plantilla asignada, nuestra plantilla asignada se restablece a la predeterminada.

Esto funciona solo si SEF está desactivado:

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

Puedo estar equivocado, pero no creo que funcione en absoluto antes de que se complete la parte de enrutamiento. Simplemente porque la plantilla activa depende de la ruta.

Si desea hacerlo en el evento onAfterInitialise por cualquier razón, es probable que necesite consultar la tabla de la base de datos #__menu y lee el template_style_id para el actual Itemid.

7
Bakual

Esto funciona solo si SEF está apagado

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