Recent Changes - Search:

Cookbook

PmWiki

pmwiki.org

AdvancedTableDirectives

Summary: Add Table capabilities - nested tables, zebra tables, new directives.
Version: 3.1
Prerequisites: none
Status: Working
Maintainer: JB
Categories: Markup Tables

Questions answered by this recipe

  • How to put a caption on a table using table directives?
  • How to create headers on a table using table directives?
  • Why are there more features in ordinary tables than table directives?
  • How to apply zebra formatting to tables created with table directives?
  • Can I nest tables inside of other tables?

This section is optional; use it to indicate the types of questions (if any) this recipe is intended to answer.

Description

This recipe will adds Directives and provides abilities for nested tables and for horizontal and vertical zebra tables.

A demo of the capabilities is at URL: http://gnuzoo.org/test/AdvancedTableDirectives

Two other recipes which enhance AdvancedTableDirectives are SourceCodeHorizontalLines and SimplifiedAdvancedTableDirectives.

Currently tables have 3 capabilities that table directives do not have. "<header>", "<caption>" and automatic zebra formatting (see FormattingTables) of rows and columns (there are probably others too). Table Directives cannot be nested and include only 4 directives. (:table:) (:cell:) (:cellnr:) (:tableend:)

This recipe will adds these directives:

(:caption:) - caption
(:head:)    - header cell
(:headnr:)  - header cell new row
(:row:)     - row

(:cellc#:)  - current column number
(:cellr#:)  - current row number

(:celli#:)  - auto-incrementing number - incremented when used
(:celli#1:) - (:celli#2:), ... (:celli#9:)]] - seperate auto-incrementing numbers

(:cellic#:) - auto-incrementing column number - incremented when used, set to 1 on new row
(:cellir#:) - auto-incrementing row number - incremented when used in a new row, but not in same row

A demo of the capabilities is at URL: http://gnuzoo.org/test/AdvancedTableDirectives

Installing

Copy AdvancedTableDirectives.phpΔ to your cookbook directory

In your config.php enter:

include_once("cookbook/AdvancedTableDirectives.php");

or in your farmconfig.php enter:

include_once("$FarmD/cookbook/AdvancedTableDirectives.php");

Notes

All directives follow the same syntax: (: directive (attributes) :)

For example:

(:caption color=red :)This is the caption text
(:head bgcolor=lightblue :)This is header text

Automatic zebra formatting (mostly used for coloring) can be applied as well. In this example the table header row will have a lightblue background and the other table rows will have alternating lightgreen and lightyellow background colors.

Put into config.php:
$TableRowIndexMax = 2;
$TableRowAttrFmt  = "class='row\$TableRowIndex'" ;
$TableCellAttrFmt = "class='col\$TableCellCount'";
Put into cascading style sheet:
table th      { background-color:#99ccff; }
table tr.row1 { background-color:#ffff99 ; }
table tr.row2 { background-color:#ccffcc; }
table td      { line-height: 12px; }

For vertical zebra tables there are 2 new variables - TableCellIndexMax and $TableCellIndex

Put into config.php:
$TableCellIndexMax = 3;
$TableRowIndexMax = 2;
$TableRowAttrFmt  = "class='row\$TableRowIndex'" ;
$TableCellAttrFmt = "class='col\$TableCellCount colidx\$TableCellIndex'";
Put into cascading style sheet:
table td.colidx1 {background-color:#ffff99;}
table td.colidx2 {background-color:#ccffcc;}
table td.colidx3 {background-color:#FFC0CB;}

For more information about formatting tables see FormattingTables.

About Merging Attributes

Attributes can automatically be placed onto directives using $TableCellAttrFmt and/or $TableRowAttrFmt. This can conflict with attributes specified directly on the directive itself. (This is one of several reasons normal Table Directives dot not use $TableCellAttrFmt and/or $TableRowAttrFmt). This recipe will merge only the class element - meaning it will eliminate duplicates and setup multiple class attributes as a space separated string (like this - class='classname1 classname2 classname3' - per W3C recommendation). I have chosen not to merge other attributes because it would make the code very complicated and slower and most other attributes can be set in a cascading style sheet. Any attributes besides class that are designated in $TableCellAttrFmt and/or $TableRowAttrFmt are simply appended to the directive attributes and not merged.

Release Notes

This program is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation http://www.fsf.org either version 2 of the License, or (at your option) any later version.

Copyright 2007 by GNUZoo (guru@gnuzoo.org)

Please donate to the author at url: http://gnuzoo.org/GNUZooPayPal

  • Version: 3.1 - Adjust FmtPageName() function use to be just like PMWiki
  • Version: 3.0 - Major upgrade - Added class attribute merge with automatic zebra tables, added global variable $TableCellIndexMax, added internal variable $TableCellIndex, made recipe faster, added variable $RecipeRunAction to determine when to run the recipe, more
  • Version: 2.2 - better regular expression, added <:block> for each table start
  • Version: 2.1 - Execute only for specific actions
  • Version: 2.0 - Should be faster
  • Version: 1.1 - Added RecipeInfo
  • Version: 09 28 2006 2:38 PM CST
Fix bug where <td> and <tr> tags get crossed.
  • Version: 09 19 2006 7:09 AM CST
PMWiki Table Directives apply the attribute valign='top' to all table cells if they do not already specify a value fot the 'valign' attribute. This was added to AdvancedTableDirectives to be compatible with PMWiki.

Comments

(:cell#:) has been deprecated but will remain in code for backward compatibility
(:row#:) has been deprecated but will remain in code for backward compatibility
(:rowend:) has been deprecated because it is automatic.

I don't know what I'm doing wrong, but I keep getting the following error:

      "Warning: Cannot modify header information - headers already sent by (output started 
      at /home/<MySite>/public_html/pmwiki-2.1.26/cookbook/AdvancedTableDirectives.php:195) 
      in /home/<MySite>/public_html/pmwiki-2.1.26/pmwiki.php on line 884"

I have tried this with an existing wiki and a clean install (no other cookbook recipes installed).
Any ideas? I will be happy to supply more information if needed.
Thank you!
Kevin Jackson 09/15/2006

I could not duplicate this behavior. I would suggest you update to the latest version of AdvancedTableDirectives and (if you are also using) SimplifiedAdvancedTableDirectives. If the problem persists please contact me via guru@gnuzoo.org JB

Thanks, that did it! Kevin Jackson 09/19/2006

Very nice recipe, thank you! H. 26/10/2006

This recipe clashes with ZAP : I was in trouble when trying using this really nice recipe with zap forms ! Adding : $RecipeRunAction[$RecipeName][]='zap'; in the php file did the trick (or seemed to ..). I suspect that the same kind of clash will occur with every package that adds an action to the list. Alain Castera 03/08/2008

See Also

Contributors

Edit - History - Print - Recent Changes - Search
Page last modified on March 08, 2008, at 12:24 PM