2011-02-01 2 views
3

젠드를 사용하고 있습니다. 때로는 HTML 테이블의 웹 페이지에서 데이터베이스의 데이터를 표시해야합니다.젠드의 html 테이블에 데이터를 표시하는 가장 좋은 방법

인 IndexController의 IndexAction 에서 : 지금은이 같은 일을 오전 들어

$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을 젠드에서이 작업을 수행하기 위해 어떤 좋은 방법이 있나요 . 나는 어딘가에서 본 각각의 데이터 그리드에 대해 PHP 클래스가 만들어졌고 어디에서 우리가이 클래스의 인스턴스를 Action에 생성하고 phtml에서이 객체를 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로 모든 것을 변경하고 싶어 할 것입니다. 누가 알겠습니까? 젠드가 할 수있는 일은 모든 것을 망쳐 놓는 것입니다. –

답변

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

잠깐 생각해 보면 단일 테이블 행 렌더링을위한 자체 render() 메서드가있는 MyTableRow 클래스를 만든 다음 MyTableRowset 클래스의 render() 메서드가 행 집합을 반복하면서 각 행의 render) 메서드를 차례로 호출합니다.

태그와 아마도 열 머리글 만 추가하면됩니다. – gravelpot

+0

멋진 추상 방식으로 정의 된 이러한 메서드가있는 행 집합 및 행 클래스를 직접 추가하면 모든 모델 클래스에서 해당 모델 클래스를 상속받을 수 있으며 해당 기능이 모든 모델에 구축됩니다. – gravelpot

+2

이것은 뷰 레이어 조각을 모델 레이어 안에 포함합니다. Zend_Db_Table의 하위 클래스에 의해 생성 된 테이블에 CSS 스타일을 어떻게 추가합니까? 그러지 마라. –

6

당신이보기 (index.phtml) 내부의 foreach 루프를 유지하는 경우

<?php 
    echo $this->displayGenericTableHelper($this->points,0); 
?> 
관련 문제