2

opencart の製品フィルター拡張機能を作成しようとしています。

次のように、サイズ、色などのオプションを URL に割り当てます。

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

問題は、ページ上の別の色をクリックすると、リンクが次のようになることです。

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

ご覧のとおり、色の引数が重複しており、カテゴリのリストがめちゃくちゃになっています。同じ引数がある場合、どうすれば削除できますか?

元の 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です。$argsURL から取得して、新しい色パラメーターを追加しているようです。

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

これは、opencart のリンク ビルダーとはまったく関係ありません。コアの変更を行わないように、それ以外で行われます。カテゴリのコントローラ コードで $this->url->link を使用する場合は、値を設定する必要があります。フィルターに使用するすべての色を取得したら、リンクの 2 番目のパラメーターに渡された色属性を設定解除してください。

于 2011-11-01T15:55:38.003 に答える
0

重複するパラメーターを削除する必要はありません。
追加しなくていいです。

http_build_query()クエリ文字列の作成に使用

于 2011-11-01T14:47:14.507 に答える