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();
}
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.
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();
}