1

私はの初心者yiiです。で小さなアプリケーションを実行していますYii。次のようないくつかのテーブルがあるとしproduct, sales, discount, customer, ましょう。これらのテーブルのすべてのモデルとコントローラー (crud) を作成しました。今、管理者が 1 つの新製品を入力したい場合、彼は入力しています

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

. 同様に、彼は割引セクションに行くために割引を入力する必要があります。ここで、ダッシュボードと同じように、すべてのモジュールを 1 つのアプリケーションでレンダリングしたいと考えています。管理者がその単一のページから必要なものを直接変更できる場所。誰かがこの問題を解決する方法を親切に教えてくれますか。どんな助けや提案も本当に価値があります。

編集 いくつかのリンクを調べましたが、そこにドキュメントは見つかりませんでした。

4

5 に答える 5

3

まず、ダッシュボードに何を表示するかを考える必要があります。すでにいくつかのエンティティを選択しています。そのエンティティから、アイテムを表示するためのさまざまな基準が存在する可能性があります。

  • 1つは最新の製品を表示します
  • その他には、ユーザーが最後に編集した投稿が表示されます
  • そして、おそらくsales最高の売上を示すでしょうか?

ここで、これらのアイテムに対して何らかのアクションをいつ許可するかを選択する必要があります。

  • 製品については、いくつかの (サンプル) クイック ボタン/リンクを使用できます: publishupdate
  • 顧客にとってはorders

さて、これを達成するには、いくつかのデータプロバイダーを定義し、いくつかのリストビューをセットアップし、それらすべてをDashboardController. いいえ!Yii の慣習と MVC から、一般的に、fat modelthis controller、および wise view が必要です。

上記を考慮して、データの種類ごとにウィジェットを作成する必要があります。ウィジェットは「独立」している必要があります。これはダッシュボードの「モデル」のようなものです。エンティティのタイプに必要なすべてのロジックを含める必要があり、構成を必要としない必要があります(自動作成の場合も)。

ダッシュボード ウィジェットの場合は、この目的のためにいくつかの基本クラスも作成する必要があります。これにより、ダッシュボード ウィジェットの外観が一貫したものになります: 何らかのレイアウトが得られます。

この目的のための良い出発点はCPortLet、ダッシュボード ウィジェットのようなもの、タイトル、およびdivそのコンテンツの周りを既に定義していることです。

ポートレットから始める例を次に示します。

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');
    }
}

ポートレット ビューでは、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>

最後に、ダッシュボードのインデックス ビューにこれらのポートレットを配置します。

$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 は 2 つの方法でそれを支援できます。

1 つ目は怠惰なコッダー、またはフレームワークを使い始めたばかりの人向けです。ドキュメントにアクセスして、 1.6 Creation First Yii Applicationを見つけてください。この記事は、デモ モデル/ビュー/コントローラーを使用して基本的な構成を設定し、それを操作するのに役立ちます。このデモ インストールの結果は、調査する機能がさらに必要なダッシュボードのようなものです。

2 番目のステップには、ここに表示される多くのコードが必要です。これは、1 番目のステップで実行できるすべてを 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 に答える