adicionar parâmetros de consulta a uma cadeia de URL existente

16

No Magento, se eu tiver uma string de URL, existe alguma função interna que eu possa usar para adicionar parâmetros de consulta?

No caso exato em que estou olhando, estou gerando um URL de categoria e quero adicionar um conjunto de parâmetros de consulta sobre ele.

Eu estou fazendo o seguinte:

$categoryUrl = Mage::getModel('catalog/category')->load(1)->getUrl();

Desejo adicionar os seguintes parâmetros de consulta:

array('param1' => 'myparam1','param2' => 'myparam2');

Eu quero terminar com:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2
Marty Wallace
fonte
Você pode dar um exemplo do que você está tentando obter? Como você está gerando o URL da categoria e qual é o resultado desejado?
Marius
Pergunta atualizada para refletir isso
Marty Wallace

Respostas:

10

Eu não acho que exista uma maneira 'embutida' de conseguir isso.
O método Mage_Catalog_Model_Url::getUrl()não aceita nenhum parâmetro. Você pode substituir o método, mas, a menos que precise de algo assim para todas as categorias, não vejo sentido em fazê-lo.
Eu acho que a maneira mais barata é adicionar os parâmetros diretamente.

$params = array('param1' => 'myparam1','param2' => 'myparam2');
$categoryUrl = Mage::getModel('catalog/category')->load(1)->getUrl();
$urlParams = array();
foreach ($params as $name=>$value){
    $urlParams[] = $name.'='.urlencode($value);
}
$urlParams = implode('&', $urlParams);
if ($urlParams){
    $glue = '?';
    if (strpos($categoryUrl, $glue) !== false){//this should never happen - but just in case
        $glue = '&';
    }
    $categoryUrl .= $glue.$urlParams;
}

Você pode transformar esse método em um auxiliar para evitar a gravação do código toda vez que você precisar.

Para qualquer outro URL que você construa, Mage::getUrl()você pode passar parâmetros de consulta como este:

$url = Mage::getUrl('module/controller/action', array('param1'=>'val1', '_query'=>array('p1'=>'v1', 'p2'=>'v2')));

o código acima irá gerar o seguinte:

http://mysite.com/module/controller/action/param1/val1/?p1=v1&p2=v2

Marius
fonte
@ Simon ... ao votar, dê uma razão.
Marius
desculpe, foi um pouco rápido demais - não gostou do primeiro bloco de código, porque existe uma maneira interna de conseguir isso, mas você também mostra dessa maneira, tudo de bom.
Simon
... e agora não posso mais mudar meu voto (o que não gosto muito em todos os sites da SE). Enfim, acho que é muito estranho que você pode ver quem downvoted sua resposta: /
Simon
@Simon. Eu acho que estava um pouco errado com isso. Veja o que os marcadores escreveram em outra resposta. Portanto, seu voto negativo teve um bom motivo. Eu acabei de afirmar que você deve dar uma razão ao fazer uma votação. E tenha certeza, você não pode ver quem rebaixou as respostas no SO. Eu apenas investiguei um pouco. Como este site não possui uma quantidade enorme de votos e usuários, é fácil descobrir quem fez o voto negativo. Não vou contar como descobri, mas tudo o que posso dizer é que é fácil ver quem votou nos domingos e segundas-feiras. :).
Marius
LOL ok :) Sim, acho que a resposta de Bens deveria ter sido a aceita nesta questão. De qualquer forma, obrigado e continue o bom trabalho!
Simon
26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);
benmarks
fonte
2
Esta é a verdadeira resposta.
precisa saber é o seguinte
Eu não acho que haja a melhor resposta para isso, pois a passagem de parâmetros em um URL não é específica para o Magento, embora o Magento contenha um método para isso.
Tyler Maginnis
1
@TylerMaginnis "existe alguma função embutida [no Magento] que eu possa usar para adicionar parâmetros de consulta [a uma string de URL]?"
benmarks
8

Você pode usar o auxiliar de núcleo / URL :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
Jiří Chmiel
fonte