Ознакомьтесь с нашей политикой обработки персональных данных
17:21 

Воть...

Джей Ди
Всё будет Кока-Кола.
Решил от нечего делать выложить на свет кой какой модуль.
Итак, 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();
}
}


?>


Для работы необходима функция из другой библиотеки:
<?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)
{
$INSERTON='';
$INSERTOFF='';
//Выбираем тип вставки
IF($VALUE$INSERTON="stripslashes('\\1')"; ELSE $INSERTOFF="stripslashes('\\1')";
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *on *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *on *$RIGHT_BRACKET/usie",$INSERTON,$CONTENTS);
$CONTENTS=PREG_REPLACE("/$LEFT_BRACKET *$PREFIX$NAME *: *off *$RIGHT_BRACKET(.*?)$LEFT_BRACKET *\/ *$PREFIX$NAME *: *off *$RIGHT_BRACKET/usie",$INSERTOFF,$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>';
?>


В онлайне это нечто вроде этого.

@темы: HTML, PHP, Интересности

Комментарии
2008-10-28 в 17:53 

--==SS==--
Sanctus Satanas
А какая от этого практическая польза?

2008-10-28 в 17:53 

Co0L
шпиён администрации
Гений, миллионер, семьянин, мизантроп.
--==SS==-- Присоединяюсь к вопросу)

2008-10-28 в 17:59 

Джей Ди
Всё будет Кока-Кола.
Co0L в целях оформления страниц достаточно спорно. Но при написании панели управления, а в моем случае панели менеджера (управление большим количеством заказов и т.д.) весьма удобно. Закинул значения и радуешся. Причем формление можно сменить за несколько минут.

Фактически таблица только для ведения статистики и вывода данных.

   

Сообщество PHP программистов

главная