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.