クエリパラメータを既存の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


@サイモン...ダウン投票するとき、理由を挙げてください。
マリウス

申し訳ありませんが、少し速すぎました-これを達成するための組み込みの方法があるため、最初のコードブロックが好きではありませんでしたが、その方法も示していますので、すべて良いです。
サイモン14

...そして今、私はもう投票を変更することはできません(すべてのSEサイトでそれが嫌いです)。とにかく、誰があなたの答えを下したのかを見ることができるのは非常に奇妙だと思う:/
Simon 14

@サイモン。私はこれについて少し間違っていたと思います。他の回答でベンマークが書いたものを見てください。したがって、あなたの反対票には正当な理由がありました。私はちょうどあなたがダウン投票の際に理由を与えるべきだと述べた。そして、安心して、あなたは誰がSOに答えを下したのか見ることができません。ちょっと調べました。このウェブサイトには大量の投票やユーザーがいないため、誰が投票しているかを簡単に見つけることができます。私がどうやって見つけたのかはお話ししませんが、私が言えることは、日曜日と月曜日に誰がダウン投票したかを見るのは簡単だということです。:)。
マリウス

大丈夫:)ええ、ベンスの答えはこの質問で受け入れられたはずだったと思います。とにかく、感謝し、良い仕事を続けてください!
サイモン14

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

2
これが本当の答えです。
ジェームズハルサル

Magentoにはメソッドが含まれていますが、URLでパラメーターを渡すことはMagentoに固有ではないため、これに対する最善の答えはないと思います。
タイラーマギニス

1
@TylerMaginnis 「[Magento]に、[URL文字列に]クエリパラメータを追加するために使用できる組み込み関数はありますか?」
ベンチマーク

8

コア/ URLヘルパーを使用できます:

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.