Yii,为CGridView的每个tr元素生成一个unquie id

时间:2012-07-07 21:12:27

标签: php html activerecord yii

我有一个CDbActiveRecord设置,我有一个CGridView类设置实例作为一个小部件。

基本上我的最终游戏是我需要一个表,但每行包含与Active Record相关联的行的主键。

如:

<tr id="123"> <td> Column value 1 </td> <td> Col 2 </td> <td> Col 3 </td> </tr> 

这就是我正在寻找的行的具体内容。

这是我到目前为止生成表格的代码。 (设置了json变量,因为它在控制器内,并且小部件以json的形式返回。)

// get the content id for the version list
$contentID_v = Yii::app()->request->getParam("id"); 

// setup the criteria to fetch related items 
$versionCdbCriteria = new CDbCriteria;
$versionCdbCriteria->compare("contentID",$contentID_v); 

// setting up the active data provider for the version 
$vActiveDP = new CActiveDataProvider("FactsheetcontentVersion", array(
    "criteria" => $versionCdbCriteria,
    'pagination' => array('PageSize' => $this->paginationSize),
    'keyAttribute'=>'vID',
));

$json_data .= $this->widget('zii.widgets.grid.CGridView', array(
        'dataProvider' => $vActiveDP,
        'columns' => array(
        'title',
        'created',
        'createdBy'
        ),
    'showTableOnEmpty' => 'false', 
),true);

这是我为活跃记录制作的内容。

 <div class="grid-view" id="yw0">
<div class="summary">Displaying 1-1 of 1 result(s).</div>
<table class="items"><thead>
    <tr><th id="yw0_c0">Factsheettitle</th>
        <th id="yw0_c1"><a href="jq/work/admin/index.php?r=factsheetManager/Editor
        &amp;id=25601&amp;getV=true&amp;_=1341694154760&amp;FactsheetcontentVersion_sort=created">Created</a>
        </th>
        <th id="yw0_c2"><a href="jq/work/admin/index.php?r=factsheetManager/
        Editor&amp;id=25601&amp;getV=true&amp;_=1341694154760&amp;FactsheetcontentVersion_sort=createdBy">Created By</a>
        </th>
    </tr></thead>
<tbody><tr class="odd"><td>Distribution</td><td>0000-00-00 00:00:00</td><td>NULL</td></tr></tbody>
</table>
<div title="jq/work/admin/index.php?r=factsheetManager/Editor&amp;id=12&amp;id=25601&amp;getV=true&amp;_=1341694154760" style="display:none" class="keys"><span>8</span></div>
</div>

1 个答案:

答案 0 :(得分:1)

只是自己学习Yii,但这些似乎很明显? 像这样扩展小部件。

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

    class MyGridView extends CGridView {
    //This does depend on your data structure
    $data=$this->dataProvider->data[$row];
    $id = $data['id']; //(This may be an object I have not checked is so: $data->id)

        public function renderTableRow($row)
        {
            if($this->rowCssClassExpression!==null)
            {
echo '<tr id="'.$id.'" class="'.$this->evaluateExpression($this->rowCssClassExpression,array('row'=>$row,'data'=>$data)).'">';
            }
            else if(is_array($this->rowCssClass) && ($n=count($this->rowCssClass))>0)
                echo '<tr id="'.$id.'"  class="'.$this->rowCssClass[$row%$n].'">';
            else
                echo '<tr id="'.$id.'" >';
            foreach($this->columns as $column)
                $column->renderDataCell($row);
            echo "</tr>\n";
        }

    }

现在使用它:

$json_data .= $this->widget('zii.widgets.grid.MyGridView', array(
        'dataProvider' => $vActiveDP,
        'columns' => array(
        'title',
        'created',
        'createdBy'
        ),
    'showTableOnEmpty' => 'false', 
),true)

我还不熟悉YII,但您可能需要将其注册为扩展程序并将其添加到您的扩展程序目录...或者更多的是组件,我不清楚您确切的位置覆盖现有小部件的代码,一旦我知道我将编辑这个答案。