Лучший способ показать данные в HTML-таблицах в Zend - PullRequest
3 голосов
/ 01 февраля 2011

Я использую Zend. Иногда мне приходится показывать данные из базы данных на веб-странице в таблицах HTML. Сейчас я делаю что-то вроде этого:

in IndexAontrolAction IndexAction :

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

И в index.phtml

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

Есть ли хороший способ сделать это в Zend. Я видел где-то, где класс PHP создается для каждой сетки данных, и где бы нам ни понадобилось это, мы создаем экземпляр этого класса в Action и визуализируем этот объект в phtml для отображения данных в формате таблицы html примерно так:

 $this->data->render();

Как мы можем это сделать? Любой хороший пример, учебник или ссылка.

Ответы [ 4 ]

7 голосов
/ 02 февраля 2011

Я думаю, что хорошим способом было бы использовать частичный цикл помощник вида. Например, вы можете создать файл частичного представления myTableRow.phtml в APPLICATION_PATH / views / scripts / _partials / следующим образом:

<!--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();, ИМХО, это не очень хороший способ. Причина в том, что вам нужно будет встроить представление данных в ваши модели. Однако, используя ZF, вы, скорее всего, захотите использовать его систему MVC. Принцип MVC заключается в разделении моделей, контроллеров и представлений. Делая $this->data->render(), вы фактически смешиваете модели с представлениями.

6 голосов
/ 06 апреля 2011

Создание помощника вида

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

По вашему мнению, тогда

<?php
    echo $this->displayGenericTableHelper($this->points,0);
?>
2 голосов
/ 01 февраля 2011

Вы можете создать свой собственный помощник вида, чтобы сделать это. http://framework.zend.com/manual/en/zend.view.helpers.html

1 голос
/ 01 февраля 2011

Если вы создали класс-потомок Zend_Db_Table_Rowset, который был подключен к вашему классу Zend_Db_Table, вы можете затем реализовать функцию 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(); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...