在Yii Framework中创建仪表板

时间:2013-07-13 10:11:57

标签: php yii

我是yii的新手。我正在Yii做一个小应用程序。 让我们假设我有一些像product, sales, discount, customer,这样的表 现在我已经完成了这些表的所有模型和控制器(crud)。管理员想要输入一个新产品,然后输入

http://localhost/application/index.php?r=product

。以同样的方式,他必须输入折扣去折扣部分。现在我想在一个应用程序中渲染所有模块,就像仪表板一样。管理员可以直接从该单个页面更改他想要的内容。那么有人可以告诉我如何解决这个问题。任何帮助和建议都会非常明显。

修改 我已经浏览了一些links,但我没有在那里找到任何文档。

5 个答案:

答案 0 :(得分:3)

首先,您应该考虑应该在仪表板上显示什么,您已经选择了一些实体。从这些实体可能有不同的标准来显示项目:

  • 将展示最新产品
  • 其他将按用户显示上次编辑的帖子
  • 也许sales会有最高销量?

现在,您应该选择何时允许对该项目采取某些措施。

  • 对于产品,您可以拥有一些(样本)快捷按钮/链接:publishupdate
  • 对于客户,可能有orders

现在,要完成此操作,您必须定义多个数据提供程序,设置多个列表视图,并将所有这些内容放入DashboardController。没有!从Yii约定和MVC来看,应该有:胖模型这个控制器,以及明智的视图。

考虑到上述情况,您应该为每种类型的数据创建窗口小部件。小部件应该是“独立的”,这将类似于仪表板的“模型”。应该包含实体类型所需的所有逻辑,并且不应该要求任何配置(也用于自动创建)。

对于仪表板小部件,您还应该为此创建一些基类,因此仪表板小部件将始终如一:具有一些布局。

为此目的的一个良好开端是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)

答案 1 :(得分:2)

首先,让我们来看看this。呃,差不多200页,但是让我把它留在这里,并在下面的答案中提及它。

因此,我们想要一个可以使用表管理编辑/删除/更新操作的页面,Yii可以通过两种方式帮助您:

第一个是懒惰的编码器,还是刚开始使用框架的人。只需转到documentation,找出 1.6 Creating First Yii Application 。本文将帮助您设置演示模型/视图/控制器的基本配置以使用它。此演示安装的结果就像您需要的仪表板以及更多要探索的功能一样

第二步需要很多代码才能显示在这里,它将只是一个指令,如何逐步构建所有内容,您可以使用Yii自动完成第一步。只要问你是否想了解它。

干杯!

答案 2 :(得分:1)

听起来你想要实现一个菜单。假设您至少已经完成了Ignat B提到的创建第一个Yii应用程序,您可以阅读CMenu类文档来了解它们,并且您的修改将在{ {1}}中的{1}}文件。

答案 3 :(得分:1)

如果是您要查找的菜单列表,您可以尝试使用此扩展程序:http://www.yiiframework.com/extension/emetrotile

您需要做的就是按照源中的说明进行操作,然后将其调用到您希望加载的位置,类似于下面的说明:

$this->widget('ext.emetrotile.EMetroTile', array(
    'Tiles'=>array(
                array('title'=>'Test Title', 'tiles'=>array(
                    array('content'=>array('test1-a','test1-b'), 'liveTileOptions'=>array('data-speed'=>750, 'data-delay'=>3000,'data-stack'=>true)),
                    array('content'=>'test2', 'position'=>'bottom'),
                    array('content'=>'test4', 'position'=>'bottom'),
                    array('content'=>'Blog', 'style'=>'vertical', 'url'=>'http://blog.expressthisout.com'),
                    array('content'=>'test3', 'style'=>'horizontal'),
                    array('content'=>'test5', 'position'=>'bottom'),
                    array('content'=>'test6', 'position'=>'top'),

                ))
        )
  ));

答案 4 :(得分:0)

正如Syakur Ra​​hman所说,emetrotile是创建仪表板的良好扩展。我用它创建了一个不错的3 x 2菜单,每个菜单的正面都有一个图像,背面有文字,它们依次翻转。它有一个非常酷的效果,但它确实有Windows的感觉。

Drew Green写道,原始的js似乎一直在改进它,见http://www.drewgreenwell.com/projects/metrojs

相关问题