Yii Framework Forum: 57 view o replies + personal message to qiang... - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

57 view o replies + personal message to qiang... Rate Topic: -----

#1 User is offline   cahndeso 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 02-December 10

Posted 09 December 2010 - 08:17 PM

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....
0

#2 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 09 December 2010 - 09:45 PM

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 ^^
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#3 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 09 December 2010 - 11:09 PM

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.. Posted Image

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.. Posted Image
mungkin begitu menurut ane, klo ada solusi lainnya dari agan2x yg lain boleh di share.
maklum ane juga masih newbie.. ................. Posted Image
0

#4 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 10 December 2010 - 03:32 AM

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
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#5 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 10 December 2010 - 04:11 AM

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..
Posted Image
0

#6 User is offline   cahndeso 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 02-December 10

Posted 12 December 2010 - 12:35 PM

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/un...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...
0

#7 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 12 December 2010 - 10:45 PM

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


jika kondisinya seperti ini, solusinya memang seperti yg bro YiieRz - SdgBlajar 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.. Posted Image
1

#8 User is offline   cahndeso 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 02-December 10

Posted 13 December 2010 - 01:27 AM

View Postfastcrash, on 12 December 2010 - 10:45 PM, said:

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";



Yup... betul.. bagian ini diganti dengan looping data dari table unit untuk membuat route.
Jadi ketika ada penambahan unit oleh admin, otomatis route bertambah...
0

#9 User is offline   YII alvs 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 11-February 10

Posted 13 December 2010 - 01:50 AM

View Postcahndeso, on 13 December 2010 - 01:27 AM, said:

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users