PHP: Как удалить повторяющиеся аргументы в URL?

#php #url #arguments #opencart

#php #url #аргументы #opencart

Вопрос:

Я пытаюсь написать расширение фильтра продукта для opencart.

Я присваиваю URL-адресу параметры размера, цвета и т. Д. Следующим образом:

index.php?route=product / categoryamp;path= 59_63amp;size= 57amp;color=black

Проблема в том, что когда я нажимаю другой цвет на странице, ссылка выглядит следующим образом:

index.php?route=product /categoryamp;path=59_63amp;size= 57amp;color=черныйamp;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('amp;', 'amp;amp;', 'amp;' . ltrim($args, 'amp;')); 
    }

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

Ответ №1:

Недостаточно информации, чтобы дать правильный ответ, но я попробую угадать.

Проблема, похоже, в $args . Кажется, что вы берете $args из URL-адреса и добавляете к нему свой новый параметр цвета.

Если URL есть index.php?route=product/categoryamp;path=59_63amp;size=57amp;color=black , то $args есть path=59_63amp;size=57amp;color=black

Вы добавляете к нему color=brown и $args becomes path=59_63amp;size=57amp;color=blackamp;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() функцию.

Ответ №2:

вам не нужно удалять повторяющиеся параметры.
вам не нужно добавлять его.

используется http_build_query() для создания строки запроса

Комментарии:

1. Я не мог понять, что мне делать, и я добавил оригинальную функцию построения ссылок opencart в основное сообщение…

Ответ №3:

На самом деле это не имеет ничего общего с построителем ссылок opencart, это сделано за его пределами, чтобы не вносить никаких основных изменений. Вам нужно установить значение при использовании $this-> url->link в коде вашего контроллера для вашей категории. Когда вы получите все цвета, которые будете использовать для фильтров, обязательно отключите атрибут color, переданный во второй параметр ссылки