关于php:在Yii Framework中创建仪表板

Create a dashboard in Yii Framework

我是yii的新手。 我正在yii中做一个小型应用程序。
假设我有一些表,例如product, sales, discount, customer,
现在,我已经为这些表完成了所有的Models和Controllers(crud)。 现在,当管理员想要输入一种新产品时,他正在输入

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

。 同样,他必须输入折扣才能进入折扣部分。 现在,我想像仪表板一样在一个应用程序中呈现所有模块。 管理员可以直接从单个页面进行更改的地方。 所以有人可以告诉我如何解决这个问题。 任何帮助和建议将是非常可观的。

编辑
我已经浏览了一些链接,但是没有找到任何文档。


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

  • 一个将展示最新产品
  • 其他将显示用户最近编辑的帖子
  • 也许sales将显示最高的销售额?

现在,您应该选择何时允许对这些项目进行某些操作。

  • 对于产品,您可能有一些(示例)快速按钮/链接:publishupdate
  • 对于客户,可能是orders

现在,要完成此操作,您将必须定义几个数据提供程序,设置几个列表视图,然后将所有内容放入您的DashboardController中。没有!从Yii惯例到MVC,通常应该有:胖模型,此控制器和明智的看法。

考虑到上述因素,您应该为每种数据类型创建小部件。窗口小部件应该是"独立的",就像您的仪表板的"模型"一样。应该包含实体类型所需的所有逻辑,并且不需要任何配置(也用于自动创建)。

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

为此目的一个很好的开始是CPortLet-它已经定义了诸如仪表板小部件之类的东西,带有标题,并在内容周围带有div

这是一些从Portlet开始的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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:

1
2
3
4
5
$this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$dataProvider,
        'itemView'=>'_productView',
        'enablePagination'=>true,
    ));

_productView中放置有关产品的任何内容:

1
2
3
4
5
6
7
8
9
10
11
<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:

1
2
3
$this->widget('path.to.ProductDashboard');
$this->widget('path.to.SalesDashboard');
....

或以某种自动化方式:

1
2
3
4
// Possibly user defined only etc.
$widgets = array('ProductDashboard', 'SalesDashboard', ...);
foreach($widgets as $name)
    $this->widget($name)


首先,让我们看一下。嗯,差不多有200页,但让我留在这里,在以下答案中进行参考。

因此,我们希望有一个页面可以管理表的编辑/删除/更新操作,Yii可以通过两种方式为您提供帮助:

1st适用于懒惰的编码者,或刚开始使用框架的家伙。只需转到文档并找到1.6创建第一个Yii应用程序。本文将帮助您使用演示模型/视图/控制器来设置基本配置。该演示安装的结果就像您的仪表板需要更多功能来探索一样

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

干杯!


如果它是您要查找的菜单列表,则可以尝试以下扩展:http://www.yiiframework.com/extension/emetrotile

您需要做的就是按照源代码中的说明进行操作,然后在要加载的位置调用它,类似于以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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'),

                ))
        )
  ));

听起来您想实现一个菜单。假设您至少已经完成了Ignat B.提到的"创建第一个Yii应用程序",则可以阅读CMenu类文档以了解它们,并且所做的修改将在protected\\views中的layout.php文件中进行。


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

德鲁·格林(Drew Green)编写的原始js似乎一直都在改进,请参阅http://www.drewgreenwell.com/projects/metrojs