thêm tham số truy vấn vào chuỗi url hiện có


16

Trong Magento nếu tôi có chuỗi URL, có chức năng tích hợp nào tôi có thể sử dụng để thêm tham số truy vấn vào chuỗi đó không?

Trong trường hợp chính xác tôi đang xem tôi đang tạo một URL danh mục và sau đó tôi muốn thêm một bộ tham số truy vấn trên đầu trang.

Tôi đang làm như sau:

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

Tôi muốn sau đó thêm các tham số truy vấn sau:

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

Sau đó tôi muốn kết thúc với:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2

Bạn có thể đưa ra một ví dụ về những gì bạn đang cố gắng để có được? Làm thế nào bạn tạo url danh mục và kết quả mong muốn là gì?
Marius

Câu hỏi cập nhật để phản ánh điều này
Marty Wallace

Câu trả lời:


10

Tôi không nghĩ có một cách 'được xây dựng' để đạt được điều này.
Phương pháp Mage_Catalog_Model_Url::getUrl()không chấp nhận bất kỳ tham số. Bạn có thể ghi đè phương thức, nhưng trừ khi bạn cần một cái gì đó như thế này cho tất cả các danh mục, tôi không thấy một điểm nào khi thực hiện.
Tôi nghĩ rằng cách rẻ nhất là thêm các tham số trực tiếp.

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

Bạn có thể biến phương thức này thành một trình trợ giúp để tránh viết mã mỗi khi bạn cần.

Đối với bất kỳ url nào khác mà bạn xây dựng thông qua Mage::getUrl()bạn có thể chuyển các tham số truy vấn như thế này:

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

đoạn mã trên sẽ tạo ra các mục sau:

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


@Simon ... khi hạ cấp, đưa ra lý do.
Marius

xin lỗi, quá nhanh - không thích khối mã đầu tiên, bởi vì có một cách tích hợp để đạt được điều này, nhưng bạn cũng chỉ ra cách đó, vì vậy tất cả đều tốt.
Simon

... Và bây giờ tôi không thể thay đổi phiếu bầu của mình nữa (điều mà tôi không thích ở tất cả các trang SE). Dù sao, tôi nghĩ khá lạ khi bạn có thể thấy ai đã hạ thấp câu trả lời của bạn: /
Simon

@Simon. Tôi nghĩ rằng tôi đã sai một chút về điều này. Xem những gì benmark đã viết trong một câu trả lời khác. Vì vậy, phiếu bầu của bạn có một lý do tốt. Tôi chỉ tuyên bố rằng bạn nên đưa ra một lý do khi hạ cấp. Và hãy yên tâm, bạn không thể xem ai đã đánh giá thấp câu trả lời trên SO. Tôi chỉ điều tra một chút. Bởi vì trang web này không có số lượng phiếu bầu khổng lồ và người dùng nên dễ dàng tìm ra ai bị đánh giá thấp. Tôi sẽ không cho bạn biết làm thế nào tôi phát hiện ra, nhưng tất cả những gì tôi có thể nói là thật dễ dàng để biết ai đã đánh giá thấp vào Chủ nhật và Thứ Hai. :).
Marius

LOL ổn :) Vâng, tôi nghĩ câu trả lời của Bens nên được chấp nhận cho câu hỏi này. Dù sao, cảm ơn và tiếp tục công việc tốt!
Simon

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

2
Đây là câu trả lời thực sự.
JamesHalsall

Tôi không nghĩ rằng có một câu trả lời tốt nhất cho vấn đề này, vì việc chuyển các thông số trong một URL không dành riêng cho Magento, mặc dù Magento có một phương pháp cho nó.
Tyler Maginnis

1
@TylerMaginnis "có chức năng tích hợp nào [trong Magento] mà tôi có thể sử dụng để thêm tham số truy vấn [vào chuỗi URL] không?"
đánh dấu

8

Bạn có thể sử dụng trình trợ giúp lõi / url :

$params = array('param1' => 'myparam1', 'param2' => 'myparam2');
$newCategoryUrl = Mage::helper('core/url')->addRequestParam($categoryUrl, $params);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.