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

Opencart:如何仅在特定页面上呈现模板?,opencart,Opencart,在我的目录/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['H

在我的
目录/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();
    }
}
Page URL                   Layout    Position
================================================
http://...?product_id=10   Product   Content Top
http://...?product_id=20   Product   Content Top
http://...                 Home      Content Top
$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();
}
Extensions>Modules
中,我安装了我的扩展,我可以将不同的页面URL设置为不同的
布局
位置
,如下所示:

$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();
    }
}
Page URL                   Layout    Position
================================================
http://...?product_id=10   Product   Content Top
http://...?product_id=20   Product   Content Top
http://...                 Home      Content Top
$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();
}
我的问题是-我只想在满足上述脚本条件的特定页面上呈现一次模板。当前发生的情况是,
$this->render()
根据
扩展>模块中的
位置和
布局多次显示模板。例如,当我访问
http://...?product_id=10
page,它会显示模板两次,而它只应该显示一次,因为它只满足控制器中
product\u id=10
的条件。我怎样才能做到这一点?

首先,请执行以下操作:

var_dump('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
我猜您可能还缺少
$\u服务器['QUERY\u STRING']
部分

要查看,您正在构建什么URL以与您在后端中设置的URL进行比较

下一步,请不要在循环中调用
$this->render()
,无论该条件为什么会成功更多次,请执行以下操作:

$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();
    }
}
Page URL                   Layout    Position
================================================
http://...?product_id=10   Product   Content Top
http://...?product_id=20   Product   Content Top
http://...                 Home      Content Top
$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();
}

我尝试了你的建议,但似乎没有任何效果。所以发生的事情是它经过了两次
catalog\controller\common\content\u top.php
,因为
产品
布局被分配给
content top
两次。