2012-11-14 65 views
7

默認parent::display($tpl);加載components/com_my_component/views/my_component/tmpl/default.php,但在某些情況下,我需要加載其他php文件,它位於default.php附近的同一文件夾中(例如components/com_my_component/views/my_component/tmpl/lol.php)。如何從view.html.php做到這一點。如何更改Joomla視圖中的加載佈局?

P.S.

嘗試加載loadTemplatesetLayout方法沒有運氣。

+0

我認爲這是layout = lol。 – Irfan

+0

@Ifan同樣的狗屎,但現在加載默認 – user1692333

+0

你能否粘貼你傳遞的完整url? – Irfan

回答

10

自己解決了這個問題。需要使用方法setLayout並注意輸入語法

$this->setLayout('dafault:lol'); 
parent::display($tpl); 
+0

我在控制器中發生錯誤致命錯誤:調用未定義的方法FcseController :: setLayout()在/var/www/pygmaxia2.gr/components/com_fcse/controller.php上第33行和行中的代碼是this $ this-> setLayout('dafault:test'); 任何想法? – themis

+0

哦,我做了$ view = new JView(); \t \t \t \t $ view-> setLayout('dafault:test');它的工作:) – themis

+0

這段代碼將導致joomla忽略'佈局'請求參數。請參閱我的答案:http://stackoverflow.com/a/31833510/1031312 – Ozzy

2

默認情況下是,Joomla查找的關鍵字layout的URL來決定顯示哪些佈局。如果此變量爲空或不存在,則將加載tmpl/default.php佈局。

通過編輯您的view.html.php文件,您可以使用JView API設置默認佈局,例如, $this->setLayout('lol')將使URL example.com/yourview等同於example.com/yourview?layout=lol

但是,這一改變將導致Joomla重寫默認行爲,以便layout請求將被忽略。這意味着請求example.com/yourview?layout=lmao也將顯示example.com/yourview = example.com/yourview?layout=lol

可以通過圍繞setLayout功能附加的條件很容易地解決這一點,以便僅當layout關鍵字不存在,那麼你將設置默認佈局lol,例如

<?php 
    # ... 

     function display($tpl = null) { 
     # ... 

     # Edit : Set the default layout to 'lol' 
     $layout = JRequest::getWord('layout', ''); 
     if (empty($layout)) $this->setLayout("lol"); 

     // Display the view 
     parent::display($tpl); 
     } 

    # ... 
0

我一直回到這個,我還沒有找到一個令人滿意的解決方案。

什麼工作,從J1.5直至J3.4,對我來說一直是設置view.html.php

的$ TPL變量如果$第三方物流爲空或「」然後TMPL /default.php默認顯示。

如果將$ tpl更改爲字符串,例如$ tpl =「stacker」然後它會查找並顯示tmpl/default_stacker.php

我已經看到了各種不同的理論,在MVC中改變它,以便它不需要default_text。例如tmpl/stacker.php 沒有爲我工作。