1

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

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

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

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

4

5 回答 5

3

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

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

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

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

现在,要实现这一点,您必须定义几个数据提供者,设置几个列表视图,然后将所有内容放入您的DashboardController. 不!从 Yii 的约定和一般的 MVC 来看,应该有:fat modelthis 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)
于 2013-07-19T13:32:45.820 回答
2

首先,让我们来看看这个。嗯,将近200页,但让我把它留在这里,并在下面的答案中引用它。

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

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

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

干杯!

于 2013-07-13T10:41:29.887 回答
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'),

                ))
        )
  ));
于 2013-07-20T07:55:11.650 回答
1

听起来你想实现一个菜单。假设你至少已经完成了Ignat B. 提到的创建第一个 Yii 应用程序,你可以阅读CMenu类文档来了解它们,你的修改会layout.php放在protected\views.

于 2013-07-16T17:52:50.643 回答
0

正如 Syakur Ra​​hman 所说,emetrotile 是创建仪表板的一个很好的扩展。我用它创建了一个漂亮的 3 x 2 菜单,每个菜单的前面都有一个图像,后面有文本,它们一个接一个地按顺序翻转。它有一个非常酷的效果,但它确实有 Windows 的感觉。

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

于 2016-01-21T20:57:03.773 回答