it-swarm-id.com

Bagaimana cara mendapatkan nama templat yang ditugaskan di onAfterInitialise?

Ini kelihatannya seperti bug dan saya uji pada 2.5.x dan 3.x tetapi tidak ada cara untuk mendapatkan nama templat yang ditugaskan di onAfterInitialise dengan menggunakan

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

Apa yang sebenarnya dilakukannya setelah Anda memanggil $app->getTemplate() ia mengganti templat yang Anda tetapkan ke yang default.

Di plugin sistem saya, saya melakukan ini

public function onAfterInitialise() {

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

}

Ini berfungsi dengan baik jika saya menggunakannya di onAfterRoute tetapi seperti yang diminta saya membutuhkannya di dalam onAfterInitialise.

Adakah yang bisa mengirimkan solusi yang mungkin untuk mendapatkan nama templat yang ditugaskan di onAfterInitialise. SQL, apa pun metode joomla. Terima kasih!

PDATE: Metode apa pun dari JFactory :: getApplication ketika dipanggil di dalam onAfterInitialise, setel ulang templat yang Anda tetapkan ke yang default. Saya ragu ada solusi untuk ini karena bahkan jika kita memanggil $app->getMenu()->getActive() untuk melihat templat yang ditugaskan templat yang ditugaskan kepada kita disetel ulang ke default.

Ini hanya berfungsi jika SEF MATI:

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

Saya mungkin salah tetapi saya tidak berpikir itu akan berfungsi sama sekali sebelum bagian routing dilakukan. Hanya karena templat aktif bergantung pada perutean.

Jika Anda ingin melakukannya di acara onAfterInitialise untuk alasan apa pun, Anda mungkin perlu menanyakan tabel database #__menu dan baca template_style_id untuk Itemid saat ini.

7
Bakual

Ini hanya berfungsi jika SEF dimatikan

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