Yii Layout

Newbie nich. Ada yang tahu cara membagi layout menjadi 3 g?, soalnya saya dah coba browse di Yii cookbook tapi g mudeng ^_^… sapa tahu rekan2 ada yg dah pernah buat website dg Yii. terima kasih.

maksudnya membagi layout menjadi 3 kolom?

dalam floder views, ada folder layouts. di situ layouting yang digunakan setiap halaman pada umumnya.

[list=1]

[*]bikin view layoutnya

buka /protected/views/layouts/layout2.php --> save as dengan nama layout3.php misalnya.

lalu tambahkan satu div untuk kolom di dalamnya




<?php $this->beginContent('application.views.layouts.main'); ?>

<div class="container">

	<div class="span-19">

                <div id="menuKiri">

			<ul>

   			   <li>menu 1</li>

   			   <li>menu 2</li>

   			   <li>menu 3</li>

			</ul> 

		</div>

		<div id="content">

			<?php echo $content; ?>

		</div><!-- content -->

	</div>

	<div class="span-5 last">

		<div id="sidebar">

		<?php

			$this->beginWidget('zii.widgets.CPortlet', array(

				'title'=>'Operations',

			));

			$this->widget('zii.widgets.CMenu', array(

				'items'=>$this->menu,

				'htmlOptions'=>array('class'=>'operations'),

			));

			$this->endWidget();

		?>

		</div><!-- sidebar -->

	</div>

</div>

<?php $this->endContent(); ?>



[*]atur tampilan pada /css/main.css


...

#menuKiri

{

    padding: 20px;

	float:left;

	margin-right:10px;

	width:150px;

}

...

[*]set $layout pada controller yang ingin ditampilkan

/protected/controller/SiteController.php




<?php


class SiteController extends Controller

{

        //jika kita ingin menjadikan layout ini sebagai default bagi seluruh site/view

	public $layout='application.views.layouts.column3'; 

	public function actions()

	{

		...

	}

        ...

        public function actionIndex()

	{

		// jika kita ingin menjadikan kalyou tini sebagai default pada halaman site/index saja

		$this->layout='application.views.layouts.column3';

		$this->render('index');

	}

        ...



atau bisa pula dari file viewnya langsung misal pada /protected/views/site/contact.php




<?php

$this->pageTitle=Yii::app()->name . ' - Contact Us';

$this->layout='application.views.layouts.column3';

?>


<h1>Contact Us</h1>


...



[/list]

semoga berhasil. :lol:

terima kasih mas nasrul, udah tak coba dan sukses…^_^

saya ingin tanya lagi. saya ingin membuat web yg modulnya bisa di install/uninstall mirip modulnya Joomla/Prestashop. Misalnya: saya membagi halaman web menjadi 4 bagian yaitu header, sidebar, content dan footer. masing2 bagian tsb ingin saya jadikan modul dan dapat di aktifkan/nonaktifkan. Jadi modul-modul tsb dapat diatur di halaman admin.

dan dalam modul-modul tsb dapat di sertakan file seperti image, css dll. Contoh module:




modules/

  + blocklink

  |-+ blocklink.php

  |-+ blocklink.xml

  |-+ logo.gif

  |-+ img

  |-+ main.css

  + ..



Apakah hal tsb mungkin di dalam Yii?, ada contoh webnya g?

terima kasih sebelumnya.

menurut ana, hal ini mungkin namun tidak dari layout.

layout mendefinisikan konten umum yang akan dirender secara keseluruhan + $content yang diambil dari view page yang kita panggil.

caranya:

  • kelompokkan tiap bagian yang akan diatur mode tampilnya ke dalam satu file misal _header.php, _menu.php, dll dan simpan dalam satu direktori khusus misal /protected/views/layouts/render

  • panggil dari view page dengan renderpartial()




<?php 

if ($modeTampil) echo $this->renderpartial('/layouts/render/_header', 'model'=>$model);


// jika path_view dimulai dengan '/' akan mengacu pada direktori views

// sehingga '/layouts/render/' mengacu ke '/protected/views/layouts/render'


// adapun $model adalah model data yang akan digunakan dalam _header.php

// sifatnya optional sehingga dapat diabaikan jika memang tidak menggunakan data

?>



semoga membantu :)

Ok, terima kasih telah membalas

akan saya coba,

saya sudah mencoba seperti yg anda sarankan, terus bagaimana saya bisa menyimpan settingan dari tiap2 modul tsb pada tabel?.

sebenarnya yg sy maksud adalah membuat web cms dengan Yii ^_^. Berikut ini sy sertakan screenshot dari modul halmn modul Prestashop:

713

prestashop_module1.jpg

714

prestashop_module2.jpg

715

prestashop_home.jpg

Nah, sy ingin membuat modulnya seperti itu…:D, soalnya ketika sy ditanya: bagaimana apabila sy ingin menambah blok sidebar, bannner kiri, dll. sy g bisa menjawabnya, :)

satu lagi mas ;D , bagaimana menyimpan file config Yii(protected/config/main.php) ke tabel database?. agar ketika kita mau menambah module/extensi/komponen tidak harus mengedit file main.php.

terima kasih banyak…

saya sendiri belum pernah memikirkan hal ini, tapi Anda sudah memulainya,

kenapa tidak Anda teruskan :lol: Gii mungkin solusinya. http://www.yiiframework.com/doc/guide/topics.gii

:D, makasih mas nasrul atas saranya. Gii ya, pernah baca tuh di guidenya.

saya dah coba googling n dapat dotplant dan flexica, cuma belum tak coba.

OK deh, kalau sukses jangan lupa dishare yah :)

sekali-kali bikin cookbook-nya juga boleh tuh… :P

thanks before bro :lol:

oke dech, secepatnya akan sy share ke forum. Terima kasih semuanya.

saya dah bisa buat cms sederhana dengan Yii. Akhirnya atas saran fastcrash sy menggunakan Widget yg sebelumnya tidak kepikir sampai ke situ. CMS yg sy buat sederhana saja, jadi begini didalam layout main sy bagi menjadi beberapa blok div.

Kemudian didalam blok div tsb terdapat widget yg sesuai dg posisinya(misal: mainmenu, sidebar, rightbar). Kemudian sy buat widgetnya, misal untuk sidebar namanya HookSidebar. Di dalam HookSidebar sy load widget2 yg aktif dan sesuai dengan posisinya dari widget modules. sy menggunakan 3 buah tabel yaitu hook, hook_module dan module.

Struktur direktorinya seperti ini:




protected/

  components/

    HookSidebar.php

  modules/

    bloklinks/

      components/

        bloklinks.php

      BlokLinksModule.php



Tapi sy masih punya masalah dengan konfigurasinya, ada yg tahu g cara menyimpan konfigurasi Yii agar bisa di ubah dan ditambah lewat admin atau disimpan ke tabel?

Sekedar berbagi cara mengganti path dari halaman statik. Default path halaman statik Yii

terletak pada folder views/site/pages. Apabila ingin mengganti default path tsb ke views/pages. Berikut ini langkah2nya:

  1. Buat folder "pages" pada "views"(protected/views).

  2. Buat class turunan dari CViewAction(misalnya: EViewAction) dan letakkan pada folder components(protected/components). contoh:




<?php

class EViewAction extends CViewAction

{

	public $basePath = 'application.views.pages';

}

?>



  1. Tambahkan definisi pada controllers/SiteController.php. contoh:



public function actions()

{

    return array(

        'page' => array(

            'class' => 'EViewAction',

        ),

    );

}



kemudian cobalah buat halaman statik, misalnya kontakkami.php. kemudian akses url dengan mengetik


http://localhost/blog/index.php?r=site/page&view=kontakkami

Terima kasih

Semoga berguna…

untuk membuat plug n play modul seperti Prestashop, yang dibutuhkan sebenarnya adalah nama dari file source modul yang aktif tersebut dan meloadnya di halaman tertentu dengan kolom tertentu dan poisisi tertentu. untuk itu selain ada tabel modul juga dibutuhkan kolaborasi dengan tabel menu.

jadi misalnya sewaktu menu news di klik, maka lakukan query ke database dgn parameter dari GET tersebut untuk mendapatkan modul apa saja yang dimiliki menu news tersebut. (cukup satu query)

gambaran umum tabel modul




ID                     //  pk modul

Title                  //  Nama Modulnya

Kategori               //  Kategori modul, exm:news, photo, video etc - optional

Source(varchar)        //  source yg akan di include di widget exm:tags.php, static.php, etc

Kolom(int)             //  pembagian kolom dari layout web tersebut, ada brapa kolom?

Position(int)          //  urutan posisi modul di suatu kolom, exm: 1, 2, 3 etc..

Status(boolean)        //  modul di pasang atau tidak?

ID_Menu                //  Fk dari tabel menu - perhatikan jika menu memiliki sub-sub menu -

                       //  (unlimited dynamic menu)



Agar tabel modul tidak cepat overhead karena selau diakses dan jarang sekali berubah(ganti modul paling sebulan sekali), maka hasil query sebaiknya disimpan dalam bentuk array di sebuah file inc/txt.

Jika ada 3 kolom, dibuat 3 file(kolom1.inc, kolom2.inc…), nah file2x inilah yang isinya berupa array record modul nantinya akan diolah(foreach) di setiap kolom/portlet/widget.

wuaahh… panjang bangeeettt!

ya tapi begitulah kira2x gambaran sekilas cara membuat feature modul plug n play yang sudah umum untuk cms-cms saat ini.

ini menurut pengalaman saya, mungkin rekan2x yii lain ada ide yang berbeda?

sipp, terima kasih. makin menarik nich perbincangannya.

sy ada kendala nih, bagaimana caranya agar file konfigurasi config/main.php dapat ditulisi secara dinamis?.

soalnya klo ada penambahan modul baru terus tulis manual, ribet… ;D

semua sudah d load dari database, tinggal di include jadi tidak perlu lagi set main.php??

klo source file, tentu di upload aja.

contoh include file




$this->widget('application.extensions.JQuerySlideTopMenu'.$sourceFile[0], array('items'=>$menu_array));



maksudnya gimana ya?. Soalnya pada saat mengenerate modul, Nama Modul harus di tambahkan ke main.php agar modulnya bisa diakses oleh Yii.

contohnya seperti ini:




'modules' => array(

    'YMOnline',

),



Caranya agar kita tidak susah2x memasukan Nama Modul ke file main.php gimana ya?.

terima kasih.

Berkaitan dengan hal diatas saya mau tanya mas,

Itu penulisan di layoutnya kan mas?

Trus penulisan pada Controller nya gimana mas untuk memanggil modelTampil dan model nya mas?