mevcut bir URL dizesine sorgu parametreleri ekleme


16

Bir URL dizesi varsa Magento'da, sorgu parametreleri eklemek için kullanabileceğim yerleşik bir işlev var mı?

Tam olarak ben bir kategori URL üretiyorum bakıyorum ve sonra üstüne bir dizi sorgu parametreleri eklemek istiyorum.

Aşağıdakileri yapıyorum:

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

Daha sonra aşağıdaki sorgu parametrelerini eklemek istiyorum:

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

Sonra ile bitirmek istiyorum:

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

Elde etmeye çalıştığınız şeyin bir örneğini verebilir misiniz? Url kategorisini nasıl oluşturuyorsunuz ve istenen sonuç nedir?
Marius

Bunu yansıtmak için güncellenen soru
Marty Wallace

Yanıtlar:


10

Bunu başarmak için 'yerleşik' bir yol olduğunu düşünmüyorum.
Yöntem Mage_Catalog_Model_Url::getUrl()herhangi bir parametre kabul etmiyor. Yöntemi geçersiz kılabilirsiniz, ancak tüm kategoriler için böyle bir şeye ihtiyacınız olmadığı sürece bunu yapmanın bir anlamı görmüyorum.
Bence en ucuz yol parametreleri doğrudan eklemektir.

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

Her ihtiyacınız olduğunda kodu yazmamak için bunu bir yardımcıda yapabilirsiniz.

Aracılığıyla oluşturduğunuz diğer Mage::getUrl()URL'ler için aşağıdaki gibi sorgu parametreleri iletebilirsiniz:

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

yukarıdaki kod aşağıdakileri oluşturur:

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


@Simon ... indirirken, bir sebep ver.
Marius

üzgünüm, biraz fazla hızlıydı - ilk kod bloğunu beğenmedim, çünkü bunu başarmak için yerleşik bir yol var, ama aynı zamanda bu şekilde de gösteriliyorsunuz, hepsi iyi.
Simon

... ve şimdi oyumu artık değiştiremiyorum (tüm SE sitelerinde çok sevmiyorum). Her neyse, cevabınızı kimin indirdiğini görebilmeniz oldukça garip: /
Simon

@Simon. Sanırım bu konuda biraz yanılmışım. Başka bir cevapta işaretlerin ne yazdığını görün. Bu yüzden aşağı oyunuzun iyi bir nedeni vardı. Az önce oy kullanırken bir sebep vermeniz gerektiğini söyledim. Ve emin olun, SO'ya kimin cevabı düşürdüğünü göremezsiniz. Biraz araştırdım. Bu web sitesinde çok fazla oy ve kullanıcı bulunmadığından kimin indirilemediğini bulmak kolaydır. Size nasıl öğrendiğimi söylemeyeceğim, ancak söyleyebileceğim tek şey Pazar ve Pazartesi günleri kimin indirdiğini görmek kolay. :).
Marius

LOL tamam :) Evet, sanırım Bens cevabı bu soruya kabul edilmiş olmalı. Her neyse, teşekkürler ve iyi çalışmaya devam edin!
Simon

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

2
Bu gerçek cevap.
JamesHalsall

Magento bunun için bir yöntem içermesine rağmen, bir URL'de params geçirmenin Magento'ya özgü olmadığı için, bunun en iyi cevabı olduğunu düşünmüyorum.
Tyler Maginnis

1
@TylerMaginnis "[bir URL dizesine] sorgu parametreleri eklemek için kullanabileceğim yerleşik bir işlev var [Magento'da]?"
benmarks

8

Çekirdek / url yardımcısını kullanabilirsiniz :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.