เพิ่มพารามิเตอร์การสืบค้นให้กับสตริง 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 หมวดหมู่และผลลัพธ์ที่ต้องการได้อย่างไร
Marius

อัปเดตคำถามเพื่อสะท้อนถึงสิ่งนี้
Marty Wallace

คำตอบ:


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 ... เมื่อ downvoting ให้เหตุผล
Marius

ขออภัยมันเร็วเกินไป - ไม่ชอบบล็อกโค้ดแรกเพราะมีวิธีการในตัวเพื่อให้บรรลุสิ่งนี้ แต่คุณก็แสดงให้เห็นด้วยวิธีนี้ดังนั้นทั้งหมดดี
Simon

... และตอนนี้ฉันไม่สามารถเปลี่ยนการลงคะแนนของฉันได้อีก (ซึ่งฉันไม่ชอบมากที่ไซต์ SE ทั้งหมด) อย่างไรก็ตามฉันคิดว่ามันค่อนข้างแปลกที่คุณจะเห็นว่าใครลงคะแนนให้กับคำตอบของคุณ: /
Simon

@Simon ฉันคิดว่าฉันผิดไปเล็กน้อย ดูเครื่องหมายบอกตำแหน่งที่เขียนไว้ในคำตอบอื่น ดังนั้นการโหวตของคุณจึงมีเหตุผลที่ดี ฉันเพิ่งกล่าวว่าคุณควรให้เหตุผลเมื่อ downvoting และมั่นใจได้ว่าคุณไม่สามารถดูได้ว่าใครลงคะแนนโหวตใน SO ฉันเพิ่งตรวจสอบเล็กน้อย เนื่องจากเว็บไซต์นี้ไม่มีการโหวตจำนวนมากและผู้ใช้จึงเป็นเรื่องง่ายที่จะทราบว่ามีใครโหวตแล้ว ฉันจะไม่บอกคุณว่าฉันรู้ แต่สิ่งที่ฉันสามารถพูดได้ก็คือมันเป็นเรื่องง่ายที่จะเห็นว่าใครโหวตในวันอาทิตย์และวันจันทร์ :)
Marius

ฮ่า ๆ โอเค :) ใช่ฉันคิดว่าคำตอบของเบ็นน่าจะเป็นคำตอบที่ได้รับการยอมรับสำหรับคำถามนี้ อย่างไรก็ตามขอขอบคุณและติดตามการทำงานที่ดี!
Simon

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 จะมีวิธีการ
Tyler Maginnis

1
@TylerMaginnis "มีฟังก์ชันใดในตัว [ใน Magento] ที่ฉันสามารถใช้เพื่อเพิ่มพารามิเตอร์การสืบค้น [ไปยังสตริง URL]?"
benmarks

8

คุณสามารถใช้ตัวช่วยcore / 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.