Как правильно заменять параметры в URL

Здравствуйте уважаемые знатоки.
Вопрос в следующем.
Есть 2 группы ссылок которые подменяют свой параметр в url
Вопрос в том. как правильно подменять эти параметры так чтоб не задевались соседние параметры
пример:
URL — site/topics?type=topic&city=15323
Есть группа ссылок которая подменяет параметр type и другая, которая подменяет city и делается это очень неоптимально:
{assign var="type" value="`$_aRequest["type"]`"}
{assign var="city" value="`$_aRequest["city"]`"}

<a href="{router page="plugin"}{if $type ne ""}?type={$type}{/if}{if $city ne ""}{if $type ne ""}&{else}?{/if}city={$city}{/if}">change type</a>

Теперь если вдруг необходимо будет добавить еще один блок ссылок, то придется переписать доф.... очень много кода.
А если вдруг эти параметры будут добавляться другими плагинами\хуками и т.д. то это будет просто ужас.

Так вот. Как это можно сделать более правильно?

10 комментариев

avatar
я постарался понять, но не понял.
пхпшный parse_url не подходит?
avatar
Это все в шаблоне делается
В шаблонах я создаю ссылки
Группа1. переключатели типов
Группа2. Переключатели городов
avatar
Теперь как можно сделать чтобы группа 1 работала не мешая группе 2
т.е. если я выбрал city=153 в группе2 то в группе 1 автоматом прописывать &city=153 ко всем ссылкам
и т.д.
Причем учытивать что "?" и "&" если парамет первый с не первый
avatar
возможно я не правильно вас понял…
{assign var="path" value=''}
{foreach $aMass key=k item=v}
	{if $v}
		{if $path}
			{assign var=path value=$path|cat:'&'|cat:$k|cat:'='|cat:$v}
		{else}
			{assign var=path value=$path|cat:'?'|cat:$k|cat:'='|cat:$v}
		{/if}
	{/if}
{/foreach}	
<a href="{router page="advert"}{$path}">change type</a>
avatar
Поняли вы меня правильно когда над этим думал то пришел к такому варианту НО
<a href="{router page="advert"}{$path}">change type</a>

тут в конце я должен буду тепер поставить другой type и тогда ссылка получится:
<a href="site/topic?type=topic&city=153&type=question">change type</a>

т.е. 2 раза по type.
А надо именно ЗАМЕНИТЬ type оствив city
avatar
что-то я не понимаю ход ваших мыслей… что значит
тут в конце я должен буду тепер поставить другой type

?
как вы его собираетесь менять? какое событие произойдет? откуда вы возьмете новый type?
avatar
Оригинал в шаблоне выглядит вот так:
<a href="{router page="advert"}{$path}&type=question">change type</a>

Вот как-то так
т.е. если ссылка меняет тим топика то я в ней ЯВНО указываю тип топика
И поэтому получится дубляж
avatar
сорри… но я вас не понимаю. как формируется $path?
если в шаблоне то добавьте доб условие как то так…
{assign var=aMassNew value=['topic'=>'question']}

{assign var="path" value=''}
{foreach $aMass key=k item=v}
	{if $v}
		{if $aMassNew[$k]}
			{assign var=v value=$aMassNew[$k]}
		{/if}
		{if $path}
			{assign var=path value=$path|cat:'&'|cat:$k|cat:'='|cat:$v}
		{else}
			{assign var=path value=$path|cat:'?'|cat:$k|cat:'='|cat:$v}
		{/if}
	{/if}
{/foreach}	
<a href="{router page="plagin"}{$path}">change type</a>
avatar
а вот это можно попробовть. спасибо
avatar
пожалуйста. получилось?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.