1

CDbActiveRecordセットアップがあり、ウィジェットとしてCGridViewクラスセットアップのインスタンスがあります。

基本的に私の最終的なゲームはテーブルが必要ですが、各行にはアクティブレコードに関連付けられた行の主キーが含まれています。

そのような:

<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>
4

1 に答える 1

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 に慣れていませんが、これを拡張機能として登録し、拡張機能ディレクトリに追加する必要があるかもしれません... または、おそらくそれ以上のコンポーネントです。コードをどこに配置するかについては明確ではありませんこの回答を編集することがわかったら、既存のウィジェットをオーバーライドします。

于 2012-07-08T03:42:04.163 に答える