首先让我告诉你我在这里想要实现的目标。假设有一个像http://www.example.com/?id=12345
这样的url,现在我想要的是,如果url中有一个id参数可用,我想将相同的参数附加到该页面上的每个url。Opencart有一个生成url的url库,我相信你们一定也很熟悉,我找到了一种方法来做我想做的事情,但它只适用于网站的一些随机部分,比如url生成的带有id参数的类别,而其他的则没有。
这是我迄今为止尝试的
文件:System/libray/url.php
这是的功能
public function link($route, $args = '', $connection = 'NONSSL') {
if ($connection == 'NONSSL') {
$url = $this->url;
}else {
$url = $this->ssl;
}
$url .= 'index.php?route=' . $route;
if ($args) {
$url .= str_replace('&', '&', '&' . ltrim($args, '&'));
}
foreach ($this->rewrite as $rewrite) {
$url = $rewrite->rewrite($url);
}
if(isset($_GET['id']))
{
if(!empty($this->request->get['id']))
$url .= '&id='.$this->request->get['id'];
if(!empty($_GET['id']))
{
$url .= '&id='.$_GET['id'];
}
}
return $url;
}
问题是并非所有东西都使用此方法来生成其URL。
例如,任何与横幅有关的内容(例如旋转木马模块)都使用管理员在系统->设计->横幅中手动设置的链接,因此您也需要为此编辑代码。最简单也可能是正确的方法是编辑模型吐出的数据,例如
model_design_banner->getBanner()
变为
public function getBanner($banner_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "banner_image bi LEFT JOIN " . DB_PREFIX . "banner_image_description bid ON (bi.banner_image_id = bid.banner_image_id) WHERE bi.banner_id = '" . (int)$banner_id . "' AND bid.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if (isset($_GET['id'])) {
array_walk($query->rows, function(&$value) {
$value['link'] .= '&id=' . $_GET['id'];
});
}
return $query->rows;
}
要么是这样,要么在每个使用此方法的控制器中编辑输出。
不过,这只是横幅的一个例子。我不记得还有哪些模块需要编辑,但如果有一个特定的模块让你挠头,请告诉我,我会给你另一个例子来修复它。