'', // результат для вывода - работает автоматом # задаваемые опции 'text' => '', // текст 'func' => '', // функция ячейки 'file' => '', // файл ячейки 'id' => '', // id ячейки 'class' => '', // класс ячейки 'attr' => '', // атрибуты ячейки, например style 'colspan' => '', // количество столбцов которое занимает ячейка (только для таблиц) 'rowspan' => '', // количество строк которое занимает ячейка (только для таблиц) ); } } // pr($GRID[$name]); } # заполняем ячейки function grid_r_c($name = '', $row = 1, $col = 1, $options = array()) { global $GRID; # имя сетки if (!$name) return; # функция, текст $func = (isset($options['func'])) ? $func = $options['func'] : $func = false; $text = (isset($options['text'])) ? $text = $options['text'] : $text = false; $file = (isset($options['file'])) ? $file = $options['file'] : $file = false; # прочие опции $id = (isset($options['id'])) ? $id = $options['id'] : $id = ''; $class = (isset($options['class'])) ? $class = $options['class'] : $class = ''; $attr = (isset($options['attr'])) ? $attr = $options['attr'] : $attr = ''; $colspan = (isset($options['colspan'])) ? $colspan = $options['colspan'] : $colspan = ''; $rowspan = (isset($options['rowspan'])) ? $rowspan = $options['rowspan'] : $rowspan = ''; if (isset($GRID[$name][$row][$col])) { // заполняем массив ячейки опциями $GRID[$name][$row][$col]['func'] = $func; $GRID[$name][$row][$col]['text'] = $text; $GRID[$name][$row][$col]['file'] = $file; $GRID[$name][$row][$col]['id'] = $id; $GRID[$name][$row][$col]['class'] = $class; $GRID[$name][$row][$col]['attr'] = $attr; $GRID[$name][$row][$col]['colspan'] = $colspan; $GRID[$name][$row][$col]['rowspan'] = $rowspan; # предопределенная функция, которая буферизует вывод type-файла if ($func == 'ob_start') { ob_start(); return; } # предопределенная функция, которая выводит буфер type-файла if ($func == 'ob_end') { $GRID[$name][$row][$col]['out'] = ob_get_contents(); ob_end_clean(); return; } # предопределенная функция, которая очищает буфер, если не нужно выводить # результат. Использовать вместо ob_end if ($func == 'ob_clean') { ob_end_clean(); return; } # если определена константа, то в out ничего не пишем if (defined('GRID_ONLY')) return; # помещаем в ячейку указанный текст if ($text) { $GRID[$name][$row][$col]['out'] = $text; return; } # указана функция if ($func and function_exists($func)) { ob_start(); $func(); $GRID[$name][$row][$col]['out'] = ob_get_contents(); ob_end_clean(); return; } # указан файл if ($file) { $path = getinfo('template_dir') . $file; if ( file_exists($path) and !is_dir($path)) { ob_start(); require($path); $GRID[$name][$row][$col]['out'] = ob_get_contents(); ob_end_clean(); return; } } } } # вывод function grid_end($name = '') { global $GRID; if (!$name) return; if (isset($GRID[$name])) { if ( count($GRID[$name]) == 1 and count($GRID[$name][1]) == 1 ) // если задана одна ячейка, { _grid_div($name); // одиночный div } elseif ( count($GRID[$name][1]) == 1 ) // только один столбец { _grid_divs($name); // вложенный див } else { _grid_table($name); // таблица } } } # одиночный div function _grid_div($name) { global $GRID; $id = ($GRID[$name][1][1]['id']) ? $id = $GRID[$name][1][1]['id'] : $id = $name; $class = ($GRID[$name][1][1]['class']) ? $class = ' class="' . $GRID[$name][1][1]['class'] . '"' : $class = ''; $attr = ($GRID[$name][1][1]['attr']) ? $attr = ' '. $GRID[$name][1][1]['attr'] : $attr = ''; echo NR . '
' . $GRID[$name][1][1]['out'] . '
' . NR . NR; } # вложенный div function _grid_divs($name) { global $GRID; echo NR . NR . '
'; foreach($GRID[$name] as $tr => $tds) { foreach($tds as $td_key => $td_val) { $id = ($td_val['id']) ? $id = ' id="' . $td_val['id'] . '"' : $id = ''; $class = ($td_val['class']) ? $class = ' ' . $td_val['class'] : $class = ''; $attr = ($td_val['attr']) ? $attr = ' '. $td_val['attr'] : $attr = ''; echo NR . ' ' . $td_val['out'] . '
' . NR; } } echo '' . NR . NR; } # таблица function _grid_table($name) { global $GRID; echo NR . NR . ''; # количество ячеек в строке # это для того, что, если есть пустые ячейки в строке, то браузер # понимает, что у нас заданое число колонок. $cols = count($GRID[$name][1]); for ($i = 0; $i < $cols; $i++) { echo NR . ' '; } foreach($GRID[$name] as $tr => $tds) { echo NR . ' '; foreach($tds as $td_key => $td_val) { $id = ($td_val['id']) ? $id = ' id="' . $td_val['id'] . '"' : $id = ''; $class = ($td_val['class']) ? $class = ' ' . $td_val['class'] : $class = ''; $attr = ($td_val['attr']) ? $attr = ' '. $td_val['attr'] : $attr = ''; $colspan = ($td_val['colspan']) ? $colspan = ' colspan="'. $td_val['colspan'] . '"' : $colspan = ''; $rowspan = ($td_val['rowspan']) ? $rowspan = ' rowspan="'. $td_val['rowspan'] . '"' : $rowspan = ''; # если текст = _null, то ничего не выводим # это если нужно спрятать ячейку при rowspan и colspan if ($td_val['text'] !== '_null') { echo NR . ' ' . $td_val['out'] . '' . NR; } } echo ' ' . NR; } echo '
' . NR . NR; } # функция для отладки - выводит $GRID без $out function grid_show_struct() { global $GRID; $GRID_TEMP = $GRID; foreach($GRID_TEMP as $gk1 => $g1) { foreach($g1 as $gk2 => $g2) { foreach($g2 as $gk3 => $g3) { $GRID_TEMP[$gk1][$gk2][$gk3]['out'] = htmlspecialchars( mb_substr($GRID_TEMP[$gk1][$gk2][$gk3]['out'], 0, 100) ) . ' ...'; $GRID_TEMP[$gk1][$gk2][$gk3]['text'] = htmlspecialchars($GRID_TEMP[$gk1][$gk2][$gk3]['text']); } } } pr($GRID_TEMP); } ?>