【问题标题】:Modifing generated links from url library in opencart从opencart中的url库修改生成的链接
【发布时间】:2014-10-25 08:57:16
【问题描述】:

首先让我告诉你我想在这里实现什么。假设有一个像这样的 url http://www.example.com/?id=12345 现在我想要的是如果 url 中有一个可用的 id 参数,我想将相同的参数附加到该页面上的每个 url。 Opencart 有一个生成 url 的 url 库,我相信你们都必须熟悉它,我找到了一种方法来做我想做的事,但它只在网站的一些随机部分工作,比如生成的类别 url 附加了 id 参数它和其他的不。

这是我到目前为止尝试过的

文件:系统/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;
}  

【问题讨论】:

    标签: php routing routes url-routing opencart


    【解决方案1】:

    问题在于,并非所有东西都使用这种方法来生成其 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;
    }
    

    要么就是这样,要么在使用此方法的每个控制器中编辑输出。

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

    【讨论】:

    • 嘿,rj,谢谢你的帮助,但我发现问题真的不是我写的代码,而是我得到了缓存的输出,所以我所做的就是将 id 参数附加到文档中的每个 a 标签通过 jquery(当然有验证);),它现在工作得很好。
    • 缓存输出?听起来很奇怪,这些方法根本不缓存。哦,好吧,只要你有解决方案......
    • 我知道,但是那个特定的模板正在缓存数据库的每个输出。
    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2013-05-10
    • 2013-11-17
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多