Php Yii CActiveDataProvider与类参数?

Php Yii CActiveDataProvider与类参数?,php,yii,Php,Yii,我在网站上找到了这个代码。要在CGridView中调用类TotalColumn,$dp dataprovider中必须包含什么?我是否必须让类TotalColumn位于$dp中的某个位置?你知道我该如何声明CActiveDataProvider吗 <?php // protected/views/inventory/index.php Yii::import('zii.widgets.grid.CGridColumn'); class TotalColumn extends CGrid

我在网站上找到了这个代码。要在CGridView中调用类TotalColumn,$dp dataprovider中必须包含什么?我是否必须让类TotalColumn位于$dp中的某个位置?你知道我该如何声明CActiveDataProvider吗

<?php
// protected/views/inventory/index.php

Yii::import('zii.widgets.grid.CGridColumn');

class TotalColumn extends CGridColumn {

private $_total = 0;

public function renderDataCellContent($row, $data) { // $row number is ignored

    $this->_total += $data->quantity;

    echo $this->_total;
}
}

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dp,   // provided by the controller
'columns' => array(
    'id',
    'name',
    'quantity',
    array(
        'header' => 'Total',
        'class'  => 'TotalColumn'
    )
)));

您应该在protected/components目录中创建TotalColumn类作为TotalColumn.php文件。这样,您可以在许多不同的视图文件中使用它,而不是仅定义的视图文件。我会自动加载

$dp应该是一个典型的DataProvider类,更可能是在控制器中定义并传递给视图的类。数据提供者可以像文档描述的那样简单

公共函数renderDataCellContent$row$data

是在gridview中定义的方法 但是没有像这样的方法

公共函数renderSkills$row$data


在gridview中,我的问题是我几乎是一字不差地复制了这段代码,我的类中的render函数也正好在CGridView的正上方,使用Yii::import调用时,什么都不回显。我的表有一个我创建的列,其中任何一行都没有输出。我将添加我在原始帖子中使用的代码。正如我前面所说,在protected/components目录中定义您的TotalSkills。这就是我定义所有自定义类的方式,我知道它是有效的。如果在视图中定义类,我不知道它将如何运行。为什么不以一种干净且有文档记录的方式来做呢?再次查看您的类,我发现您没有重写所需的renderDataCellContent方法,但是您已经定义了自己的renderSkills。这是行不通的。尝试重命名为renderDataCellContent…谢谢。我终于明白了。感谢您提供将我的类放在protected/components目录中的提示。我必须有很多这样的课程,所以这肯定会让它更干净。再次感谢!
Yii::import('zii.widgets.grid.CGridColumn');
    class TotalSkills extends CGridColumn
    {
        private $test = "blah";

        public function renderSkills($row, $data)
        {
            echo $this->test;
        }

    }




// People
echo CHtml::label('People', 'yw0', $shared_html_options);
$dataProvider = new CActiveDataProvider('Person');
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
                    'name',
                    'age',
                    array(
                    'header'=>'Total Skills',
                    'class'=>'TotalSkills'
                    ) 
                )
));