Класс HTML Table (таблицы)
Класс Table предоставляет функции, которые позволят вам автоматически генерировать HTML таблицы из массивов или из результатов выборок БД.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс Table инициализируется в вашем контроллере посредством функции $this->load->library:
$this->load->library('table');
Загруженный класс доступен как $this->table
Примеры
Вот пример, показывающий, как можно создать таблицу из многомерного массива. Обратите внимание, что первый индекс массива преобразуется в заголовочную часть (шапку) таблицы. Также вы можете устанавливать шапку посредством функции set_heading(), описанной ниже.
$this->load->library('table');
$data = array(
array('Name', 'Color', 'Size'),
array('Fred', 'Blue', 'Small'),
array('Mary', 'Red', 'Large'),
array('John', 'Green', 'Medium')
);
echo $this->table->generate($data);
Вот пример того, как таблица создается из результатов запроса в БД. Класс Table автоматически генерирует заголовки, основываясь на именах полей (также вы можете самостоятельно определять заголовки, используя функцию set_heading()).
$this->load->library('table');
$query = $this->db->query("SELECT * FROM my_table");
echo $this->table->generate($query);
Этот пример показывает, как создать таблицу из раздельных параметров:
$this->load->library('table');
$this->table->set_heading('Name', 'Color', 'Size');
$this->table->add_row('Fred', 'Blue', 'Small');
$this->table->add_row('Mary', 'Red', 'Large');
$this->table->add_row('John', 'Green', 'Medium');
echo $this->table->generate();
Вот пример, использующий линейные массивы в качестве раздельных параметров:
$this->load->library('table');
$this->table->set_heading(array('Name', 'Color', 'Size'));
$this->table->add_row(array('Fred', 'Blue', 'Small'));
$this->table->add_row(array('Mary', 'Red', 'Large'));
$this->table->add_row(array('John', 'Green', 'Medium'));
echo $this->table->generate();
Дизайн таблицы
Класс Table позволяет вам устанавливать дизайн шаблона таблицы. Вот примерный прототип:
$tmpl = array (
'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
'heading_row_start' => '<tr>',
'heading_row_end' => '</tr>',
'heading_cell_start' => '<th>',
'heading_cell_end' => '</th>',
'row_start' => '<tr>',
'row_end' => '</tr>',
'cell_start' => '<td>',
'cell_end' => '</td>',
'row_alt_start' => '<tr>',
'row_alt_end' => '</tr>',
'cell_alt_start' => '<td>',
'cell_alt_end' => '</td>',
'table_close' => '</table>'
);
$this->table->set_template($tmpl);
Примечание: Обратите внимание, что в шаблоне присутствуют наборы из двух "строковых" элементов. Они позволяют вам устанавливать альтернативные цвета строк или другие элементы дизайна для каждой пары строковых данных (чет/нечет).
Вы НЕ должны описывать шаблон полностью. Изменяйте только те значения, которые сочтете нужными. В этом примере изменяется только открывающий тег таблицы:
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );
$this->table->set_template($tmpl);
Справка по функциям
$this->table->generate()
Возвращает массив, содержащий сгенерированную таблицу. Принимает опциональный параметр — массив или результат выборки из базы данных.
$this->table->set_caption()
Позволяет вам установить шапку таблицы.
$this->table->set_caption('Colors');
$this->table->set_heading()
Позволяет вам изменить шапку таблицы. Вы можете передавать данные массивом или раздельными параметрами:
$this->table->set_heading('Name', 'Color', 'Size');
$this->table->set_heading(array('Name', 'Color', 'Size'));
$this->table->add_row()
Позволяет вам добавить строку в таблицу. Вы можете передавать данные массивом или раздельными параметрами:
$this->table->add_row('Blue', 'Red', 'Green');
$this->table->add_row(array('Blue', 'Red', 'Green'));
Если вы предпочитаете устанавливать индивидуальные аттрибуты тегов ячеек, вы можете использовать ассоциативный массив. Ключ 'data' определяет данные ячейки. Любой другой ключ => пары значений key='val', которые станут аттрибутами тега:
$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);
$this->table->add_row($cell, 'Red', 'Green');
// генерирует
// <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
$this->table->make_columns()
Эта функция принимает линейный массив на входе и создает многомерный массив с глубиной, соответствующей количеству столбцов. Это позволяет отображать линейный массив с множеством элементов в таблице, с фиксированным количеством столбцов. Рассмотрим пример:
$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');
$new_list = $this->table->make_columns($list, 3);
$this->table->generate($new_list);
// Создает такую таблицу
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td>one</td><td>two</td><td>three</td>
</tr><tr>
<td>four</td><td>five</td><td>six</td>
</tr><tr>
<td>seven</td><td>eight</td><td>nine</td>
</tr><tr>
<td>ten</td><td>eleven</td><td>twelve</td></tr>
</table>
$this->table->set_template()
Позволяет вам установить собственный шаблон. Указывайте данные полностью, или частично.
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );
$this->table->set_template($tmpl);
$this->table->set_empty()
Позволяет вам установить значение по умолчанию для использования в пустых ячейках таблицы. Вы можете, к примеру, установить неразрывный пробел:
$this->table->set_empty(" ");
$this->table->clear()
Позволяет вам очистить шапку и строки таблицы. Если вы хотите обработать несколько таблиц с различными данными, вызовите эту функцию по окончании обработки каждой таблицы. Не забудьте сохранить сгенерированные данные. Пример:
$this->load->library('table');
$this->table->set_heading('Name', 'Color', 'Size');
$this->table->add_row('Fred', 'Blue', 'Small');
$this->table->add_row('Mary', 'Red', 'Large');
$this->table->add_row('John', 'Green', 'Medium');
echo $this->table->generate();
$this->table->clear();
$this->table->set_heading('Name', 'Day', 'Delivery');
$this->table->add_row('Fred', 'Wednesday', 'Express');
$this->table->add_row('Mary', 'Monday', 'Air');
$this->table->add_row('John', 'Saturday', 'Overnight');
echo $this->table->generate();
$this->table->function
Позволяет вам указывать родные функции PHP или правильный объект массива, который будет применяться к данным во всех ячейках.
$this->load->library('table');
$this->table->set_heading('Name', 'Color', 'Size');
$this->table->add_row('Fred', '<strong>Blue</strong>', 'Small');
$this->table->function = 'htmlspecialchars';
echo $this->table->generate();
В примере выше, данные всех ячеек прогоняются через функцию PHP htmlspecialchars(). Получается:
<td>Fred</td><td><strong>Blue</strong></td><td>Small</td>