#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, переданный во второй параметр ссылки