Hinzufügen von Abfrageparametern zu einer vorhandenen URL-Zeichenfolge

16

Gibt es in Magento eine integrierte Funktion, mit der ich Abfrageparameter hinzufügen kann, wenn ich eine URL-Zeichenfolge habe?

Genau in dem Fall, in dem ich gerade eine Kategorie-URL generiere, möchte ich eine Reihe von Abfrageparametern hinzufügen.

Ich mache folgendes:

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

Ich möchte dann die folgenden Abfrageparameter hinzufügen:

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

Ich möchte dann enden mit:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2
Marty Wallace
quelle
Können Sie ein Beispiel dafür geben, was Sie erreichen möchten? Wie generieren Sie die Kategorie-URL und was ist das gewünschte Ergebnis?
Marius
Aktualisierte Frage, um dies zu reflektieren
Marty Wallace

Antworten:

10

Ich glaube nicht, dass es einen "eingebauten" Weg gibt, um dies zu erreichen.
Die Methode Mage_Catalog_Model_Url::getUrl()akzeptiert keine Parameter. Sie können die Methode überschreiben, aber es sei denn, Sie benötigen für alle Kategorien etwas Ähnliches. Ich sehe keinen Grund, dies zu tun.
Ich denke, der billigste Weg ist, die Parameter direkt hinzuzufügen.

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

Sie können dies zu einer Methode in einem Helfer machen, um zu vermeiden, dass der Code jedes Mal geschrieben wird, wenn Sie ihn benötigen.

Für jede andere URL, die Sie Mage::getUrl()erstellen, können Sie Abfrageparameter wie diesen übergeben:

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

Der obige Code generiert Folgendes:

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

Marius
quelle
@ Simon ... beim Abstimmen einen Grund angeben.
Marius
sorry, war ein bisschen zu schnell - mochte den ersten Codeblock nicht, weil es einen eingebauten Weg gibt, dies zu erreichen, aber du zeigst auch diesen Weg, also alles gut.
Simon
... und jetzt kann ich meine Stimme nicht mehr ändern (was mir an allen SE-Standorten nicht gefällt). Wie auch immer, ich finde es ziemlich seltsam, dass Sie sehen können, wer Ihre Antwort abgelehnt hat: /
Simon
@ Simon. Ich glaube, ich habe mich ein bisschen geirrt. Sehen Sie, was Benmarks in einer anderen Antwort geschrieben haben. Ihre Ablehnung hatte also einen guten Grund. Ich habe nur gesagt, dass Sie beim Abstimmen einen Grund angeben sollten. Und seien Sie versichert, Sie können nicht sehen, wer die Antworten auf SO herabgestuft hat. Ich habe nur ein bisschen nachgeforscht. Da diese Website nicht über eine große Anzahl von Stimmen und Nutzern verfügt, ist es ziemlich einfach herauszufinden, wer abstimmt. Ich werde Ihnen nicht sagen, wie ich es herausgefunden habe, aber alles was ich sagen kann ist, dass es leicht zu sehen ist, wer sonntags und montags abstimmt. :).
Marius
LOL okay :) Ja, ich denke Bens Antwort hätte die akzeptierte Antwort auf diese Frage sein sollen. Wie auch immer, danke und mach weiter so!
Simon
26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);
benmarks
quelle
2
Das ist die wahre Antwort.
JamesHalsall
Ich glaube nicht, dass es eine beste Antwort darauf gibt, da das Übergeben von Parametern in einer URL nicht spezifisch für Magento ist, obwohl Magento eine Methode dafür enthält.
Tyler Maginnis
1
@TylerMaginnis "
benmarks
8

Sie können den Core / URL- Helfer verwenden:

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