it-swarm-vi.com

Làm cách nào để có được tên mẫu được gán trong onAfterInitialise?

Đây có vẻ như là một lỗi và tôi đã thử nghiệm trên cả 2.5.x và 3.x nhưng không có cách nào để có được tên mẫu được gán trong onAfterInitialise bằng cách sử dụng

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

Những gì nó thực sự làm khi bạn gọi $app->getTemplate() nó sẽ chuyển mẫu được gán của bạn sang mẫu mặc định.

Trong plugin hệ thống của tôi, tôi làm điều này

public function onAfterInitialise() {

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

}

Nó hoạt động tốt nếu tôi sử dụng nó trong onAfterRoute nhưng khi được hỏi tôi cần nó bên trong onAfterInitialise.

Bất cứ ai cũng có thể xin vui lòng gửi giải pháp có thể để có được tên mẫu được gán trong onAfterInitialise. SQL, phương pháp j Joomla bất cứ điều gì. Cảm ơn bạn!

CẬP NHẬT : Bất kỳ phương thức nào từ JFactory :: getApplication khi được gọi trong onAfterInitialise, đặt lại mẫu được gán của bạn về mặc định. Tôi nghi ngờ có bất kỳ giải pháp nào cho việc này vì ngay cả khi chúng ta gọi $app->getMenu()->getActive() để xem mẫu được gán, mẫu được gán của chúng ta được đặt lại về mặc định.

Điều này chỉ hoạt động nếu SEF TẮT :

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

Tôi có thể sai nhưng tôi không nghĩ nó sẽ hoạt động trước khi hoàn thành phần định tuyến. Đơn giản vì mẫu hoạt động phụ thuộc vào định tuyến.

Nếu bạn muốn làm điều đó trong sự kiện onAfterInitialise vì bất kỳ lý do gì, bạn có thể cần phải truy vấn bảng cơ sở dữ liệu #__menu và đọc template_style_id cho hiện tại Itemid.

7
Bakual

Điều này chỉ hoạt động nếu SEF TẮT

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