Dyrektywy tabel

dla autorów (średnio zaawansowanych)

Są cztery dyrektywy tabel. Wszystkie muszą się zaczynać od początku linii, żeby zadziałały.

(:table (attr...):)

Tworzy nową tabelę - znacznik HTML <table> - z atrybutami podanymi w attr.... Zamyka (kończy) poprzednią tabelę, jeśli jakaś była zaczęta (nie ma tabeli w tabeli, chyba że prosta w zaawansowanej). Poprawne atrybuty i wartości to:

  • border (szerokość obramowania tabeli; liczba całkowita >=0)
  • bordercolor (kolor obramowania; nazwa koloru, albo liczba szesnastkowa (hex); nie każda przeglądarka pokazuje)
  • cellspacing (odstęp między komórkami; liczba całkowita >=0)
  • cellpadding (marginesy w komórkach; liczba całkowita >=0)
  • width (szerokość tabeli; liczba całkowita >0, albo w %)
  • bgcolor (kolor tła; nazwa koloru, albo liczba szesnastkowa)
  • align (left, center, right - wyrównanie: do lewej, centrowanie, do prawej)
  • summary (podsumowanie; nie wyświetla się; pomoc w nawigacji dla niewidomych)

(:cell (attr...):)

Tworzy nową komórkę tabeli z atrybutami podanymi w attr.... Zamyka poprzednią komórkę, jeśli jakaś była zaczęta. Kontynuuje rząd. W HTML-u to tworzy nowy znacznik "<td attr>" (i jak trzeba, znaczniki <table>, <tr> i </td>).

Uwaga: Umieszczenie spacji po znaczniku komórki: "(:cell:) " powoduje, że tekst w danej linii będzie potraktowany jako preformatowany.

Poprawne atrybuty i wartości to:

  • align (left, center, right - wyrównanie: do lewej, centrowanie, do prawej)
  • valign (top, middle or bottom - wyrównanie w pionie: do góry, centrowanie, do dołu) - zobacz informację o tym atrybucie poniżej
  • colspan (rozciągnięcie komórki na wiele kolumn; ilość kolumn)
  • rowspan (rozciągnięcie komórki na wiele rzędów; ilość rzędów)
  • bgcolor (kolor tła; nazwa koloru, albo liczba szesnastkowa)
  • width (szerokość komórki; liczba całkowita >0, albo w %)

(:cellnr (attr..):)

Tworzy nową komórkę tabeli od początku następnego rzędu. Zamyka poprzednią komórkę, jeśli jakaś była zaczęta. W HTML-u to tworzy znaczniki "<tr><td attr>" (i jak trzeba, znaczniki <table>, </td> i </tr>). Atrybuty i wartości są takie same jak dla (:cell:).

(:tableend:)

Zamyka ostatnią komórkę tabeli, i tabelę (jak trzeba, tworzy znaczniki /td>, </tr> i </table>).

* Informacja o atrybucie valign

Jeśli nie jest wcześniej ustawiony, PmWiki automatycznie doda atrybut valign='top' do każdej komórki tabeli. PM stwierdził "Dyrektywy tabel są w celu rozmieszczania i w tym przypadku największy sens ma, by każda komórka (kolumna) miała zawartość od góry rzędu". Ten atrybut jest umieszczany w każdej celi, a nie w znaczniku <tr>, bo pewne przeglądarki nie rozpoznają valign='top' w znaczniku <tr>.

Uwagi:

W znacznikach 'table', 'cell' i 'cellnr' autor może podać dowolne atrybuty, które byłyby poprawne w znacznikach HTML <table> bądź <td>. Można więc podawać atrybuty rowspan, colspan, itd., aby tworzyć dowolne tabele. Jednak nie jest możliwe zagnieżdżanie (:table:) wewnątrz (:cell:), czy (:cellnr:) -- następny paragraf wyjaśnia, dlaczego.

Wielu by chętnie zapytało, dlaczego nie używamy po prostu standardowych znaczników HTML (<table>, <tr>, <td>, <th>), zamiast tworzyć nowe, co by pozwoliło na zagnieżdżone tabele. Są dwie odpowiedzi: po pierwsze, znaczniki tabel w HTML-u wyglądają groźnie dla naiwnych autorów (zobacz PmWiki.Audiences i PmWikiPhilosophy? #2); i po drugie, byłoby bardzo łatwo utworzyć błędną tabelę, którą jakieś przeglądarki pokazywałyby nie tak, jak się chce. Nawet doświadczeni zawodowi twórcy stron WWW czasem piszą błędne znaczniki tabel, więc to trochę nierealistyczne, by oczekiwać, że przeciętny autor zawsze napisze dobrze, albo będzie w stanie przeczytać dowolne znaczniki tabel, które napisał ktoś inny.

Powszechny komentarz: Z pewnością, przeciętny czy naiwny autor nie pisałby wprost w HTML-u, lecz używałby narzędzia takiego jak FrontPage, czy nawet MSWord, by tworzyć HTML. To byłoby o wiele prostsze, niż uczenie się nawet najprostszych znaczników PmWiki.
Odpowiedź PM: I skoro ten HTML byłby utworzony i wysłany, jak ktokolwiek inny miałby edytować tę tabelę, jeśli nie miał by oryginalnego pliku FrontPage-u, czy MSWord-a użytego, by ją utworzyć? Pamiętajmy, że mówimy o wspólnym autorstwie. HTML tworzony przez te pakiety jest jednym z nacięższych do czytania i edycji!

Trudno jest napisać kod potrzebny do tego, by PmWiki rozumiało i poprawiało dowolne znaczniki tabel, więc używa ono tej uproszczonej wersji. Wciąż, ta wersja jest w stanie zająć się większością wymagań co do tabel (może z wyjątkiem zagnieżdżonych tabel).

I, nie jest powiedziane, że zagnieżdżone tabele są w PmWiki niemożliwe - one tylko nie mogą być łatwo tworzone przez autorów przy użyciu zwykłych znaczników. Administrator może oczywiście utworzyć kod HTML do nagłówka/stopki strony, i inne lokalne dostosowania? używające zagnieżdżonych tabel.

Przykład 1. Tabela używająca dyrektyw.

"&nbsp;" jest niedzielącą spacją w HTML-u. Umieść ją w komórce, jeśli ma być pusta - inaczej obramowanie tej komórki nie narysuje się poprawnie.

(:table border=1 cellpadding=5 cellspacing=0:)
(:cell:) a1
(:cell:) b1
(:cell:) c1
(:cell:) d1
(:cellnr:) a2
(:cell:) b2
(:cell:) c2
(:cell:) &nbsp;
(:tableend:)
a1 b1 c1 d1
a2 b2 c2  

W HTML-u, to jest to samo, co

<table border='1' cellpadding='5' cellspacing='0'>
  <tr>
    <td>a1</td>
    <td>b1</td>
    <td>c1</td>
    <td>d1</td>
  </tr>
  <tr>
    <td>a2</td>
    <td>b2</td>
    <td>c2</td>
    <td>&nbsp;</td>
  </tr>
</table>

Opływana tabela z wypunktowaną listą do nawigacji

Co jeśli chcesz utworzyć taką miłą tabelkę, jak tabela zawartości strony podobna do tej? W tym przykładzie, tabela jest z prawej strony, i zawiera kilka linków w wypunktowanej liście. To jest miły pokaz, jak to jest możliwe, by zbudować tabliczkę zawartości strony, która może odsyłać do innych stron akurat w tej samej grupie wiki. Zauważ, że wypunktowana lista nie będzie działać w zwykłej tabeli - działa tylko w tabeli utworzonej dyrektywami takimi, jak w użytym tutaj przykładowym kodzie.

(:table border=1 width=30% align=right bgcolor=#cccc99 cellspacing=0 :)
(:cellnr:)
'''Navigation Links'''
(:cellnr:)
*[[Tabele]]
*[[Dyrektywy tabel]]
(:tableend:)

Navigation Links

(:table border=1 width=30% align=right bgcolor=#cccc99 cellspacing=0 :)
(:cellnr colspan=2 align=center:)
'''Navigation Links'''
(:cellnr align=center:)
[[Tabele]]
(:cell align=center:)
[[Dyrektywy tabel]]
(:tableend:)

Navigation Links

Tabele

Dyrektywy tabel

Patrząc na te znaczniki, zauważ że użyliśmy koloru #cccc99 jako tła tabeli. Ponadto, znacznik (:cellnr:) tworzy nowy rząd, nową komórkę, i zamyka poprzedni rząd.

Możesz z tą koncepcją pójść nieco dalej: skoro możesz zechcieć, by każda strona w grupie zawierała tę sama tabelę zawartości, możesz zrobić JEDNĄ tabelę taką, jak powyżej, i umieścić ją na jej własnej stronie. Następnie użyć znacznika include ? na dowolnej ze swoich stron, i dostać tę tabelę. Właściwość opływania będzie honorowana na każdej stronie, która ją dołączy.

<< | Documentation Index? | >>

Czy mogę zdefiniować nagłówki tabeli używając dyrektyw tabel?

Nie, ale możesz z Cookbook:AdvancedTableDirectives. Zobacz odpowiedź PM do PITS:00535.

Czy można zrobić zagnieżdżone tabele?

Tak, jeśli zagnieżdżasz proste tabele wewnątrz zaawansowanych. Zobacz jeszcze Cookbook:AdvancedTableDirectives.

Czy można dodać obrazki jako tło tabeli i jej komórek?

Tak, zobacz Cookbook:BackgroundImages.

(nie przetłumaczone, i bez odpowiedzi) Is it possible to have a collapsible table, that you can set by default to be deployed (as with the (:toc:) display) or retracted?