it-swarm-tr.com

OnAfterInitialise içinde atanmış şablon adı nasıl alınır?

Bu bir hata gibi görünüyor ve hem 2.5.x hem de 3.x üzerinde test ettim ama kullanarak onAfterInitialise içinde atanmış şablon adı almanın bir yolu yok

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

$app->getTemplate() öğesini çağırdığınızda gerçekte ne yapar? Atanmış şablonunuzu varsayılan şablon olarak değiştirir.

Sistem eklentimde bunu yapıyorum

public function onAfterInitialise() {

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

}

onAfterRoute içinde kullanırsam iyi çalışır, ancak istendiği gibi onAfterInitialise içinde ihtiyacım var.

Herkes onAfterInitialise içinde atanmış şablon adı almak için olası bir çözüm gönderin lütfen. SQL, joomla yöntemi bir şey. Teşekkür ederim!

PDATE: onAfterInitialise içinde çağrıldığında JFactory :: getApplication yöntemlerinden herhangi biri, atanmış şablonunuzu varsayılana sıfırlar. Atanmış şablonu görmek için $app->getMenu()->getActive() çağrsak bile atanan şablonumuz varsayılana sıfırlanır.

Bu sadece SEF KAPALI ise çalışır:

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

Yanılıyor olabilirim ama yönlendirme kısmı yapılmadan önce işe yarayacağını sanmıyorum. Etkin şablon yönlendirmeye bağlı olduğu için.

Herhangi bir nedenle onAfterInitialise etkinliğinde yapmak istiyorsanız, büyük olasılıkla #__menu ve template_style_id geçerli Itemid için.

7
Bakual

Bu sadece SEF KAPALI olduğunda çalışır

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