2015-11-05 159 views
0

我想加載另一個控制器內的控制器。無法從另一個控制器加載控制器

$data['com_top_menu'] = $this->load->controller('account/com_top_menu'); 

然而,這似乎當我試圖加載位於同一文件夾作爲控制器我從加載它的控制器到不行。

嘗試從其他文件夾加載控制器,似乎也不加載。它只能從「通用」控制器文件夾加載。

編輯:

實際上,似乎控制器正在加載。如果我在加載的控制器的中間放置一個回顯,它將在模板呈現之前顯示輸出。因此,它看起來像控制器加載,只是不通過渲染的視圖輸出任何東西,除非它是公用文件夾內的控制器。 文件全部到位,控制器加載,它只是不通過視圖輸出任何東西。

+0

還有其他嗎?控制器'$ this-> load-> controller('account/com_top_menu')'你確定它工作正常嗎? –

+0

我沒有使用iis。它在LAMP堆棧上運行。 – BeoWulf

回答

1

加載控制器的一些事情 -
1st - 您只能從相同的文件夾(admin/catalog)加載控制器。
2nd - 你可以從任何子文件夾加載控制器,只需要傳遞正確的加載路徑。
3rd - 如果Opencart沒有該文件而不會顯示任何錯誤,則結果將爲空/錯誤。
4th - 如果你正在定義任何函數名稱,那麼它將調用該函數,否則將調用索引函數,所以在你的案例索引。

5日 - 請使用

return $this->load->view('your.tpl', $data); 

而不是

$this->response->setOutput($this->load->view('your.tpl', $data)); 

6日 - 請允許從PHP /管理您的調試模式,這樣你就知道任何錯誤,如果你的代碼拋出。清除你的error.log,然後嘗試加載控制器。

7 - 如果這些所有的點代碼不能正常工作,然後做1件事 - 與指數函數添加一個空白對照,只是添加一條線,這樣就可以返回它是從視圖然後就

echo 'here'; 

結果在你看來。如果OC沒有返回這個結果,這意味着你在Opencart文件中有錯誤,否則你的代碼有錯誤。

你可以說這些都在某種程度上相同(我不是完全說,不想傷害任何人的感情;)),但是這個代碼

$this->load->controller('account/com_top_menu'); 

等於(基於磁帶自動加載機)

$obj = new ComTopMenu; //assuming your class name 
$data['com_top_menu'] = $obj->index(); 

所以您的解決方案請
- 你有文件com_top_menu.php您的產品目錄>控制器>帳戶>
- 您的文件類名必須是ControllerAccountComTopMenu(或任何大寫或小寫組合,但不包含_)
- 您的課程必須具有索引功能,因爲在您的情況下,它調用索引

+0

感謝您的反饋。我知道你指出的一切。即使我嘗試加載其他現有的控制器,它也不會輸出任何內容,除非它是「通用」控制器文件夾內的控制器。 其實看起來控制器正在加載。如果我在加載的控制器中間執行回顯,它將在模板呈現之前顯示輸出。它看起來只是不呈現模板。 文件全部到位,控制器加載,它只是不通過視圖輸出任何東西。 – BeoWulf

相關問題