ajouter des paramètres de requête à une chaîne d'URL existante


16

Dans Magento, si j'ai une chaîne d'URL, y a-t-il une fonction intégrée que je peux utiliser pour y ajouter des paramètres de requête?

Dans le cas exact que je regarde, je génère une URL de catégorie, puis je veux ajouter un ensemble de paramètres de requête par-dessus.

Je fais ce qui suit:

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

Je souhaite ensuite ajouter les paramètres de requête suivants:

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

Je veux ensuite me retrouver avec:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2

Pouvez-vous donner un exemple de ce que vous essayez d'obtenir? Comment générez-vous l'URL de la catégorie et quel est le résultat souhaité?
Marius

Question mise à jour pour refléter cela
Marty Wallace

Réponses:


10

Je ne pense pas qu'il existe une méthode «intégrée» pour y parvenir.
La méthode Mage_Catalog_Model_Url::getUrl()n'accepte aucun paramètre. Vous pouvez remplacer la méthode, mais à moins que vous n'ayez besoin de quelque chose comme ça pour toutes les catégories, je ne vois aucun intérêt à le faire.
Je pense que le moyen le moins cher est d'ajouter directement les paramètres.

$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;
}

Vous pouvez en faire une méthode dans une aide pour éviter d'écrire le code chaque fois que vous en avez besoin.

Pour toute autre URL que vous créez, Mage::getUrl()vous pouvez transmettre des paramètres de requête comme celui-ci:

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

le code ci-dessus va générer ce qui suit:

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


@Simon ... lors du vote en aval, donnez une raison.
Marius

désolé, était un peu trop rapide - n'a pas aimé le premier bloc de code, car il existe un moyen intégré pour y parvenir, mais vous le montrez également, donc tout va bien.
Simon

... et maintenant je ne peux plus changer mon vote (ce qui me déplaît beaucoup sur tous les sites SE). Quoi qu'il en soit, je pense qu'il est tout à fait étrange que vous pouvez voir qui downvoted votre réponse: /
Simon

@Simon. Je pense que j'avais un peu tort sur celui-ci. Voir ce que benmarks a écrit dans une autre réponse. Votre vote négatif avait donc une bonne raison. Je viens de dire que vous devez donner une raison lors du vote en aval. Et rassurez-vous, vous ne pouvez pas voir qui a rejeté les réponses sur SO. J'ai juste enquêté un peu. Parce que ce site Web n'a pas énormément de votes et d'utilisateurs, il est assez facile de savoir qui a voté contre. Je ne vous dirai pas comment j'ai découvert, mais tout ce que je peux dire, c'est qu'il est assez facile de voir qui a voté contre les dimanches et lundis. :).
Marius

LOL ok :) Oui, je pense que la réponse de Bens aurait dû être acceptée sur cette question. Quoi qu'il en soit, merci et continuez votre bon travail!
Simon

26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);

2
Telle est la vraie réponse.
JamesHalsall du

Je ne pense pas qu'il y ait de meilleure réponse à cela, car le passage de paramètres dans une URL n'est pas spécifique à Magento, bien que Magento contienne une méthode pour cela.
Tyler Maginnis

1
@TylerMaginnis "existe-t-il une fonction intégrée [dans Magento] que je peux utiliser pour ajouter des paramètres de requête [à une chaîne d'URL]?"
benmarks

8

Vous pouvez utiliser le core / url helper:

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.