我正在尝试创建“视图”或通过给出表中的列和表数据本身来构建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的原因,包括我在下面列出的那个,是我不想知道列是什么或数据。我希望能够仅使用代码构建表。
答案 0 :(得分:8)
无需创建类似的功能。 CGridView正是您所寻找的。它将数据呈现为html表。下面是示例代码。
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => new CArrayDataProvider($tabledata),
'columns' => array(
//specify the colums you wanted here
),
));
?>
答案 1 :(得分:-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);
}
这就是我想要的,以防其他人想要尝试。