まず、ダッシュボードに何を表示するかを考える必要があります。すでにいくつかのエンティティを選択しています。そのエンティティから、アイテムを表示するためのさまざまな基準が存在する可能性があります。
- 1つは最新の製品を表示します
- その他には、ユーザーが最後に編集した投稿が表示されます
- そして、おそらく
sales
最高の売上を示すでしょうか?
ここで、これらのアイテムに対して何らかのアクションをいつ許可するかを選択する必要があります。
- 製品については、いくつかの (サンプル) クイック ボタン/リンクを使用できます:
publish
、update
- 顧客にとっては
orders
さて、これを達成するには、いくつかのデータプロバイダーを定義し、いくつかのリストビューをセットアップし、それらすべてをDashboardController
. いいえ!Yii の慣習と MVC から、一般的に、fat model、this controller、および wise view が必要です。
上記を考慮して、データの種類ごとにウィジェットを作成する必要があります。ウィジェットは「独立」している必要があります。これはダッシュボードの「モデル」のようなものです。エンティティのタイプに必要なすべてのロジックを含める必要があり、構成を必要としない必要があります(自動作成の場合も)。
ダッシュボード ウィジェットの場合は、この目的のためにいくつかの基本クラスも作成する必要があります。これにより、ダッシュボード ウィジェットの外観が一貫したものになります: 何らかのレイアウトが得られます。
この目的のための良い出発点はCPortLet
、ダッシュボード ウィジェットのようなもの、タイトル、およびdiv
そのコンテンツの周りを既に定義していることです。
ポートレットから始める例を次に示します。
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');
}
}
ポートレット ビューでは、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>
最後に、ダッシュボードのインデックス ビューにこれらのポートレットを配置します。
$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)