MVC компонент

Таблицы

Представляют собой надстройку над стандартными таблицами html. Компонент обеспечивает облегченную обработку и прорисовку таблиц на основе пар ключ-значение

Создание таблицы

Таблица может существовать как статично c\tables, так и в виде объекта new c\table($data=null,$header=array());

В качестве источника данных - может быть указана ссылка на ресурс запроса для экономии потребления памяти при выводе данных

c\tables::$data=c\db::query($sql);
$table->data=c\db::query($sql);

Использование таблицы

Чтобы использовать таблицу - нужно лишь задать заголовки и загрузить данные

Например

c\tables::$header=array(
'col1'=>'Колонка 1',
'col2'=>'Колонка 2'
);
//c\tables::$data=c\db::ea($sql);
c\tables::$data=array(
array('col1'=>'Значение колонки 1','col2'=>'Значение колонки 2')
);

Вывод таблицы

Таблица рендерится полностью в стиле Bootstrap 3. Таблицу можно вывести как полностью

c\tables::render();
$table->render();

Так и по частям

$table->renderHeader();
$table->renderBody();

Дополнительные свойства таблицы

Добавление класса (атрибута)

Для управления классами - можно обратиться к свойству $classes,$attributes, либо использовать специальную функцию

//class
c\tables::$classes[]='table-hovered';
$table->classes[]='table-hovered';
$table->addClass('table-hovered');
//attribute
c\tables::$attributes[]=array('id'=>'table1');
$table->attributes[]=array('id'=>'table1');

Рисовать ли шапку, если нет данных

Чтобы не мудрить и не заморачиваться почему таблица не была нарисована - было добавлено свойство

c\tables::$draw_if_empty=false;
$table->draw_if_empty=false;

Сделать ли заголовок таблицы прилипающим к верху экрана

Частоиспользуемое свойство было решено выделить в отдельную конфигурацию. Испольнение достигается за счет добавления класса 'table-sticky' и добавления Javascript который осуществляет прикрепление шапки при пролистывании.

c\tables::$sticky=false;
$table->sticky=false;

Адаптивная таблица

При сжатии страницы - таблица может быть превращена в таблицу вида залоловок-значение. Подробнее описано тут. Достигается установкой значения 'xxs','xs','sm','md' в свойстве $responsive;

c\tables::$responsive=false;
$table->responsive=false;

Танцы с заголовками

С заголовками в таблицах связано очень мнгого возможностей. Первая и самая простая - показывать ли заголовок

c\tables::$show_header=true;
$table->show_header=true;

Объединение одинаковых заголовков, если они расположены рядом

c\tables::$show_header='join';
$table->show_header='join';

Выделение заголовков заголовков. Заголовки идут вторым рядом и объединяются, если они одинаковые. Заголовки заголовков перечисляются в заголовках таблицы

c\tables::$header=array(
'cell1'=>array('name'=>'Название колонки 1','header'=>'Заголовок колонки 1')
);

В крайнем случае, если у вас особый случай и вы хотите сами составить шапку к таблице - можете использовать свойство $headerTotalHtml и у вас всё получится

Произвольное заполнение колонок таблицы

Помимо загруженных ранее колонок - можно выводить вычисляемые на ходу относительно данных в других колонках строки. Можно делать это за счет глобального свойства $fill, но рекомендуется это делать за счет свойства fill в указании заголовков

Функция содержит два параметра - полный массив данных строки и ключ ячейки. Ключ ячейки может быть использован, в случае дублирования кода и быстрого переноса части функционала без промежуточных вмешательств

Функция работает также с существующими ячейками, содержищими данные

//not recomends
c\tables::$fill['coll1']=function($row){
  return $row['FIRST_NAME'].' '.$row['LAST_NAME'];
};

//recomends
c\tables::$header['coll1']=array(
  'name'=>'Колонка 1',
  'fill'=>function($row){
    return $row['FIRST_NAME'].' '.$row['LAST_NAME'];
  }
);

Заполнение атрибутов ячеек

Для заполнения атрибутов ячеек - у вас есть возможности обратиться к свойству $cell_attributes, но рекомендуется указывать значения атрибутов ячеек через заголовки. Значения атрибутов могут быть как статичные, так и вычисляемые callback

//not recomends
c\tables::$cell_attributes['coll1']['data-fio']=function($row){
  return $row['FIRST_NAME'].' '.$row['LAST_NAME'];
};

//recomends
c\tables::$header['coll1']=array(
  'name'=>'Колонка 1',
  'attributes'=>array(
    'data-fio'=>function($row){
      return $row['FIRST_NAME'].' '.$row['LAST_NAME'];
    }
  )
);

Заполнение атрибутов строк

Для заполнения атрибутов строк существует свойство $row_attributes, которое можно заполнить как статичными значениями, так и использовать callback функцию для вычисления относительно ячеек

c\tables::$row_attributes['class']='success';
c\tables::$row_attributes['id']=function($row){
  return 'id_'.$row['ID'];
};

Сортирока таблицы

Таблица имеет возможность обозначать заголовки активной ссылкой на соответствующую страницу с передачей дополнительных GET параметров &sort=[[column_name]]&order=asc|desc

Для этого нужно передать в атрибутах ячейки дополнительный параметр

c\tables::$header=array('coll1'=>array(
  'name'=>'Колонка 1',
  'sort'=>true
);

а также для вывода поля и порядка сортировки, по которому в настоящее время идет сортировка - используются методы

$table->sort($default='',$field='');
$table->order($field='');

Функция возвращает поле, которое можно подставить напрямую в sql запрос. Поле должно находится среди заголовков $header, иначе возвращается $default

Группировка срок таблицы

Существует возможность выделения заголовка для группы строк. Заголовок будет просчитываться для каждой строки и выводиться перед строкой только если он отличается от прошлого заголовка. Формат описания группы выглядит следующим образом:

tables::$group;
$table->group[]=[
'cell_attributes'=>['class'=>'warning'],
'fill'=>function($row){
    return $row['ID'];
}
];

Аналогичным обзразом добавлен механизм отображения заголовков под строкой

tables::$groupFooter;
$table->groupFooter[]=[
'cell_attributes'=>['class'=>'warning'],
'fill'=>function($row){
    return $row['ID'];
}
];

Получение экземпляра таблицы из статичной таблицы

c\tables::getTableObject();

Генерация данных таблицы в массив

Иногда необходимо преобразовать переданный сырой массив в итоговый с учетом заголовков и правил заполнения полей таблицы. Для этого используется функция

$table->renderAsArray();
c\tables::renderAsArray();

Экспорт таблицы в XLSX

// from static
c\tables::writesheetXlsx();
// alias
c\xlsx::writesheetFromTable();

// from object $table
xlsx::writesheetFromTable(null,$table);
// alias
$talbe->xlsxWritescheet();

// generate xlsx file from $table
$table->xlsxGenerate(null,$filename='');

Создано при помощи сервиса Core CMS