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 回答