簡體   English   中英

Yii CGridView使用模型函數處理特殊情況

[英]Yii CGridView handle special cases using model function

在Yii Framework上使用CGridView遇到麻煩...

我正在尋找基於其擁有的值替換列的內容。 我需要處理特殊情況,因此我在模型中添加了一個函數以將值返回到GridView。 我收到結果錯誤“ Undefined variable: model ”。

我敢肯定這很簡單。 是因為我的dataProvider不是模型嗎?

這是我的代碼的簡化版:

<?php
/* @var $this BookController */
/* @var $dataProvider CActiveDataProvider */
/* @var $model Book */

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'book-grid',
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'name'=>'userName',
            'header'=>'Name',
            ),
        array(
            'name'=>'status',
            'header'=>'Status',
            'type'=>'raw',
            'value'=>array($model, 'statusText')
            ),
    )
));

?>

這是models / Book.php中的代碼

class Book extends CActiveRecord
{
    ...
    ...

    public function statusText($data, $row) {
        $content = '';

        if (CHtml::encode($data->status) == "processed") {
            $content = "Process completed";
        }
        else if ($data->status=="") {
            $content = "Queued for Processing";
        }
        else {
            $content = CHtml::encode($data->status);
        }

        return $content;
    }

    ...
    ...
}

這是我當前項目中的簡化示例;

    <?php

    //My controller
    class NewsController extends CController {


//The admin action
        public function actionAdmin() {
            $model = new News;

            $this->render('admin', array(
                'model' => $model
            ));
        }

    }

    //In my view file
    $this->widget('ext.widgets.MyTbGridView', array(
        'dataProvider' => $model->search(),
        'columns' => array(
            array(
                'name' => 'id',
                'filter' => false,
            ),
            array(
                'name' => 'title',
            ),
            array(
                'value' => array($model, 'gridDate')
            ),
        ),
    ));

    //My model function
    class News extends CActiveRecord {

        public function gridDate($data, $row) {
            return 'Date formatted!';
        }

    }
    ?>

代碼'value' => array($model, 'gridFormatDate'),很重要。 這里有兩種可能性。 該函數可以駐留在控制器中,在這種情況下,它應該是'value' => array($this, 'gridFormatDate'),或者可以在模型中,在這種情況下,給出正確的代碼

代替array($model, 'statusText') ,嘗試'$data->statusText'

模型中的方法應如下所示:

public function getStatusText() {
        $content = '';

        if (CHtml::encode($this->status) == "processed") {
            $content = "Process completed";
        }
        else if ($this->status=="") {
            $content = "Queued for Processing";
        }
        else {
            $content = CHtml::encode($this->status);
        }

        return $content;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM