Opencart:如何将数据变量从父控制器传递到子控制器

时间:2015-05-16 13:58:56

标签: php opencart

是否有任何简单的解决方案可以将$ this->数据变量从父控制器传递给所有子控制器。

我尝试的所有内容都将空数组带给孩子。

当我更改文件" system / engine / controller.php"如下所示:

protected function getChild($child, $args = array()) {
    $action = new Action($child, $args);

    if (file_exists($action->getFile())) {
        require_once($action->getFile());

        $class = $action->getClass();

        $controller = new $class($this->registry);

        //$controller->{$action->getMethod()}($action->getArgs());
        $controller->{$action->getMethod()}($action->getArgs()+array('parent-data'=>$this->data));

        return $controller->output;
    } else {
        trigger_error('Error: Could not load controller ' . $child . '!');
        exit();                 
    }       
}

然后我尝试阅读变量' parent-data'从子控制器中传递的参数:

if (isset($setting['parent-data'])) {
    echo "<pre>".print_R($setting['parent-data'],true)."</pre>";
}

结果我得到一个空数组:

Array
(
    [modules] => Array
       (
        )
)

3 个答案:

答案 0 :(得分:1)

数据变量为空。这就是为什么它打印空白数组。 此外,没有必要传递数据变量。它是一个全局变量,你将获得它直到.tpl文件。

答案 1 :(得分:0)

问题在于父控制器是具有空数据变量的列控制器,而不是具有必要数据变量的主页父控制器。

答案 2 :(得分:0)

在opencart2上,可能更老:

ex:从父控制器product-custom到子控制器头文件解析ver(步骤)

<?php
class ControllerProductCustom extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('product/product');

...

            $data['footer'] = $this->load->controller('common/footer');
            $data['header'] = $this->load->controller('common/header', array('steps' => true));

<?php
class ControllerCommonHeader extends Controller {
    public function index($arg) {
        $data['title'] = $this->document->getTitle();
        if (isset($arg['steps'])) $data['steps'] = $arg['steps'];
...