2011-02-01 17 views
3

私はzendを使用しています。時には、HTMLテーブルのWebページ上のデータベースからデータを表示する必要があります。zendのhtmlテーブルにデータを表示する最も良い方法

$myModel = new Model_MyTable_Object(); 
$data = $myModel->getAllRecords(); 
$this->view->show = $data->toArray(); 

そして

<table> <tr> <th>id</th> <th>FirstName</th> <th>LastName</th> <th>Locaion</th> </tr> <?php foreach($this->show as $data) { echo "<tr> <td>" . $data['id'] . "</td> <td>" . $data['firstname'] . "</td> <td>" . $data['lastname'] . "</td> <td>" . $data['location'] . "</td> </tr>"; } ?> </table> 

index.phtmlをはZendの中でこれを行うには何か良い方法はあり: IndexControllerのIndexAction

:今のところ私はこのような何かをやっています。私はどこかで見たことがあります。各データグリッドに対してPHPクラスが作成され、ここでこれが必要な場所はActionでそのクラスのインスタンスを作成し、そのオブジェクトをHTML形式でhtmlテーブル形式で表示します:

$this->data->render(); 

どうすればこのことができますか?良い例、チュートリアル、リンク。

+0

あなたのビューで見るヘルパー

<?php class Zend_View_Helper_DisplayGenericTableHelper extends Zend_View_Helper_Abstract { public $view; public function setView(Zend_View_Interface $view) { $this->view = $view; } public function displayGenericTableHelper(Zend_Db_Table_Rowset_Abstract $rowset,$border=0) { $table = ""; if(count($rowset)>0) { $table .= '<table border="'.$border.'"><tr>'; foreach(array_keys($rowset->current()->toArray()) as $column) { $table .= '<th>'.$column.'</th>'; } foreach($rowset as $row) { $table .= '</tr><tr>'; foreach($row->toArray() as $content) { $table .= '<td>'.$content.'</td>'; } } $table .='</tr></table>'; } return $table; } } ?> 

を作成します。テーブルの最も有用な方法で、これは良いことです。たぶん、あなたは誰もが知っているテーブルフリーのCSSにそれを変更したいと思うかもしれません。 Zendができることはすべて、それを混乱させることです。 –

答えて

7

私は良い方法はpartialLoopビューヘルパーを使用することだと思います。たとえば、次のように/ APPLICATION_PATH /ビュー/スクリプト/ _partialsでをmyTableRow.phtmlと呼ばれる部分ビューファイルを作成することができます。

<!--APPLICATION_PATH . '/views/scripts/_partials/myTableRow.phtml --> 
<tr> 
    <td> <?php echo $this->id;      ?> </td> 
    <td> <?php echo $this->escape($this->firstname); ?> </td> 
    <td> <?php echo $this->escape($this->lastname); ?> </td> 
    <td> <?php echo $this->escape($this->location); ?> </td> 
</tr> 

を次に、あなたのindex.phtmlをは以下のようになり、次のように:

<table> 
    <tr> 
     <th>id  </th> 
     <th>FirstName </th> 
     <th>LastName </th> 
     <th>Locaion </th> 
    </tr> 
    <!-- I assume that $myModel->getAllRecords(); returns an instance of Zend_Db_Table_Rowset_Abstract --> 
    <?php echo $this->partialLoop('_partials/myTableRow.phtml', $this->show); ?> 

</table> 

データを取得する独自のビューヘルパーを作成できるよりも多くのビューで行う必要がある場合は、表を作成してビューに文字列として戻します。

$this->data->render();が行っている限り、IMHO、それはあまり良い方法ではありません。その理由は、データのプレゼンテーションをモデルに埋め込む必要があるからです。しかし、ZFを使用することで、MVCシステムを使いたいと思う可能性が最も高いです。 MVCの主体は、モデル、コントローラ、およびビューを分離することです。 $this->data->render()を実行すると、実際にビューを持つモデルが混在することになります。

1

Zend_Db_Tableクラスに接続されたZend_Db_Table_Rowsetの子孫クラスを作成した場合は、その行セットクラスに対して、あなたが話していることを行うrender()関数を実装できます。

例えば、ここで定義された行セットの属性を持つ架空のテーブルクラス、です:

class MyTable extends Zend_Db_Table_Abstract { 
    $_name = 'my_table'; 
    $_rowsetClass = 'MyTableRowset'; 
} 

は、ここだ行セットクラス:

class MyTableRowset extends Zend_Db_Table_Rowset_Abstract { 
    public function render() { 
     // HTML table rendering happens here. 
     return $table; 
    } 
} 

、その後、あなたはあなたとあなたのコントローラでそれを呼び出します

$model = new MyTable(); 
$dataset = $model->getAllRecords(); // Returns an instance of MyTableRowset 
$this->view->data = $dataset; 

ビュースクリプトでは、

<?php print $this->dataset->render(); ?> 
+0

もう一度考えてみると、1つのテーブル行をレンダリングする独自のrender()メソッドを持つMyTableRowクラスを作成してから、MyTableRowsetクラスのrender()メソッドを使用して行セットを繰り返し、 )メソッドを使用します。

のタグと、おそらくは列ヘッダを追加するだけで済みます。 – gravelpot

+0

これらのメソッドが素朴な抽象的な方法で定義されている行セットと行クラスを独自に追加すると、すべてのモデルクラスを継承することができ、その機能はすべてのモデルに組み込まれます。 – gravelpot

+2

これは、モデルレイヤー内にビューレイヤの部分を埋め込みます。 Zend_Db_Tableのサブクラスによって生成されたテーブルにCSSスタイルをどのように追加しますか?しないでください、私は言う。 –

6

ビュー(index.phtmlを)内のforeachループを続ける場合は、それがスタイルにあなたを可能にし、それ以外のプレゼンテーションを調整し、その後

<?php 
    echo $this->displayGenericTableHelper($this->points,0); 
?> 
関連する問題