добавить параметры запроса в существующую строку 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


@ Симон ... когда голосую, объясни причину.
Мариус

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

... и теперь я больше не могу менять свой голос (который мне очень не нравится на всех сайтах SE). Во всяком случае, я думаю, что это довольно странно, что вы можете видеть, кто отклонил ваш ответ: /
Саймон

@Simon. Я думаю, что я был немного неправ в этом. Посмотрите, что отметки написали в другом ответе. Так что у вашего отрицательного голоса была веская причина. Я только что заявил, что вы должны указать причину при голосовании. И будьте уверены, вы не можете видеть, кто отрицал ответы на SO. Я просто немного исследовал. Поскольку этот сайт не имеет большого количества голосов и пользователей, легко определить, кто проголосовал против. Я не буду рассказывать вам, как я узнал, но все, что я могу сказать, это то, что довольно легко увидеть, кто проголосовал по воскресеньям и понедельникам. :).
Мариус

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 helper:

$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.