یکی دیگه از امکانات فریم ورک Yii که شبیه به CWidget هست CPortlet می باشد
CPortlet توی پروژتون استفاده شده و اون همون ساید باریه که منو رو به شما نمایش میده : operation
برای ساخت یک CPortlet همانند CWidget رفتار میکنیم.
به عنوان مثال میخوایم برای کاربری که لاگین هست منویی ایجاد کنیم تا دسترسی راحت تری به امکانات سایت داشته باشه.
خوب همانند CWidget یه فایل با عنوان دلخواه در components میسازیم
من اسم فایل یا ماژولم را MyPortlet گذاشتم
نکته این که CPortlet یه متغییر پیش فرض با نام title داره که عنوان ماژول را میشه باهاش ست کرد
شما اگر به فولدر layouts در Views برین فایل column2 رو که باز کنین
میبینین که یک CPortlet وجود داره که title اون operation هست .
میتونین عنوانو تغییر بدین
$this->beginWidget('zii.widgets.CPortlet', array( 'title'=>'عملیات', ));
خوب برگردیم به فایل MyPortlet.php
ابتدا ماژولتون باید از CPortlet ارث ببره.
همانند Cwidget دو متد init , run داریم
در init من عنوان پورت لت امو انتخاب میکنم
class MyPortlet extends CPortlet { public function init() { $this->title=CHtml::encode(Yii::app()->user->name); parent::init(); } protected function renderContent() { $this->render('myPortletindex'); } }
قسمت عنوان را برابر با نام کاربری که لاگین کرده قرار دادم
در run هم ویویی با نام myPortletindex را صدا زدم
در قسمت ویو هم کد زیر را قرار دادم (html)
<li> <?php echo CHtml::link(‘ثبت کاربر’,array(‘user/create’)); ?></li> <li><?php echo CHtml::link(‘مدیریت کاربران’,array(‘user/admin’)); ?></li> <li><?php echo CHtml::link(‘خروج’,array(‘site/logout’)); ?></li>
تمام
حالا باید اونو استفاده کنیم
مثل CWidget
if(!Yii::app()->user->isGuest) $this->widget('MyPortlet');
در کد بالا من در صورتی ماژول را نمایش میدم که کاربر در سایت وارد شده باشد .
شکل زیر حاصل دسترنج من و شماست