Membuat Menu Dan Databasenya

mt sore para master yii…

saya newbie dan ingin sekali untuk belajar yii…

yang saya mo tanyakan, gimana sih menghubungkan menu ke database? soalnya saya udah ikutin tutorialnya dan gak ada masalah, tapi saya masih bingung menghubungkan menu dengan database, maksud saya supaya bisa membuat website yang dinamis.

Menghubungkan menu ke database di sini kaya gimana, masbro? Mungkin bisa diperjelas pertanyaannya? Lebih bagus lagi kalau ada contoh kasus dan kodenya.

maksud sya ini gan, contoh nya blog demo dari yii, kalau tidak login maka menu sidebarnya tidak muncul, tapi sebaliknya kalau udah login baru menu sidebarnya ada, itu aturnya dimana ya?

4878

pertanyaan.jpg

Mungkin bro hc bisa liat di ‘views/layouts/column2.php’:


<?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>

Jadi menunya ditampilkan hanya jika user sudah login.

gan saya taro coding :


<?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>

di column2.php tapi kemudian muncul erorr ini :

PHP warning

include(UserMenu.php) [<a href=‘function.include’>function.include</a>]: failed to open stream: No such file or directory

C:\xampp\htdocs\yii\framework\YiiBase.php(423)

411 {

412 include($classFile);

413 if(YII_DEBUG && basename(realpath($classFile))!==$className.’.php’)

414 throw new CException(Yii::t(‘yii’,‘Class name “{class}” does not match class file “{file}”.’, array(

415 ‘{class}’=>$className,

416 ‘{file}’=>$classFile,

417 )));

418 break;

419 }

420 }

421 }

422 else

423 include($className.’.php’);

424 }

425 else // class name with namespace in PHP 5.3

426 {

427 $namespace=str_replace(’\\’,’.’,ltrim($className,’\\’));

428 if(($path=self::getPathOfAlias($namespace))!==false)

429 include($path.’.php’);

430 else

431 return false;

432 }

433 return class_exists($className,false) || interface_exists($className,false);

434 }

435 return true;

Stack Trace

kenapa ya gan?

Widget UserMenu-nya sudah dibuat gan? Kalau gak salah ada di folder ‘protected/components’.

Ngemeng2 kalau agan ngikutin tutorial blog dari Yii, setau ane hasil akhirnya bisa diliat di folder ‘demos/blog’. Bisa bandingkan ke situ jika ada yang salah. :)

ok gan. thx ya sblumnya :)

tp mo tnya lagi dunk gan, klo cara bikin halaman login menjadi halaman pertama, gmn ya? jadinya kayak facebook gitu, orang musti punya username dan password dulu bru bisa login…

Sama2, gan. Semoga cepat mahir Yii-nya. :lol:

Bisa set defaultAction di SiteController.php:




class SiteController extends Controller

{

    public $defaultAction = 'login';

....

}



dengan catatan actionLogin-nya sudah dibuat.

oh gitu ya gan, klo pake login form bawaan bisa gk ya?

Ini maksudnya login form bawaan Yii, ya? Bisa, gan, nanti tinggal diatur aja waktu render view-nya.

iya gan login form yii… gan sya masukin kode ini <?php echo $this->renderPartial(‘LoginForm’, array(‘model’=>$model)); ?> di layout/main.php tapi munculnya erorr ini : Parse error: syntax error, unexpected T_PUBLIC in C:\xampp\htdocs\haleluyayii\protected\controllers\SiteController.php on line 12 sedangkan line 12 itu fungsi yg lain…atau di model dan controlernya jg ada yg diubah?

Bisa diposting kodenya di sini, gan? Mungkin ada kesalahan di bagian deklarasinya?

Cuma ane bingung kenapa render form loginnya di layout? :unsure:

ini kode siteControler.php gan :

<?php

class SiteController extends Controller

{

public &#036;defaultAction = 'login';


}





/**


 * Declares class-based actions.


 */


public function actions()


{


	return array(


		// captcha action renders the CAPTCHA image displayed on the contact page


		'captcha'=&gt;array(


			'class'=&gt;'CCaptchaAction',


			'backColor'=&gt;0xFFFFFF,


		),


		// page action renders &quot;static&quot; pages stored under 'protected/views/site/pages'


		// They can be accessed via: index.php?r=site/page&amp;view=FileName


		'page'=&gt;array(


			'class'=&gt;'CViewAction',


		),


	);


}





/**


 * This is the default 'index' action that is invoked


 * when an action is not explicitly requested by users.


 */


public function actionIndex()


{


	// renders the view file 'protected/views/site/index.php'


	// using the default layout 'protected/views/layouts/main.php'


	&#036;this-&gt;render('index');


}





/**


 * This is the action to handle external exceptions.


 */


public function actionError()


{


	if(&#036;error=Yii::app()-&gt;errorHandler-&gt;error)


	{


		if(Yii::app()-&gt;request-&gt;isAjaxRequest)


			echo &#036;error['message'];


		else


			&#036;this-&gt;render('error', &#036;error);


	}


}





/**


 * Displays the contact page


 */


public function actionContact()


{


	&#036;model=new ContactForm;


	if(isset(&#036;_POST['ContactForm']))


	{


		&#036;model-&gt;attributes=&#036;_POST['ContactForm'];


		if(&#036;model-&gt;validate())


		{


			&#036;name='=?UTF-8?B?'.base64_encode(&#036;model-&gt;name).'?=';


			&#036;subject='=?UTF-8?B?'.base64_encode(&#036;model-&gt;subject).'?=';


			&#036;headers=&quot;From: &#036;name &lt;{&#036;model-&gt;email}&gt;&#092;r&#092;n&quot;.


				&quot;Reply-To: {&#036;model-&gt;email}&#092;r&#092;n&quot;.


				&quot;MIME-Version: 1.0&#092;r&#092;n&quot;.


				&quot;Content-type: text/plain; charset=UTF-8&quot;;





			mail(Yii::app()-&gt;params['adminEmail'],&#036;subject,&#036;model-&gt;body,&#036;headers);


			Yii::app()-&gt;user-&gt;setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');


			&#036;this-&gt;refresh();


		}


	}


	&#036;this-&gt;render('contact',array('model'=&gt;&#036;model));


}





/**


 * Displays the login page


 */


public function actionLogin()


{


    &#036;model=new LoginForm;





    // if it is ajax validation request


    if(isset(&#036;_POST['ajax']) &amp;&amp; &#036;_POST['ajax']==='login-form')


    {


        echo CActiveForm::validate(&#036;model);


        Yii::app()-&gt;end();


    }





    // collect user input data


    if(isset(&#036;_POST['LoginForm']))


    {


        &#036;model-&gt;attributes=&#036;_POST['LoginForm'];


        // validate user input and redirect to the previous page if valid


        if(&#036;model-&gt;validate() &amp;&amp; &#036;model-&gt;login())


             &#036;this-&gt;redirect('index.php?r=user/dashboard');


    }


    // display the login form


    &#036;this-&gt;render('login',array('model'=&gt;&#036;model));


}


public function actionAdminLogin()


{


    &#036;model=new LoginForm;





    // if it is ajax validation request


    if(isset(&#036;_POST['ajax']) &amp;&amp; &#036;_POST['ajax']==='login-form')


    {


        echo CActiveForm::validate(&#036;model);


        Yii::app()-&gt;end();


    }





    // collect user input data


    if(isset(&#036;_POST['LoginForm']))


    {


        &#036;model-&gt;attributes=&#036;_POST['LoginForm'];


        // validate user input and redirect to the previous page if valid


        if(&#036;model-&gt;validate() &amp;&amp; &#036;model-&gt;login1())


            if(Yii::app()-&gt;user-&gt;profile==1)


            {


                 &#036;this-&gt;redirect('index.php?r=admin/dashboard');


            }


            else{


                 &#036;this-&gt;redirect('index.php?r=user/dashboard');


            }


    }


    // display the login form


    &#036;this-&gt;render('login',array('model'=&gt;&#036;model));


}





/**


 * Logs out the current user and redirect to homepage.


 */


public function actionLogout()


{


	Yii::app()-&gt;user-&gt;logout();


	&#036;this-&gt;redirect(Yii::app()-&gt;homeUrl);


}

}

mank render dimana gan? maklum newbie,hehee

Gan, tutup kurung yang di deklarasi itu untuk akhiran deklarasi kelas. Tinggal dihapus aja.




class SiteController extends Controller

{

   public $defaultAction = 'login';


   /**

    * Declares class-based actions.

    */

   public function actions()

   ..... (kode yang laen)

}



gan sya udh coba hapus tapi ttep eror…trs sya coba hapus tanda kurung di kode ini class SiteController extends Controller

{

public $defaultAction = ‘login’; erorr nya hilang tapi halaman login nya gak muncul, jadinya kayak biasa aja langsung tampil index nya. kira2 apa lg yg salah ya gan?

Tanda kurung yang dihapus itu yang di bawah deklarasi $defaultAction, gan. Nanti struktur kodenya jadi mirip dengan yang ane posting sebelumnya.

View untuk login-nya udah dibuat? Agan akses halaman index itu dari ‘localhost/(nama aplikasi)/’ atau ‘http://localhost/(nama aplikasi)/index.php?r=site/index’? Kalau agan mau supaya halaman ‘http://localhost/(nama aplikasi)/index.php?r=site/index’ hanya bisa diakses setelah login, ya tinggal tambahin accessRules:




/**

 * @return array action filters

 */

public function filters()

{

   return array(

      'accessControl',

   );

}

    

/**

 * Specifies the access control rules.

 * This method is used by the 'accessControl' filter.

 * @return array access control rules

 */

public function accessRules()

{

   return array(

     array('allow', 

	'actions'=>array('login'),

	'users'=>array('*'),

     ),

     array('allow', 

        'actions'=>array('index'),

        'users'=>array('@'),

     ),

     array('deny',  // deny all users

	'users'=>array('*'),

     ),

   );

}



Kalo sudah pake accessRules, sepertinya sih defaultAction-nya dihilangkan juga gpp, gan.

sya akses halaman index itu dari 'localhost/(nama aplikasi)/. gan sya masukin kode yang ini udah ok gan. tapi yang hanya bisa diakses setelah login adalah halaman home, about, contact. ketika saya bikin database yang baru ternyata itu gak otomatis ya gan? sya harus nambahin koding apa ya di database sya yg baru supaya diakses setelah login?

Ane gak ngerti ini maksudnya apa? Mungkin agan mau tambahin modul baru dengan tabel dari database? Kalo mau gitu ya paling generate dulu kodenya pake Gii.

gan trims ya udh mau bantuin ane…mo tnya lg dunk, ane kan lagi bkin database siswa, gimana caranya nambahin foto di setiap siswa ya? jadinya ada fasilitas upload foto di setiap nama siswa, bantu dunk gan?

Gan, klo mo nanya untuk topik yang berbeda sebaiknya bikin thread baru. :)

Kalo ane boleh saranin (just saran nih, ya :) ), sebelum posting di forum mendingan cari2 di Google dulu. Biasanya untuk topik2 yang umum udah ada yang buat tutorial ato postingannya. Untuk yang upload foto, contohnya, bisa baca di artikel ini.