57 view o replies + personal message to qiang...

selamat pagi…

sesuai judul, pertanyaan saya (dibawah) copas dari topik berjudul URL Manager… statusnya: 57 views 0 replies, bahkan saya sempat kirim pertanyaan ini langsung ke qiang, sampai sekarang belum ada jawaban… apakah karena saya menyebutkan cara melakukannya di framework lain…

Ketika saya posting ini di topik General: jawaban yang sy peroleh: cari di dokumentasi.

Sebelum sy mengajukan pertanyaan ini, sy sudah membaca dokumentasi-nya, sudah mencoba tutorial bikin blog-nya, sudah membaca buku awd with yii-nya packpub… dan karena saya begitu bodohnya, saya belum menemukan jawaban/solusi untuk permasalahan saya… sy yakin ada diantara master-master sekalian yang bisa menjawab/memberi solusi atas pertanyaan saya ini…

Ini Copas-nya…

Salam kenal…

Ceritanya saya sedang membuat situs sebuah organisasi yang punya banyak unit dimana unit tersebut nantinya dapat mengelola sendiri konten-nya…

alamat url dibuat seperti berikut:

http://domain.com/unitsatu

mengacu pada controller => main, action => index, unitid = 1

http://domain.com/unitdua

mengacu pada controller => main, action => index, unitid = 2

http://domain.com/unitsatu/read

mengacu pada controller => main, action => read, unitid = 1

http://domain.com/unitdua/read

mengacu pada controller => main, action => read, unitid = 2

Ketika menggunakan codeigniter saya membuat route seperti berikut :

route["unitsatu"] = "/main/index/1";

route["unitdua"] = "/main/index/2";

route["unitsatu/read/(:any)"] = "/main/read/1";

route["unitdua/read/(:any)"] = "/main/read/2";

dimana 1 dan 2 adalah id dari masing-masing unit. id tersebut akan digunakan sebagai kondisi where di query.

Ok…

Teman-teman yang pernah belajar ci tentu tahu bahwa untuk membaca 1 dan 2 kita gunakan $this->uri-rsegment(3) dan membaca paramater yang di any menggunakan $this->uri-segment(n).

Bagamana membuat route seperti ini di YII (UrlManager) dan bagaimana membaca 1 dan 2 nya…?

Terima kasih atas jawaban yang akan diberikan…

Hallo cahndeso,

keliatannya problemmnya di urlManager,

Mungkin kamu bisa rubah di rules urlManagernya :


'urlManager'=>array(

	'urlFormat'=>'path',

	'rules'=>array(

		'<controller:\w+>/<id:\d+>'=>'<controller>/view',

		'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

		'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

		'unitsatu'=>'/units/1',

		'unitdua'=>'/units/2',

		'unittiga'=>'/units/3',

		'unitempat'=>'/units/4',

	),

),

jadi pada saat user mangakses domain.com/unitsatu maka secara otomatis urlManager akan memberikan route ke url

domain.com/units/1

semoga bisa menjawab ^^

Ok, saya coba bantu, walaupun blum pernah coba CI, dulu baru sempet install doank, trus mainin Scafolding, klo di yii namanya CRUD. dah sampe situ doank…

klo saya rasa knp mr. qiang tdk reply, mungkin karena permasalahannya lebih condong ke rancangan sistem framework itu sendiri.

klo di yii param url-nya seperti ini




http://nasrsis.com/unit1/index.htm



dimana unit1 adalah sebuah tabel di database x

klo ada tambahan parameter lain…




http://nasrsis.com/unit1/view/29



perhatikan susunan principle-holder nya, dari yang terkuat(unit1) sampe ke yg terkecil(record)

klo di CI yg bro cahndeso ingin terapkan




http://nasrsis.com/unitsatu

atau

http://domain.com/unitsatu/read



ini tidak ada masalah dalam yii, yii otomatis akan membacanya seperti itu, dengan menambahkan url




'urlFormat'=>'path'



dengan beranggapan unitsatu adalah sebuah tabel.

klo bro cahndeso ingin implementasikan seperti ini… he3x… bhs nya gaul banget :)




http://domain.com/main/index/2



klo ‘2’ adalah sebuah tabel, saya rasa ini tdk memungkinkan di yii, krn memang bukan aturan mainnya, tp klo sebuah record, ya tdk ada masalah(ingat susunan place holder-nya), brarti tabelnya adlh ‘main’.

klo unitsatu atau unitdua sebuah database, krn mungkin komplex nantinya…

tinggal di-folderin aja, dan di index dikasih link menuju masing2x folder unitnya.

klo mo ambil query parameter atau sgla macem yg berkaitan dng url bisa liat di manualnya di CWebApplication, ini salah satu induk kelas yii. salah satu contohnya…




print_r(Yii::app()->urlManager->rules);



ha haai…

mungkin begitu menurut ane, klo ada solusi lainnya dari agan2x yg lain boleh di share.

maklum ane juga masih newbie… [color="#FFFFFF"]… [/color]

Agak susah juga sih ini soalnya karena satu dua tiga itu bukan numeric. jadi mau tidak mau caranya input satu persatu kedalam rules urlManager.

kalau dipaksa untuk buat script path level 1 (domain.com/unitsatu) maka akan merubah struktur dari framewok yii.

jadi lebih baik pakai cara di input satu persatu di rules urlManagernya seperti cara yg saya jabarkan diatas.

Semoga bisa menjawab


Agak susah juga sih ini soalnya karena satu dua tiga itu bukan numeric.

harusnya unitsatu, unitdua itu controllernya(nama tabel) bro, jadi tidak pengaruh numeric atau string, kecuali memang langsung di inject id record+controller disitu…

tp klo di hardcore gitu… kyanya aneh dah…

Tks… akhirnya ada yang menjawab…

sekedar memperjelas pertanyaan:

jika menggunakan url yang terdahulu memang menjadi:

http://domain.com/main/index/id… dimana id akan diisi dengan id unit organisasi (diambil dari table unit, berdasar id unit ini, system akan membaca data halaman (table halaman), data blok (table blok) dst… semua data yang terkait dengan unit tersebut).

hanya saja unit-unit yang ada menginginkan alamat url mereka menjadi http://domain.com/namaunit

sehingga jadilah seperti berikut:

http://domain.com/unitsatu

mengacu pada controller => main, action => index, unitid = 1

http://domain.com/unitdua

mengacu pada controller => main, action => index, unitid = 2

http://domain.com/unitsatu/read

mengacu pada controller => main, action => read, unitid = 1

http://domain.com/unitdua/read

mengacu pada controller => main, action => read, unitid = 2

Implementasi di codeigniter saya membuat route seperti berikut (belum seluruhnya selesai… terus coba yii, beberapa fitur yii terutama module gii mempercepat pekerjaan pembuatan backend serta orm yang sudah tersedia… di codeigniter sy harus cari dari tempat lain) :

route["unitsatu"] = "/main/index/1";

route["unitdua"] = "/main/index/2";

route["unitsatu/read/(:any)"] = "/main/read/1";

route["unitdua/read/(:any)"] = "/main/read/2";

dimana 1 dan 2 adalah id dari masing-masing unit (table unit). id tersebut akan digunakan sebagai kondisi where di query.

sehingga ketika unit menulis alamat :

http://domain.com/unitsatu maka yang dikerjakan adalah controller main, action index . muncullah halaman dengan data dari unitsatu tersebut… (berdasar id yang diambil dengan fungsi rsegment(3) yang digunakan untuk query halaman,blok dsb.).

http://domain.com/unitsatu/read/2004/12/02/23/judul-berita

maka yang dikerjakan adalah controller main action read dengan pembacaan url :

rsegment(3) ketemu 1 (id unit pada table unit, sebagai acuan untuk membaca data dari table-table lain.)

segment(3) = 2004

segment(4) = 12

segment(5) = 02

segment(6) = 23

kombinasi rsegment dan segment terebut diatas digunakan sebagai condition pada where-nya…

So…?

Mungkin memang sekedar karena rancangan framework yang berbeda… tapi jujur sy masih penasaran mencari solusi-nya…

terpikir juga untuk membuat 1 controller untuk tiap-tiap unit

misal:

http://domain.com/unitsatu merujuk ke controller unitsatu (action index dan read)…

http://domain.com/unitsatu merujuk ke controller unitsatu (action index dan read)…

tapi kok kayaknya kurang efektif… seandaninya ada 24 unit… maka 24 karakter dan 48 action

Jika ada unitbaru bergabung pengin ngisi konten sendiri dikemudian hari…? sy harus membuat satu controller baru…?

maka router harus bisa menangani-nya…

setiap ada penambahan unit baru… maka url http://domain.com/unitbaru tetap dapat ditangani oleh router tanpa ada perubahan apapun di programnya…

sampai hari ini sy coba utak-utik UrlManager, tetap belum membuahkan hasil seperti yang diharapkan.

tks… ditunggu jika ada saran lain…

happy coding…


hanya saja unit2x yang ada menginginkan alamat url mereka menjadi http://domain.com/namaunit 

jika kondisinya seperti ini, solusinya memang seperti yg bro [color="#4B0082"]YiieRz - SdgBlajar[/color] tawarkan




'urlManager'=>array(

        'urlFormat'=>'path',

        'rules'=>array(

                '<controller:\w+>/<id:\d+>'=>'<controller>/view',

                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

                'unitsatu'=>'pathalias/controller/1',

        ),

),



coba ditanyakan ke general apa bisa menggunakan path alias sebelum controller(mapping url), sehingga paling tidak terbaca urlnya, atau klo memngkinkan bisa dynamic.

atau solusi lain me-rewritten path di .htaccess file setiap kali ada unit baru yg di masuk


tapi kok kayaknya kurang efektif... 

seandaninya ada 24 unit... maka 24 karakter dan 48 action

Jika ada unitbaru bergabung pengin ngisi konten sendiri dikemudian hari...? 

sy harus membuat satu controller baru...?

apa di CI di hardcore juga url-nya atau dynamic?




route["unitsatu"] = "/main/index/1";

route["unitdua"] = "/main/index/2";

route["unitsatu/read/(:any)"] = "/main/read/1";

route["unitdua/read/(:any)"] = "/main/read/2";



klo seperti ini di yii saya kira memungkinkan




http://domain.com/contoller/action/unitsatu



dimana unit satu itu nantinya masuk ke parameter query di urlmanager.

Tq. gambate…

Yup… betul… bagian ini diganti dengan looping data dari table unit untuk membuat route.

Jadi ketika ada penambahan unit oleh admin, otomatis route bertambah…

kalau dibuat index berbeda gimana akan seperti ini

https://localhost/web3cms/index.php

https://localhost/web3cms/unit1.php or https://localhost/web3cms/index1.php (untuk unit1 )

https://localhost/web3cms/unit2.php or https://localhost/web3cms/index2.php (untuk unit2 )

https://localhost/web3cms/unit3.php or https://localhost/web3cms/index3.php (untuk unit3)

untuk config nya


 'urlManager'=>array(

            'urlFormat'=>'path',

            //'caseSensitive'=>false,

            //'showScriptName'=>true,

            //'urlSuffix'=>'.html',

            'rules'=>require(dirname(__FILE__).DIRECTORY_SEPARATOR.'routes.php'),

untuk routes.php


<?php


// url routes

$retval=array(

);

$myfile=dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'mycustom'.DIRECTORY_SEPARATOR.basename(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.basename(dirname(__FILE__)).DIRECTORY_SEPARATOR.basename(__FILE__);

return (file_exists($myfile) && is_array($myarray=require($myfile))) ? CMap::mergeArray($retval,$myarray) : $retval;

penambahan index dpt dibuat didatabase

mungkin dpt membantu