додати параметри запиту до існуючого рядка URL-адреси


16

Чи є у мене в Magento рядок URL-адрес, чи є якась вбудована функція, яку я можу використовувати для додавання до неї параметрів запиту?

У точному випадку, на який я дивлюся, я генерую URL-адресу категорії, а потім хочу додати набір параметрів запиту поверх неї.

Я роблю наступне:

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

Потім я хочу додати такі параметри запиту:

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

Потім я хочу закінчити:

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

Чи можете ви навести приклад того, що ви намагаєтесь отримати? Як ви генеруєте URL-адресу категорії та який бажаний результат?
Маріус

Оновлено питання, щоб відобразити це
Марті Уоллес

Відповіді:


10

Я не думаю, що існує "побудований" спосіб цього досягти.
Метод Mage_Catalog_Model_Url::getUrl()не приймає жодних параметрів. Ви можете перекрити метод, але якщо вам не потрібно щось подібне для всіх категорій, я не бачу сенсу це робити.
Я думаю, що найдешевший спосіб - це додавання параметрів безпосередньо.

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

Ви можете зробити цей метод у помічнику, щоб не писати код кожного разу, коли вам це потрібно.

Для будь-якого іншого URL-адреси, який ви створюєте, Mage::getUrl()ви можете передавати параметри запитів на зразок цього:

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

наведений вище код буде генерувати наступне:

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


@Simon ... прихиляючись, вкажіть причину.
Маріус

Вибачте, був трохи занадто швидким - не сподобався перший блок коду, тому що існує вбудований спосіб цього досягти, але ви також так показуєте, так що все добре.
Саймон

... і тепер я вже не можу змінити свій голос (що мені дуже не подобається на всіх сайтах SE). У всякому разі, я думаю, що це досить дивно, що ви можете бачити, хто спростував вашу відповідь: /
Саймон

@Simon Я думаю, що я трохи помилявся на цьому. Подивіться, які орієнтири написали в іншій відповіді. Тож ваш голосовий голос мав вагомі причини. Я щойно заявив, що слід наводити причину, коли відхиляється. І будьте впевнені, ви не можете побачити, хто спростував відповіді на ТА. Я просто трохи дослідив. Оскільки на цьому веб-сайті немає величезної кількості голосів і користувачів, то легко дізнатись, хто виступав проти цього. Я не розкажу вам, як я це дізнався, але все, що я можу сказати, це те, що легко зрозуміти, хто ставився в неділю та понеділок. :).
Маріус

LOL добре :) Так, я думаю, відповідь Бенса повинна була бути прийнятою на це питання. У будь-якому випадку, дякую і продовжуйте гарну роботу!
Саймон

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

2
Це справжня відповідь.
JamesHalsall

Я не думаю, що на це є найкраща відповідь, оскільки передача парами в URL-адресі не характерна для Magento, хоча Magento містить метод для цього.
Тайлер Магінніс

1
@TylerMaginnis "чи є вбудована функція [в Magento], яку я можу використовувати для додавання параметрів запиту [до рядка URL-адреси]?"
орієнтири

8

Ви можете скористатися допоміжником core / url :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.