2

我正在尝试为 opencart 编写产品过滤器扩展。

我为 url 分配大小、颜色等选项,如下所示:

index.php?route=product/category&path=59_63&size=57&color=black

问题是当我单击页面上的另一种颜色时,链接如下所示:

index.php?route=product/category&path=59_63&size=57&color=black&color=brown

正如你所看到的,有重复的颜色参数,它弄乱了类别列表。如果有,我怎样才能删除相同的论点?

原始 opencart 的链接构建器功能:

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, '&')); 
    }

    return $this->rewrite($url);
}
4

3 回答 3

2

没有足够的信息来提供正确的答案,但我会猜测一下。

问题似乎与$args. 似乎您正在$args从 URL 中获取新的颜色参数。

如果 URL 是index.php?route=product/category&path=59_63&size=57&color=black,那么$argspath=59_63&size=57&color=black

你附加到它color=brown$args becomes path=59_63&size=57&color=black&color=brown.

如果是这种情况,您可以执行以下操作:

parse_str($args,$url_params);
$url_params['color'] = 'brown'; //-- overwrites color=black with color=brown
$args = http_build_query($url_params);

然后将 $args 传递给您的link()函数。

于 2011-11-01T15:28:45.783 回答
0

您不必删除重复的参数。
你不必添加它。

用于http_build_query()创建查询字符串

于 2011-11-01T14:47:14.507 回答
0

这实际上与 opencart 的链接构建器无关,它是在此之外完成的,以免进行任何核心更改。当您在控制器代码中为您的类别使用 $this->url->link 时,您需要设置该值。当您获得将用于过滤器的所有颜色时,请务必取消设置传递给链接第二个参数的颜色属性

于 2011-11-01T15:55:38.003 回答