首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Yii框架中创建仪表板

在Yii框架中创建仪表板
EN

Stack Overflow用户
提问于 2013-07-13 10:11:56
回答 5查看 4.1K关注 0票数 1

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

代码语言:javascript
复制
http://localhost/application/index.php?r=product

。同样地,他必须输入折扣才能进入折扣区。现在,我想将所有模块呈现在一个应用程序中,就像仪表板一样。那里的管理员可以直接做出改变,他想要从单一的网页。所以有人能告诉我如何解决这个问题吗。任何帮助和建议都将是值得赞赏的。

编辑我已经读过一些链接,但是我没有在那里找到任何文档。

EN

回答 5

Stack Overflow用户

发布于 2013-07-19 13:32:45

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

  • 一个将展示最新的产品。
  • 其他将显示用户上次编辑的帖子。
  • 也许sales会表现出最高的销售额?

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

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

现在,要实现这一点,您必须定义几个数据提供程序,设置几个列表视图,并将所有这些放入您的DashboardController中。不是的!从Yii的约定和MVC的一般情况来看,应该有:fat模型、这个控制器和wise视图。

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

对于仪表板小部件,您还应该为此目的创建一些基类,因此仪表板小部件将始终如一地看上去:要有一些布局。

CPortLet是一个很好的开端--它已经定义了一些想法,比如仪表板小部件、标题,以及围绕它的内容的div

下面是一些从portlet开始的示例:

代码语言:javascript
复制
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:

代码语言:javascript
复制
$this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$dataProvider,
        'itemView'=>'_productView',
        'enablePagination'=>true,
    ));

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

代码语言:javascript
复制
<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:

代码语言:javascript
复制
$this->widget('path.to.ProductDashboard');
$this->widget('path.to.SalesDashboard');
....

或者以某种自动化的方式:

代码语言:javascript
复制
// Possibly user defined only etc.
$widgets = array('ProductDashboard', 'SalesDashboard', ...);
foreach($widgets as $name)
    $this->widget($name)
票数 3
EN

Stack Overflow用户

发布于 2013-07-13 10:41:29

首先,让我们看看。嗯,差不多200页,但让我把它留在这里,然后在下面的答案中参考一下。

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

第一种是懒散的codders,或者刚开始使用框架的人。只需转到文档,并找到创建第一个YIIApplication的1.6。本文将帮助您使用演示模型/视图/控制器来设置基本配置。这个演示安装的结果就像您的仪表板一样,需要更多的特性来探索。

第二步需要大量的代码才能在这里显示出来,这将只是一个指导,如何逐步构建所有您可以在第一步使用Yii自动完成的所有操作。问问你想不想知道更多。

干杯!

票数 2
EN

Stack Overflow用户

发布于 2013-07-16 17:52:50

听起来你想要实现一个菜单。假设您至少已经通过了Ignat提到的创建第一个YIIApplication的,您可以阅读CMenu类文档来了解它们,您的修改将在protected\views中的layout.php文件中进行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17629198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档