首先,您应该考虑应该在仪表板上显示什么,您已经选择了一些实体。从该实体中,显示项目可能有不同的标准:
- 一会展示最新产品
- 其他将显示用户最后编辑的帖子
- 也许
sales
会显示最高的销售额?
现在,您应该选择何时允许对这些项目执行某些操作。
- 对于产品,您可以有一些(示例)快速按钮/链接:
publish
,update
- 对于客户可能有
orders
现在,要实现这一点,您必须定义几个数据提供者,设置几个列表视图,然后将所有内容放入您的DashboardController
. 不!从 Yii 的约定和一般的 MVC 来看,应该有:fat model、this controller和 wise view 。
考虑到上述情况,您应该为每种类型的数据创建小部件。小部件应该是“独立的”,这就像仪表板的“模型”。应该包含实体类型所需的所有逻辑,并且不需要任何配置(也用于自动创建)。
对于仪表板小部件,您还应该为此创建一些基类,以便仪表板小部件看起来一致:有一些布局。
一个好的开始是CPortLet
- 这已经定义了一些类似于仪表板小部件的想法,带有标题,并div
围绕它的内容。
下面是一些从 portlet 开始的示例:
class ProductDashboard extends CPortlet // Or intermediate class, ie. DashboardItem
{
protected $_products = array();
public function init()
{
$this->_products = new CActiveDataProvider('Product', array(
'criteria'=>array(
'with'=>array('...'),
'order'=>'t.sort_order ASC',
'condition'=>'...',
'together'=>true,
),
));;
$this->title= 'Newset producs';
parent::init();
}
protected function renderContent()
{
$this->render('productDashboard');
}
}
在 portlet 视图中,views/productDashboard.php
只需放置 listview:
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_productView',
'enablePagination'=>true,
));
_productView
到位关于产品的任何东西:
<h4><?= CHtml::encode($data->name); ?></h4>
<p><?= CHtml::encode($data->description); ?></p>
<p>
<?= CHtml::link('Update', array('/product/update', 'id' => $data->id)); ?>
<?= CHtml::link('View', array('/product/view', 'id' => $data->id)); ?>
... More actions ...
</p>
最后在仪表板索引视图中放置这些 portlet:
$this->widget('path.to.ProductDashboard');
$this->widget('path.to.SalesDashboard');
....
或者以某种自动化方式:
// Possibly user defined only etc.
$widgets = array('ProductDashboard', 'SalesDashboard', ...);
foreach($widgets as $name)
$this->widget($name)