dodaj parametry zapytania do istniejącego ciągu adresu URL

16

Czy w Magento, jeśli mam ciąg adresu URL, jest jakaś wbudowana funkcja, której można użyć do dodania do niego parametrów zapytania?

Dokładnie w tym przypadku, na który patrzę, generuję adres URL kategorii, a następnie chcę na nim dodać zestaw parametrów zapytania.

Wykonuję następujące czynności:

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

Chcę następnie dodać następujące parametry zapytania:

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

Następnie chcę skończyć z:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2
Marty Wallace
źródło
Czy możesz podać przykład tego, co próbujesz uzyskać? Jak generujesz adres URL kategorii i jaki jest pożądany wynik?
Marius
Zaktualizowano pytanie, aby to odzwierciedlić
Marty Wallace

Odpowiedzi:

10

Nie sądzę, aby istniał „wbudowany” sposób na osiągnięcie tego.
Metoda Mage_Catalog_Model_Url::getUrl()nie przyjmuje żadnych parametrów. Możesz zastąpić tę metodę, ale jeśli nie potrzebujesz czegoś takiego dla wszystkich kategorii, nie widzę sensu, aby to robić.
Myślę, że najtańszym sposobem jest bezpośrednie dodanie parametrów.

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

Możesz zmienić tę metodę w pomocnika, aby uniknąć pisania kodu za każdym razem, gdy go potrzebujesz.

Dla każdego innego adresu URL, który tworzysz Mage::getUrl(), możesz przekazać parametry zapytania w następujący sposób:

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

powyższy kod wygeneruje:

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

Marius
źródło
@ Simon ... przy przegłosowaniu podaj powód.
Marius
przepraszam, było trochę za szybko - nie podobał mi się pierwszy blok kodu, ponieważ istnieje wbudowany sposób na osiągnięcie tego, ale ty też to pokazujesz, więc wszystko dobrze.
Simon
... a teraz nie mogę już zmienić swojego głosu (czego nie lubię we wszystkich witrynach SE). W każdym razie myślę, że to dość dziwne, że możesz zobaczyć, kto głosował na twoją odpowiedź: /
Simon
@Szymon. Myślę, że się trochę myliłem w tej sprawie. Zobacz, co napisały benmarks w innej odpowiedzi. Więc twój głos w dół miał dobry powód. Właśnie powiedziałem, że powinieneś podać powód przy głosowaniu z dołu. Zapewniam cię, że nie widzisz, kto ocenił odpowiedzi na SO. Właśnie to zbadałem. Ponieważ ta strona nie ma dużej liczby głosów i użytkowników, łatwo jest dowiedzieć się, kto głosował. Nie powiem ci, jak się dowiedziałem, ale wszystko, co mogę powiedzieć, to to, że łatwo jest zobaczyć, kto głosował w niedziele i poniedziałki. :)
Marius
LOL dobrze :) Tak, myślę, że odpowiedź Bensa powinna być zaakceptowana na to pytanie. W każdym razie dziękuję i życzę dobrej pracy!
Simon
26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);
zalety
źródło
2
To jest prawdziwa odpowiedź.
JamesHalsall
Nie sądzę, że istnieje najlepsza odpowiedź na to pytanie, ponieważ przekazywanie parametrów w adresie URL nie jest specyficzne dla Magento, chociaż Magento zawiera odpowiednią metodę.
Tyler Maginnis
1
@TylerMaginnis „czy jest jakaś wbudowana funkcja [w Magento], której można użyć do dodania parametrów zapytania [do ciągu adresu URL]?”
zyskuje
8

Możesz użyć pomocnika core / url :

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