Opencart:如何仅在特定页面上呈现模板?

时间:2013-06-12 03:56:53

标签: opencart

在我的catalog/controller/mycontroller.php中,我有一个这样的脚本:

$this->data['settings'] = $this->config->get('my_module');  // retrieves data from "setting" table
foreach ($this->data['settings'] as $data) {
    if ($data['pageurl'] == 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']) {
        $this->render();
    }
}

Extensions > Modules中,我安装了我的扩展程序,我可以将不同的网页网址设置为不同的LayoutsPositions,如下所示:

Page URL                   Layout    Position
================================================
http://...?product_id=10   Product   Content Top
http://...?product_id=20   Product   Content Top
http://...                 Home      Content Top

我的问题是 - 我想在符合上述脚本条件的特定页面上仅渲染ONCE模板。目前正在发生的事件$this->render()根据Position中的LayoutExtensions > Modules显示模板MULTIPLE次。例如,当我访问http://...?product_id=10页面时,它会显示模板两次,而它只应显示一次,因为它只满足控制器中product_id=10的条件。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

首先,这样做:

var_dump('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);

我猜你可能也会错过$_SERVER['QUERY_STRING']部分......

要查看,您构建的URL与您在后端设置的URL进行比较...

接下来,请不要在循环中调用$this->render(),无论条件为何成功多次,而不是这样做:

$this->data['settings'] = $this->config->get('my_module');  // retrieves data from "setting" table
$render = false;
foreach ($this->data['settings'] as $data) {
    if ($data['pageurl'] == HTTP_SERVER . $_SERVER['REQUEST_URI']) { // use defined constant HTTP_SERVER
        $render = true;
    }
}

if($render) {
    $this->render();
}