将查询参数添加到现有的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

您能否举一个例子说明您想要获得什么?您如何生成类别网址,期望的结果是什么?
Marius

更新问题以反映这一点
Marty Wallace 2013年

Answers:


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

@西蒙 我想我在这个问题上有点不对。看看Benmarks在其他答案中写了些什么。因此,您的否决有充分的理由。我只是说过,您应该在拒绝投票时给出理由。放心,您看不到谁拒绝了SO的答案。我只是调查了一下。由于该网站的选票和用户数量不多,因此很容易找出拒绝投票的人。我不会告诉你我是怎么发现的,但是我只能说,很容易看出谁在星期日和星期一投票。:)。
马里乌斯

大声笑,好吧:)是的,我想Bens的回答应该是这个问题上公认的答案。无论如何,谢谢并继续努力!
西蒙

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

2
这是真正的答案。
JamesHalsall 2015年

我认为这不是最佳解决方案,因为在URL中传递参数并不特定于Magento,尽管Magento包含一个方法。
泰勒·马金尼斯 Tyler Maginnis)2016年

1
@TylerMaginnis “ [Magento]中有任何内置函数可用于向[URL字符串]添加查询参数吗?”
马克

8

您可以使用 核心/网址帮助程序:

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.