0

在我的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中,我安装了我的扩展程序,我可以将不同的页面 URL 设置为不同的LayoutsPositions如下所示:

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

我的问题是 - 我只想在满足上述脚本条件的特定页面上渲染一次模板。当前正在发生的是$this->render()基于PositionLayoutin显示模板 MULTIPLE 时间Extensions > Modules。例如,当我访问http://...?product_id=10页面时,它会显示模板两次,而应该只显示一次,因为它只满足product_id=10控制器中的条件。我怎样才能做到这一点?

4

1 回答 1

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();
}
于 2013-06-12T08:45:01.573 回答