Tabulka je přirozený způsob jak reprezentovat informace které jsou umístněny v pravidelné mřížce tabulky. O tom jak prezentovat data pomocí tabulek si ukážeme v následujících stránkách.
WORKING: Editovat.
Někdy potřebujeme zobrazit data z databáze ve formě tabulky, protože je to přirozený způsob jejich prezentace. Něž přistoupíme k samotnému vytváření pohledu, popíšeme si jak bude tabulka vypadat v XHTML 1.1..
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1/EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> ⋮ ⋮ </html>
Nyní, když víme jaký html kód budeme vytvářet, můžeme přistoupit k psaní pohledu. Pohled rozdělíme do dvou souborů. V prvním což je list.rhtml
je pospána samotná tabulka a její hlavička. V druhém, vnořeném pohledu jsou popsány řádky tabulky. Nejdříve tabulka a její hlavička v souboru app/views/
:tabulka
/list.rhtml
<h1>Název tabulky</h1> <table class="data" rules="all"> <caption>Název tabulky
</caption> <thead> <tr class="head"> <th>#</th> <th>sloupec
</th> ⋮ titulky k jednotlivým sloupcům v tazích <th> </tr> </thead> <tbody> <%= render_collection_of_partials 'table_row', @tabulka
%> </tbody> </table>
V uvedeném vzoru jsem použil jak popis před tabulkou v tagu h1
, tak i popis v tabulce pomocí tagu caption
. V značkách table
a tr
definuji class
, jenž používám v css k úpravě designu tabulky. Samotné řádka tabulky, její tělo, nechám na zobrazení vloženému pohledu table_row
. Tento je uložen v souboru app/views/
tabulka
/_table_row.rhtml
<%# table_row_counter začíná počítat řádky od 0. My je logicky číslujeme od 1. Proto ten výraz. -%<
<tr class="<%= table_row_counter.+(1).modulo(2).nonzero? ? 'odd' : 'even' -%>">
<td><$= table_row.id -></td>
<td><$= table_row.sloupec
-></td>
⋮ zobrazení dat ostatních sloupců v tazích <td>
<%# Následuje definice příkazů na řádku: >
<td><%= link_to 'Ukaž', :action => 'show', :id => table_row %></td>
<td><%= link_to 'Odstraň', { :action => 'destroy', :id => table_row }, :confirm => 'Jste si jist?', :method => :post %></td>
</tr>
Na uvedené předloze je zajímavý způsob definice class
pro rozlišení lichých a sudých řádků. Protože počitadlo table_row_counter
počítá řádky od nuly, a my chceme aby číslování počínalo jedničkou. Tedy první řádek tabulky je řádek lichý, zvětšíme pro výpočet lichost/sudosti toto počitadlo o jedničku. Zvolil jsem raději tento zápis než kratší a více kryptické prohození řetězců "odd" a "even".
V Rails existuje elegantnější zápis pro proužkování než předchozí. Využívá se při nem pomocná metoda cycle
. Uvedený řádek s tr
elementem bude vypadat za použití této pomocné metody následovně:
<tr class="<%= cycle('odd', 'even')%>">
K uvedeným šablonám ještě patří část css souboru jenž nám tabulku obarví. Efekt kterého chci dosáhnout je ten že liché a sudé řádky mají jinou barvu podkladu a vytvářejí tak proužky. Pro odlišení ještě zvolím jinou barvu podkladu pro první řádek tabulky s nadpisy slpoupců.
/* * Nastavení vlastností tabulek s daty. */ table.data tr.head { background-color: #E0E0F0; } /* Titulek: šedá do modra */ table.data tr.odd { background-color: #FFFFE0; } /* Lichý: světle žlutý */ table.data tr.even { background-color: #E0FFE0; } /* Sudý: světle zelený */
FIXME:EDIT