2012-05-18 32 views
1

我想創建「視圖」或一個函數,將通過給予表中的列和表數據本身來構建HTML表。這將是Yii中的renderPartial方法調用的頁面。 我想象做這樣的事情(將演示如何使用僞代碼):基於Yii(關係)數據庫表動態創建一個html表?

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的原因包括我列出的一個,我不想知道列或數據是什麼。我希望能夠使用代碼來構建表格。

回答

-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); 
} 

那正是我一直在尋找,萬一別人想嘗試。

8

沒有必要創建一個這樣的功能。您正在尋找的是CGridView。它將數據呈現爲html表格。下面是示例代碼。

​​
+0

我應該指定我需要使用的特定函數,它不能與CGridView一起使用。 – Prateek

+0

你是指表生成邏輯內的函數?在這種情況下,您可以輕鬆地擴展CGridView並覆蓋renderTableRow(),renderTableHeader()等等。 – dInGd0nG

+0

如果您想要相關列,您可以調用'CActiveRecord'的'getRelated()'函數 – dInGd0nG