Итак, FastTable: Сам модуль
<?php
//~~~~~~~~~~~~~~
//Name: Модуль генерации таблиц значений
//Version: 1.1
//Author: Джей Ди (ICQ 7703304)
//~~~~~~~~~~~~~~
class fasttable
{
//Заголовки
var $titles = array();
//Шаблон таблицы
private $template = array();
//Данные
var $datas = array();
//Управляющие значения
var $controls = array();
//Javasсript события
private $events = array();
//Дополнительные классы колонок
var $cols = array();
//Инициализация
function fasttable($template='fasttable',$id='')
{
//Получаем шаблон
$template = template($template.'.ini',true,true);
//Устанавливаем шаблоны
//Таблица
$this->add_template('table','id',$id);
$this->add_template('table','class',@$template['TABLE']['CLASS']);
//Заголовки
$this->add_template('titles','show',@$template['TITLES']['SHOW']);
$this->add_template('titles','postfix',@$template['TITLES']['POSTFIX']);
$this->add_template('titles-tr','class',@$template['TITLES']['TR-CLASS']);
$this->add_template('titles-td','class',@$template['TITLES']['CLASS']);
//Записи
$this->add_template('datas-td','class',@$template['DATAS']['CLASS']);
$this->add_template('datas-tr','class',@$template['DATAS']['TR-CLASS']);
if(@$template['ALTERNATION']['ALTERNATION'])
{
$this->add_template('alternation','td-class',@$template['ALTERNATION']['CLASS']);
$this->add_template('alternation','tr-class',@$template['ALTERNATION']['TR-CLASS']);
}
//Загружаем дополнительные классы для колонок
$this->cols = @$template['COLS'];
}
//Прикрепление управляющих значений
function add_control($controls)
{
$this->controls[] = $controls;
}
//Прикрепление Javasсript события (только на TR-данных)
function add_event($event,$effect)
{
$this->events[$event] = $effect;
}
//Генерируем линию Javasсript событий
private function make_events($controls)
{
$javasсript = '';
//Генерируем линию
foreach($this->events as $event => $effect)
$javasсript .= " $event=\"".utemplate($effect,$controls)."\"";
return $javasсript;
}
//Добавление шаблона
function add_template($owner,$name,$template)
{
//Устанавливаем значение
if(is_array($template))
$this->template[$owner][$name] = array_merge($this->template[$owner][$name],$template);
else
$this->template[$owner][$name] = $template;
return true;
}
//Уставновка заголовков
function titles()
{
//Для вставки
$insert = func_get_args();
//Преобразуем значения в строки
foreach($insert as $key => $value)
$insert[$key] = (string)$value;
//Устанавливаем
$this->titles = $insert;
}
//Генерируем линию значений
private function generate_headers($template,$aclass='')
{
//Генерируем
$result = array();
$itemplate = $this->template[$template];
@$itemplate['class'] .= ($aclass?' '.$aclass:'');
$itemplate['class'] = trim($itemplate['class']);
foreach($itemplate as $name => $value)
if($value) $result[] = "$name=\"$value\"";
//Возвращаем строку
$result=join(' ',$result);
return $result?' '.$result:'';
}
//Добавление значения
function add()
{
//Для вставки
$insert = func_get_args();
//Преобразуем значения в строки
foreach($insert as $key => $value)
$insert[$key] = (string)$value;
//Вставляем
$this->datas[] = $insert;
}
//Генерируем таблицу
function generate()
{
//Начинаем генерацию
$result = "<table".$this->generate_headers('table').">\r\n<tbody>\r\n";
//Генерируем заголовки
if($this->template['titles']['show']&&$this->titles)
{
$result .= "<tr".$this->generate_headers('titles-tr').">";
//Создаем линию заголовков
foreach($this->titles as $title)
{
$result .= "<td".$this->generate_headers('titles-td').">".$title.$this->template['titles']['postfix']."</td>";
}
$result .= "</tr>\r\n";
}
$linen=0;
//Генерируем линии значений
foreach($this->datas as $key => $line)
{
$result .= "<tr".$this->generate_headers('datas-tr',$linen%2?@$this->template['alternation']['tr-class']:'').$this->make_events(@$this->controls[$key]).">";
foreach($line as $column => $value)
{
$result .= "<td".$this->generate_headers('datas-td',($linen%2?@$this->template['alternation']['td-class']:'').(@$this->template['alternation']['td-class']&&@$this->cols[$column]?' ':'').@$this->cols[$column]).">".$value."</td>";
}
$result .= "</tr>\r\n";
$linen++;
}
//Выводим
return $result."</tbody>\r\n</table>";
}
//Возвращаем
function __toString()
{
return $this->generate();
}
}
?>
//~~~~~~~~~~~~~~
//Name: Модуль генерации таблиц значений
//Version: 1.1
//Author: Джей Ди (ICQ 7703304)
//~~~~~~~~~~~~~~
class fasttable
{
//Заголовки
var $titles = array();
//Шаблон таблицы
private $template = array();
//Данные
var $datas = array();
//Управляющие значения
var $controls = array();
//Javasсript события
private $events = array();
//Дополнительные классы колонок
var $cols = array();
//Инициализация
function fasttable($template='fasttable',$id='')
{
//Получаем шаблон
$template = template($template.'.ini',true,true);
//Устанавливаем шаблоны
//Таблица
$this->add_template('table','id',$id);
$this->add_template('table','class',@$template['TABLE']['CLASS']);
//Заголовки
$this->add_template('titles','show',@$template['TITLES']['SHOW']);
$this->add_template('titles','postfix',@$template['TITLES']['POSTFIX']);
$this->add_template('titles-tr','class',@$template['TITLES']['TR-CLASS']);
$this->add_template('titles-td','class',@$template['TITLES']['CLASS']);
//Записи
$this->add_template('datas-td','class',@$template['DATAS']['CLASS']);
$this->add_template('datas-tr','class',@$template['DATAS']['TR-CLASS']);
if(@$template['ALTERNATION']['ALTERNATION'])
{
$this->add_template('alternation','td-class',@$template['ALTERNATION']['CLASS']);
$this->add_template('alternation','tr-class',@$template['ALTERNATION']['TR-CLASS']);
}
//Загружаем дополнительные классы для колонок
$this->cols = @$template['COLS'];
}
//Прикрепление управляющих значений
function add_control($controls)
{
$this->controls[] = $controls;
}
//Прикрепление Javasсript события (только на TR-данных)
function add_event($event,$effect)
{
$this->events[$event] = $effect;
}
//Генерируем линию Javasсript событий
private function make_events($controls)
{
$javasсript = '';
//Генерируем линию
foreach($this->events as $event => $effect)
$javasсript .= " $event=\"".utemplate($effect,$controls)."\"";
return $javasсript;
}
//Добавление шаблона
function add_template($owner,$name,$template)
{
//Устанавливаем значение
if(is_array($template))
$this->template[$owner][$name] = array_merge($this->template[$owner][$name],$template);
else
$this->template[$owner][$name] = $template;
return true;
}
//Уставновка заголовков
function titles()
{
//Для вставки
$insert = func_get_args();
//Преобразуем значения в строки
foreach($insert as $key => $value)
$insert[$key] = (string)$value;
//Устанавливаем
$this->titles = $insert;
}
//Генерируем линию значений
private function generate_headers($template,$aclass='')
{
//Генерируем
$result = array();
$itemplate = $this->template[$template];
@$itemplate['class'] .= ($aclass?' '.$aclass:'');
$itemplate['class'] = trim($itemplate['class']);
foreach($itemplate as $name => $value)
if($value) $result[] = "$name=\"$value\"";
//Возвращаем строку
$result=join(' ',$result);
return $result?' '.$result:'';
}
//Добавление значения
function add()
{
//Для вставки
$insert = func_get_args();
//Преобразуем значения в строки
foreach($insert as $key => $value)
$insert[$key] = (string)$value;
//Вставляем
$this->datas[] = $insert;
}
//Генерируем таблицу
function generate()
{
//Начинаем генерацию
$result = "<table".$this->generate_headers('table').">\r\n<tbody>\r\n";
//Генерируем заголовки
if($this->template['titles']['show']&&$this->titles)
{
$result .= "<tr".$this->generate_headers('titles-tr').">";
//Создаем линию заголовков
foreach($this->titles as $title)
{
$result .= "<td".$this->generate_headers('titles-td').">".$title.$this->template['titles']['postfix']."</td>";
}
$result .= "</tr>\r\n";
}
$linen=0;
//Генерируем линии значений
foreach($this->datas as $key => $line)
{
$result .= "<tr".$this->generate_headers('datas-tr',$linen%2?@$this->template['alternation']['tr-class']:'').$this->make_events(@$this->controls[$key]).">";
foreach($line as $column => $value)
{
$result .= "<td".$this->generate_headers('datas-td',($linen%2?@$this->template['alternation']['td-class']:'').(@$this->template['alternation']['td-class']&&@$this->cols[$column]?' ':'').@$this->cols[$column]).">".$value."</td>";
}
$result .= "</tr>\r\n";
$linen++;
}
//Выводим
return $result."</tbody>\r\n</table>";
}
//Возвращаем
function __toString()
{
return $this->generate();
}
}
?>
Для работы необходима функция из другой библиотеки: она самая
<?php
//~~~~~~~~~~~~~~ Функция генерации шаблона
FUNCTION UTEMPLATE($CONTENTS,$INCLUDES,$PREFIX='',$BRACKETS='')
{
//Тип скобок
IF($BRACKETS)
{
$LEFT_BRACKET='';
$RIGHT_BRACKET='';
SWITCH(STRIM($BRACKETS))
{
CASE 'round': $LEFT_BRACKET='\('; $RIGHT_BRACKET='\)'; BREAK;
CASE 'square': $LEFT_BRACKET='\['; $RIGHT_BRACKET='\]'; BREAK;
CASE 'curly': $LEFT_BRACKET='{'; $RIGHT_BRACKET='}'; BREAK;
CASE 'angle': $LEFT_BRACKET='<'; $RIGHT_BRACKET='>'; BREAK;
DEFAULT: $LEFT_BRACKET='\['; $RIGHT_BRACKET='\]';
}
}
ELSE GLOBAL $LEFT_BRACKET,$RIGHT_BRACKET;
IF($INCLUDES)
{
//Генерируем шаблон
FOREACH ($INCLUDES AS $NAME => $VALUE)
{
$INSERT IGNOREON='';
$INSERT IGNOREOFF='';
//Выбираем тип вставки
IF($VALUE) $INSERT IGNOREON="stripslashes('\\1')"; ELSE $INSERT IGNOREOFF="stripslashes('\\1')";
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *on *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *on *$RIGHT_BRACKET/usie",$INSERT IGNOREON,$CONTENTS);
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *off *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *off *$RIGHT_BRACKET/usie",$INSERT IGNOREOFF,$CONTENTS);
$CONTENTS=MB_EREGI_REPLACE("$LEFT_BRACKET *$PREFIX$NAME *$RIGHT_BRACKET",$VALUE,$CONTENTS);
}
}
RETURN $CONTENTS;
}
//~~~~~~~~~~~~~~ Функция генерации шаблона
?>
//~~~~~~~~~~~~~~ Функция генерации шаблона
FUNCTION UTEMPLATE($CONTENTS,$INCLUDES,$PREFIX='',$BRACKETS='')
{
//Тип скобок
IF($BRACKETS)
{
$LEFT_BRACKET='';
$RIGHT_BRACKET='';
SWITCH(STRIM($BRACKETS))
{
CASE 'round': $LEFT_BRACKET='\('; $RIGHT_BRACKET='\)'; BREAK;
CASE 'square': $LEFT_BRACKET='\['; $RIGHT_BRACKET='\]'; BREAK;
CASE 'curly': $LEFT_BRACKET='{'; $RIGHT_BRACKET='}'; BREAK;
CASE 'angle': $LEFT_BRACKET='<'; $RIGHT_BRACKET='>'; BREAK;
DEFAULT: $LEFT_BRACKET='\['; $RIGHT_BRACKET='\]';
}
}
ELSE GLOBAL $LEFT_BRACKET,$RIGHT_BRACKET;
IF($INCLUDES)
{
//Генерируем шаблон
FOREACH ($INCLUDES AS $NAME => $VALUE)
{
$INSERT IGNOREON='';
$INSERT IGNOREOFF='';
//Выбираем тип вставки
IF($VALUE) $INSERT IGNOREON="stripslashes('\\1')"; ELSE $INSERT IGNOREOFF="stripslashes('\\1')";
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *on *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *on *$RIGHT_BRACKET/usie",$INSERT IGNOREON,$CONTENTS);
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *off *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *off *$RIGHT_BRACKET/usie",$INSERT IGNOREOFF,$CONTENTS);
$CONTENTS=MB_EREGI_REPLACE("$LEFT_BRACKET *$PREFIX$NAME *$RIGHT_BRACKET",$VALUE,$CONTENTS);
}
}
RETURN $CONTENTS;
}
//~~~~~~~~~~~~~~ Функция генерации шаблона
?>
К сожалению, функция template глубоко монтирована в ядро и выложить её я не могу (работать не будет). Вполне успешно можете заменить её на parse_ini_file.
А вот собственно и сам файл шаблона таблицы (ini): смотреть
#Классы оформления для FAST-TABLE
[TABLE]
#Класс таблицы
CLASS = "fasttable-table"
[TITLES]
#Генерировать заголовки
SHOW = On
#Символ после текста заголовка
POSTFIX = ":"
#Класс TD - заголовка
CLASS = "fasttable-title"
#Класс TR - заголовка
TR-CLASS = "fasttable-title-tr"
[DATAS]
#Класс TD данных
CLASS = "fasttable-data"
#Класс TR - данных
TR-CLASS = "fasttable-data-tr"
[ALTERNATION]
#Выделять чередование
ALTERNATION = On
#Добавочный класс TD при выделении чередованием
CLASS = ""
#Добавочный класс TR при выделении чередованием
TR-CLASS = "fasttable-data-tr-a"
#Особые классы для столбцов
[COLS]
Пример: смотреть
<?
uses('fasttable.php');
$changes = new fasttable('changes');
$changes->titles('Ключ:','Значение:');
foreach($array as $key=>$value)
$changes->add($key,$value);
echo '<div align="center">'.$changes.'</div>';
?>
uses('fasttable.php');
$changes = new fasttable('changes');
$changes->titles('Ключ:','Значение:');
foreach($array as $key=>$value)
$changes->add($key,$value);
echo '<div align="center">'.$changes.'</div>';
?>
В онлайне это нечто вроде этого.