我试图在另一个控制器内加载控制器。
$data['com_top_menu'] = $this->load->controller('account/com_top_menu');
然而,当我试图加载一个控制器时,这似乎不起作用,该控制器位于与我加载控制器相同的文件夹中。
尝试从其他文件夹加载控制器,似乎也没有加载。它接缝只能加载来自普通的'控制器文件夹。
编辑:
实际上似乎控制器正在加载。如果我在加载的控制器的中间放置一个回声,它将在模板渲染之前显示输出。因此,看起来控制器已加载并且不会通过渲染视图输出任何内容,除非它是公共文件夹中的控制器。 文件全部到位,控制器加载,它只是不通过视图输出任何内容。
答案 0 :(得分:1)
加载控制器的几点事情 -
1st - 您只能从相同的文件夹(admin / catalog)加载控制器
第二 - 你可以从任何子文件夹加载控制器,只需要传递正确的加载路径
3 - 如果Opencart没有该文件而不显示任何错误,则结果将为null / false
4th - 如果你定义任何函数名,那么它将调用该函数,否则将调用index函数,所以在你的case索引中。
第五 - 请使用此
return $this->load->view('your.tpl', $data);
而不是
$this->response->setOutput($this->load->view('your.tpl', $data));
6 - 请从php / admin启用调试模式,以便在代码丢弃时知道任何错误。清除error.log,然后尝试加载控制器。
7 - 如果这些所有点都是代码不起作用那么做一件事 - 添加一个带索引功能的空白控制器,只需添加一行,这样就可以从视图中返回结果,然后只需
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 (或任何大写或小写组合但不包含_)
- 您的类必须具有索引功能,因为在您的情况下,它调用索引。