Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在opencart中修改从url库生成的链接_Php_Routing_Routes_Url Routing_Opencart - Fatal编程技术网

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

Php 在opencart中修改从url库生成的链接,php,routing,routes,url-routing,opencart,Php,Routing,Routes,Url Routing,Opencart,首先,让我告诉你我在这里想要实现什么。假设有这样一个urlhttp://www.example.com/?id=12345现在我想要的是,如果url中有可用的id参数,我想将相同的参数附加到该页面上的每个url。Opencart有一个生成url的url库,我相信你们也一定很熟悉它,我找到了一种方法来做我想做的事情,但它只在网站的一些随机部分工作,比如url生成的类别和附加了id参数的其他类别 这是我到目前为止试过的 文件:System/libray/url.php 下面是函数 public fu

首先,让我告诉你我在这里想要实现什么。假设有这样一个url
http://www.example.com/?id=12345
现在我想要的是,如果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\u design\u 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;
}
要么如此,要么在使用此方法的每个控制器中编辑输出


不过,这只是横幅的一个例子。我不记得还有哪些模块需要编辑,但是如果有一个特别的模块让你抓狂,让我知道,我会给你另一个例子来解决它。

嘿,rj,谢谢你的帮助,但我发现问题其实不是我写的代码,而是我得到了缓存的输出,所以我所做的是通过jquery将id参数附加到文档中的每个a标记上(当然有验证),现在它工作得很好。缓存输出?听起来很奇怪,这些方法根本不缓存。哦,好吧,只要你们有一个解决方案……我知道,但那个特定的模板正在缓存数据库中的每个输出。