1

テーブル内の列とテーブルデータ自体を指定して、HTMLテーブルを作成する「ビュー」または関数を作成しようとしています。これは、YiiのrenderPartialメソッドによって呼び出されるページになります。私はそれを次のようにすることを想像しました(疑似コードを使用してデモンストレーションします):

    void view(array $cols, array $tabledata) 
    {
    //$tabledata will be an array of CActiveRecord objects. $cols is an array of strings from getColumnNames().
    <table><thead><tr>
    foreach($cols as $col)
    {
        <th>$col</th>
    }
    </tr></thead><tbody>
    foreach($tabledata as $data)
    {
        <tr>
        foreach($cols as $col)
        {
            <td>$data->$col</td>
        }
        </tr>
    }
    </tbody></table>
    }

ただし、私が直面している問題は、リレーションの列を取得できないことです。http://www.yiiframework.com/doc/api/1.1/CDbTableSchemaを見つけましたが、特定のテーブルの列名しか表示されないようです。リレーションを使用してHTMLテーブルを生成するときに使用されるすべての列を取得する方法が必要です。あるいは、誰かがこれを行うためのより良い方法を持っているなら、私に知らせてください。ありがとう!

編集:注意として、以下にリストしたものを含めてCGridViewを使用しない理由は、列またはデータが何であるかを知りたくないためです。コードだけでテーブルを作成できるようにしたいと思います。

4

2 に答える 2

7

そのような関数を作成する必要はありません。CGridViewはあなたが探しているものです。データをhtmlテーブルとしてレンダリングします。以下はサンプルコードです。

<?php $this->widget('zii.widgets.grid.CGridView', array(
        'dataProvider' => new CArrayDataProvider($tabledata),
        'columns' => array(
         //specify the colums you wanted here
        ),
    ));
?>
于 2012-05-18T15:35:29.300 に答える
-1

ここでこれを行う方法を学びたいと思っている他の人にとっては、私が解決策を思いついた方法のようなものです:

--Model--
//Attributes:
$name;
$age;
$data;

--Controller--
//Controller stuff
public function actionShow()
{
  $this->render('show',array('model'=>loadModel(1)));
}

--view--
//traditonal way
echo CHtml::encode($model->getAttributeLabel('name');
echo CHtml::encode($model->name);
echo CHtml::encode($model->getAttributeLabel('age');
echo CHtml::encode($model->age);
echo CHtml::encode($model->getAttributeLabel('data');
echo CHtml::encode($model->data);

//one function way
foreach ($model->attributes as $col=>$val)
{
  CHtml::encode($model->getAttributeLabel($col);
  CHtml::encode($val);
}

他の誰かが試してみたいと思った場合に備えて、それが私が探していたものでした。

于 2012-05-30T16:31:14.830 に答える