【问题标题】:Create a dashboard in Yii Framework在 Yii 框架中创建仪表板
【发布时间】:2013-07-11 20:08:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请告诉我们你已经做了什么。因为基本答案可以是“阅读手册”。我们应该知道你对 Yii 了解多少;)
  • 是的,我已经检查了 yii 中的一些模块,例如 yiiframework.com/extension/yii-dashboard,但我没有得到任何文档
  • 您正在寻找来自 Yii 的 django 管理员界面?
  • 为了更好地理解 Yii,我建议你建立自己的仪表板,不管现有的脚本。询问如何了解更多信息;)
  • 是的,我想要一种简单的仪表板,我的所有模型都将在一个页面中呈现,就像 wordpress 一样

标签: php yii


【解决方案1】:

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

  • 将展示最新产品
  • 其他将显示用户最后编辑的帖子
  • 也许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)

【讨论】:

  • Finally in your dashboard index view place those portlets: - 那个视图在哪里?在 /components/products/views/index.php?
  • 没错,就像通常的索引操作视图(或者无论你如何命名,yii 不会强制视图名称)
【解决方案2】:

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

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

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

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

干杯!

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果它是您正在寻找的菜单列表,您可以试试这个扩展: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'),
      
                      ))
              )
        ));
      

      【讨论】:

        【解决方案5】:

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

        Drew Green 写的原来的js好像一直在改进,见http://www.drewgreenwell.com/projects/metrojs

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-06
          • 1970-01-01
          • 2017-07-31
          • 1970-01-01
          • 2014-05-17
          • 1970-01-01
          • 2016-05-21
          • 1970-01-01
          相关资源
          最近更新 更多