Как легко создавать таблицы в шаблоне инструментария View в perl / Catalyst - PullRequest
2 голосов
/ 01 июня 2011

Я занимаюсь разработкой приложения с использованием фреймворка Perl Catalyst. Пытаясь не допустить логику представления в мои модели, я ищу способ в VIEW (шаблонный набор инструментов) генерировать таблицу HTML из заданной структуры данных. В настоящее время я использую HTML :: Table :: FromDatabase для генерации моих HTML-таблиц из запросов SQL но это в настоящее время в модели. Я пытаюсь изолировать логику представления в представлении, а не в модели. Любой совет по этому вопросу будет полезен

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

Это из памяти и просто рифф, так что считайте его непроверенным. Это простой способ автоматически перебирать столбцы и записи.

Предполагается, что подпрограмма похожа на модель DBIx :: Class -

sub some_action : Local Args(0) {
    my ( $self, $c ) = @_;
    my $rs = $c->model("SomeTable")->search({},{rows => 10});
    $c->stash( some_rs => $rs );
}

А затем соответствующий шаблон -

[% records = some_rs.all %]
[% RETURN UNLESS records.size %]
[% columns = records.0.columns %]
<table>
  <tr>
  [% FOR column IN columns %]
    <th>[% column | ucfirst | html %]</th>
  [% END %]
  </tr>

  [% FOR item IN records %]
  <tr>
    [% FOR column IN columns %]
      <td>[% item.${column} | html %]</td>
    [% END %]
  </tr>
  [% END %]
</table>
1 голос
/ 01 июня 2011

Я передаю структуру данных (в виде массива хэшей) в TT и просто использую логику TT для построения таблицы с классами CSS для управления внешним видом таблицы.

Упрощенный пример шаблона:

  <table class="ixTable">
    [% FOREACH listing = listings %]
    <tr class="ixRow">
      <td class="ixAddress">[% listing.address %]</a></td>
      <td class="ixPrice">[% listing.listprice %]</td>
      <td class="ixSqFt">[% listing.sqft %]</td>
    </tr>
    [% END %]
  </table>
1 голос
/ 01 июня 2011

Хороший старый CGI.pm делает это не слишком сложно, но для получения реальной помощи вам придется показать, как выглядит ваша структура данных.

Одна потенциальная проблема заключается в том, что ваши данные могут бытьв хешах, которые по своей природе не обеспечивают порядок столбцов (хотя пуристы базы данных скажут вам, что HTML :: Table :: FromDatabase злой и плохой для поощрения select * и предположения, что порядок столбцов имеет смысл).

HTML :: Table :: FromDatabase сам использует HTML :: Table;Вы можете увидеть, соответствует ли это вашим потребностям.

...