मौजूदा 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। मुझे लगता है कि मैं इस पर थोड़ा गलत था। देखें कि दूसरे उत्तर में क्या लिखा है। तो आपके डाउन वोट का एक अच्छा कारण था। मैंने सिर्फ यह कहा कि आपको नीचा दिखाने के लिए एक कारण देना चाहिए। और बाकी का आश्वासन दिया है, तो आप नहीं देख सकते हैं जो एसओ पर जवाब ठुकरा दिया। मैंने बस थोड़ी जांच की। क्योंकि इस वेबसाइट पर भारी मात्रा में वोट नहीं हैं और उपयोगकर्ताओं को यह पता लगाना आसान है कि किसने इसे डाउनवोट किया। मैं आपको यह नहीं बताऊंगा कि मुझे कैसे पता चला, लेकिन सभी मैं कह सकता हूं कि यह देखना आसान है कि रविवार और सोमवार को किसने क्या किया। :)।
मेरियस

LOL ठीक है :) हाँ, मुझे लगता है कि Bens का उत्तर इस प्रश्न पर स्वीकार किया जाना चाहिए था। वैसे भी, धन्यवाद और अच्छा काम जारी रखो!
साइमन

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

2
यही असली जवाब है।
जेम्सहॉलसॉल

मुझे नहीं लगता कि इसका कोई सर्वश्रेष्ठ उत्तर है, क्योंकि किसी URL में पासिंग पैराग्राफ Magento के लिए विशिष्ट नहीं है, हालांकि Magento में इसके लिए एक विधि है।
टायलर मैजिनीस

1
@TylerMaginnis "क्या कोई फ़ंक्शन [Magento] में बनाया गया है जिसे मैं क्वेरी पैरामीटर [URL URL में जोड़ने के लिए उपयोग कर सकता हूं?"
16

8

आप कोर / यूआरएल सहायक का उपयोग कर सकते हैं :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.