Opencart:来自另一个控制器的调用方法

时间:2014-08-25 12:18:26

标签: php templates opencart

我需要在 checkout / confirm.tpl 文件中调用我在 controller / product.php

中创建的自定义函数

最好的方法是什么?

我试过这个,但不起作用:

$productController = $this->load->model('product/product');
$productController->customFunction();

6 个答案:

答案 0 :(得分:3)

  1. MVC
    • 在MVC架构中,模板仅用 来呈现/显示数据;它不应该(*)调用控制器/模型函数也不应该执行SQL查询,就像我在许多第三方模块中看到的那样(甚至在答案这里在SO)。
  2. $productController = $this->load->model('product/product');
    • 漂亮的眼睛必须发现您正在尝试将模型加载到由 controller 命名的变量中,并且您也尝试以这种方式使用它。那么,为了你的目的,在课程controller()中必须有一个方法Loader - 这不是(幸运的)
  3. 应如何做?
    • 确保如何从模板中访问调用控制器功能。在MVC中,由路由调用的可调用函数称为 action 。使用这句话我现在可以通过访问某个URL 来说你可以调用一个动作(控制器功能)
  4. 所以假设你的控制器是CatalogProductController,你要调用的方法是custom() - 在这种情况下访问这个URL

    http://yourstore.com/index.php?route=catalog/product/custom
    

    您将确保调用/访问custom()的{​​{1}}方法。

    您可以通过多种方式访问​​此类网址 - 作为cURL请求,链接的 href 或通过AJAX请求来命名。在PHP范围内,即使CatalogProductController或类似方法也可以。

    (*)不应该我的意思是在OpenCart中它可能是(不幸),但这种滥用是针对MVC架构的。

答案 1 :(得分:3)

是的,我终于找到了正确的答案!对不起最后的错误答案

class ControllerCommonHome extends Controller {
    public function index() {
        return $this->load->controller('product/ready');
    }
}

答案 2 :(得分:0)

可能会有这样的事情可以帮助你(或任何感兴趣的人)

// Load seo pro
require_once(DIR_CATALOG."/controller/common/seo_pro.php"); // load file
$seoPro = new ControllerCommonSeoPro($this->registry); // pass registry to constructor

$url = HTTP_CATALOG . $seoPro->rewrite(
 $this->url('information/information&information_id=' . $result['information_id'])
);

答案 3 :(得分:0)

他和这些坏的答案!!

在laravel中它如此简单只需编写Controller :: call('ApplesController @ getSomething');

但我不能比这更好

$config = new Config();
// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$this->registry->set('response', $response);


$action = new Action('product/ready');
$controller = new Front($this->registry);
$controller->addPreAction(new Action('common/maintenance'));
$controller->addPreAction(new Action('common/seo_url'));
$controller->dispatch($action, new Action('error/not_found'));
$response->output();

在这种情况下,它的呼叫产品/准备就绪

答案 4 :(得分:0)

$this->load->controller('sale/box',$yourData);

调用框控制器的ShipmentDate()功能

$this->load->controller('sale/box/ShipmentDate',$yourData);

答案 5 :(得分:0)

return $this->load->controller('error/not_found');