tambahkan parameter kueri ke string url yang ada

16

Di Magento jika saya memiliki string URL, apakah ada fungsi bawaan yang dapat saya gunakan untuk menambahkan parameter kueri ke dalamnya?

Dalam kasus yang tepat saya melihat saya membuat URL kategori dan kemudian saya ingin menambahkan satu set parameter kueri di atasnya.

Saya melakukan hal berikut:

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

Saya ingin kemudian menambahkan parameter permintaan berikut:

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

Saya kemudian ingin berakhir dengan:

http://mysite.com/mycategory.html?param1=myparam1&param2=myparam2
Marty Wallace
sumber
Bisakah Anda memberi contoh tentang apa yang ingin Anda peroleh? Bagaimana Anda menghasilkan url kategori dan apa hasil yang diinginkan?
Marius
Pertanyaan yang diperbarui untuk mencerminkan ini
Marty Wallace

Jawaban:

10

Saya tidak berpikir ada cara 'built-in' untuk mencapai ini.
Metode Mage_Catalog_Model_Url::getUrl()ini tidak menerima parameter apa pun. Anda dapat mengganti metode, tetapi kecuali jika Anda membutuhkan sesuatu seperti ini untuk semua kategori saya tidak melihat titik untuk melakukannya.
Saya pikir cara termurah adalah menambahkan parameter secara langsung.

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

Anda bisa menjadikan ini sebagai metode dalam helper untuk menghindari penulisan kode setiap kali Anda membutuhkannya.

Untuk url lain apa pun yang Anda buat, Mage::getUrl()Anda dapat meneruskan params query seperti ini:

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

kode di atas akan menghasilkan yang berikut:

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

Marius
sumber
@Simon ... saat downvoting, berikan alasan.
Marius
maaf, agak terlalu cepat - tidak suka blok kode pertama, karena ada cara built-in untuk mencapai ini, tetapi Anda juga menunjukkan cara itu, jadi semuanya baik-baik saja.
Simon
... dan sekarang saya tidak dapat mengubah suara saya lagi (yang saya sangat tidak suka di semua situs SE). Ngomong-ngomong, saya pikir cukup aneh bahwa Anda dapat melihat siapa yang menurunkan jawaban Anda: /
Simon
@Simon. Saya pikir saya agak salah dalam hal ini. Lihat apa yang dituliskan tanda jawaban dalam jawaban lain. Jadi pilihan Anda memiliki alasan yang bagus. Saya baru saja menyatakan bahwa Anda harus memberi alasan ketika downvoting. Dan yakinlah, Anda tidak dapat melihat siapa yang menurunkan jawaban pada SO. Saya baru saja menyelidiki sedikit. Karena situs web ini tidak memiliki jumlah suara dan pengguna yang besar, mudah untuk mencari tahu siapa yang kalah. Saya tidak akan memberi tahu Anda bagaimana saya mengetahuinya, tetapi yang bisa saya katakan adalah mudah untuk melihat siapa yang kalah pada hari Minggu dan Senin. :)
Marius
LOL oke :) Ya, saya pikir jawaban Bens seharusnya yang diterima pada pertanyaan ini. Bagaimanapun, terima kasih dan terus bekerja dengan baik!
Simon
26
echo Mage::getUrl('',
    array(
        '_direct' => Mage::getModel('core/url_rewrite')->loadByIdPath('category/1')->getRequestPath(),
        '_query' => array('param1' => 'myparam1','param2' => 'myparam2')
    )
);
tanda batas
sumber
2
Ini jawaban yang sebenarnya.
JamesHalsall
Saya tidak berpikir bahwa ada jawaban terbaik untuk ini, karena melewati params di URL tidak khusus untuk Magento, meskipun Magento berisi metode untuk itu.
Tyler Maginnis
1
@TylerMaginnis "apakah ada fungsi
tanda harga
8

Anda dapat menggunakan pembantu inti / url :

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