aggiungere parametri di query a una stringa di URL esistente


16

In Magento se ho una stringa URL, c'è qualche funzione integrata che posso usare per aggiungere parametri di query ad essa?

Nel caso esatto che sto guardando sto generando un URL di categoria e quindi voglio aggiungere un set di parametri di query su di esso.

Sto facendo quanto segue:

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

Voglio quindi aggiungere i seguenti parametri di query:

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

Voglio poi finire con:

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

Puoi fare un esempio di ciò che stai cercando di ottenere? Come stai generando l'URL di categoria e qual è il risultato desiderato?
Marius

Domanda aggiornata per riflettere questo
Marty Wallace,

Risposte:


10

Non credo che ci sia un modo "integrato" per raggiungere questo obiettivo.
Il metodo Mage_Catalog_Model_Url::getUrl()non accetta alcun parametro. Puoi ignorare il metodo, ma a meno che tu non abbia bisogno di qualcosa del genere per tutte le categorie, non vedo il punto di farlo.
Penso che il modo più economico sia quello di aggiungere direttamente i parametri.

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

Puoi rendere questo un metodo in un aiuto per evitare di scrivere il codice ogni volta che ne hai bisogno.

Per qualsiasi altro URL che costruisci Mage::getUrl()puoi passare parametri di query come questo:

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

il codice sopra genererà il seguente:

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


@Simon ... quando effettui il downvoting, dai una ragione.
Marius

scusate, è stato un po 'troppo veloce - non mi è piaciuto il primo blocco di codice, perché esiste un modo integrato per farlo, ma lo dimostrate anche voi, quindi tutto bene.
Simon,

... e ora non posso più cambiare il mio voto (che non mi piace molto in tutti i siti SE). Ad ogni modo, penso che sia abbastanza strano che tu possa vedere chi ha votato in negativo la tua risposta: /
Simon

@Simon. Penso di essermi sbagliato un po 'su questo. Vedi ciò che Benmarks ha scritto in un'altra risposta. Quindi il tuo voto negativo ha avuto una buona ragione. Ho appena affermato che dovresti fornire un motivo durante il downvoting. E state tranquilli, non potete vedere chi ha votato per il downgrade delle risposte su SO. Ho appena indagato un po '. Poiché questo sito Web non ha un numero enorme di voti e di utenti, è facile scoprire chi ha effettuato il downgrade. Non ti dirò come l'ho scoperto, ma tutto quello che posso dire è che è facile vedere chi ha effettuato il downgrade la domenica e il lunedì. :).
Marius

LOL ok :) Sì, penso che la risposta di Bens avrebbe dovuto essere quella accettata su questa domanda. Comunque, grazie e continuate così!
Simon,

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

2
Questa è la vera risposta.
JamesHalsall,

Non penso che ci sia una risposta migliore a questo, poiché passare i parametri in un URL non è specifico di Magento, sebbene Magento contenga un metodo per farlo.
Tyler Maginnis,

1
@TylerMaginnis "esiste una funzione integrata [in Magento] che posso usare per aggiungere parametri di query [a una stringa URL]?"
benmarks

8

Puoi usare helper core / url :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.