从opencart中的url库修改生成的链接

时间:2014-10-25 08:57:17

标签: php routing routes url-routing opencart

首先告诉你我想在这里实现的目标。假设有一个这样的网址http://www.example.com/?id=12345现在我想要的是如果网址中有一个id参数可用,我想将相同的参数附加到该网页上的每个网址。 Opencart有一个url库,可以生成url我相信你们都必须熟悉它,我找到了一种方法来做我想要的但是它只是在网站的一些随机部分工作,比如类别url' s正在生成时附加了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;
}  

1 个答案:

答案 0 :(得分:0)

问题在于并非所有内容都使用此方法来生成其URL。

例如,与横幅有关的任何内容(例如Carousel模块)都使用管理员在System-> Design-> Banners中手动设置的链接,因此您还需要为此编辑代码。最简单且可能正确的方法是编辑模型吐出的数据,例如

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;
}

或者是,或者在使用这种方法的每个控制器中编辑输出。

但这仅仅是横幅的一个例子。我不记得哪些其他模块需要编辑,但如果有一个特定的模块让你挠头,请告诉我,我会给你另一个例子来解决它。