在我的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
中,我安装了我的扩展程序,我可以将不同的网页网址设置为不同的Layouts
和Positions
,如下所示:
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
中的Layout
和Extensions > Modules
显示模板MULTIPLE次。例如,当我访问http://...?product_id=10
页面时,它会显示模板两次,而它只应显示一次,因为它只满足控制器中product_id=10
的条件。我怎么能这样做?
答案 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();
}