agregar parámetros de consulta a una cadena de URL existente

16

En Magento si tengo una cadena URL, ¿hay alguna función integrada que pueda usar para agregarle parámetros de consulta?

En el caso exacto que estoy viendo, estoy generando una URL de categoría y luego quiero agregar un conjunto de parámetros de consulta encima.

Estoy haciendo lo siguiente:

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

Luego quiero agregar los siguientes parámetros de consulta:

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

Entonces quiero terminar con:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2
Marty Wallace
fuente
¿Puedes dar un ejemplo de lo que estás tratando de obtener? ¿Cómo está generando la URL de la categoría y cuál es el resultado deseado?
Marius
Pregunta actualizada para reflejar esto
Marty Wallace

Respuestas:

10

No creo que haya una forma 'integrada' de lograr esto.
El método Mage_Catalog_Model_Url::getUrl()no acepta ningún parámetro. Puede anular el método, pero a menos que necesite algo como esto para todas las categorías, no veo ningún punto en hacerlo.
Creo que la forma más barata es agregar los parámetros directamente.

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

Puede hacer de este un método en una ayuda para evitar escribir el código cada vez que lo necesite.

Para cualquier otra URL que construya Mage::getUrl(), puede pasar parámetros de consulta como este:

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

El código anterior generará lo siguiente:

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

Marius
fuente
@Simon ... al votar abajo, da una razón.
Marius
lo siento, fue un poco rápido, no me gustó el primer bloque de código, porque hay una forma integrada de lograrlo, pero también lo demuestras, así que todo bien.
Simon
... y ahora ya no puedo cambiar mi voto (que no me gusta mucho en todos los sitios de SE). De todos modos, creo que es bastante extraño que puedas ver quién rechazó tu respuesta: /
Simon
@Simón. Creo que estaba un poco equivocado en este caso. Vea lo que escribió Benmarks en otra respuesta. Entonces su voto negativo tuvo una buena razón. Acabo de decir que deberías dar una razón cuando votes en contra. Y tenga la seguridad de que no puede ver quién rechazó las respuestas en SO. Acabo de investigar un poco. Debido a que este sitio web no tiene una gran cantidad de votos y usuarios, es fácil averiguar quién votó negativamente. No le diré cómo me enteré, pero todo lo que puedo decir es que es fácil ver quién votó los domingos y los lunes. :).
Marius
LOL está bien :) Sí, creo que la respuesta de Bens debería haber sido la aceptada en esta pregunta. De todos modos, gracias y sigan con el buen trabajo!
Simon
26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);
puntos de referencia
fuente
2
Esta es la verdadera respuesta.
JamesHalsall el
No creo que haya una mejor respuesta para esto, ya que pasar parámetros en una URL no es específico de Magento, aunque Magento contiene un método para ello.
Tyler Maginnis
1
@TylerMaginnis "¿hay alguna función integrada [en Magento] que pueda usar para agregar parámetros de consulta [a una cadena de URL]?"
puntos de referencia el
8

Puedes usar core / url helper:

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