https://github.com/jupitern/table
a fluent HTML table generation with PHP. Framework agnostic
https://github.com/jupitern/table
html-table php php-table table table-generator
Last synced: 9 months ago
JSON representation
a fluent HTML table generation with PHP. Framework agnostic
- Host: GitHub
- URL: https://github.com/jupitern/table
- Owner: jupitern
- Created: 2015-01-21T14:55:58.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2022-06-30T21:22:22.000Z (over 3 years ago)
- Last Synced: 2025-04-22T20:16:03.368Z (9 months ago)
- Topics: html-table, php, php-table, table, table-generator
- Language: PHP
- Homepage:
- Size: 53.7 KB
- Stars: 23
- Watchers: 4
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://scrutinizer-ci.com/g/jupitern/table/build-status/master)
[](https://scrutinizer-ci.com/g/jupitern/table/?branch=master)
[](https://packagist.org/packages/jupitern/table) [](https://packagist.org/packages/jupitern/table) [](https://packagist.org/packages/jupitern/table)
# jupitern/table
#### HTML table generation with PHP.
Pass your data using:
* JSON, Arrays (associative or not).
* result set using PDO or you favourite framework ORM.
* directly or using ajax requests.
* Integrates easily with your preferred js library.
* more to come...
## Demo:
soon...
## Requirements
PHP 8.0 or higher.
## Installation
Include jupitern/table in your project, by adding it to your composer.json file.
```php
{
"require": {
"jupitern/table": "3.*"
}
}
```
## Usage
```php
// instance Table with instance name
\Jupitern\Table\Table::instance()
// set data for non ajax requests
// using a array
->setData([ [1, 'Peter', '35', '961 168 851'], [2, 'John', '44', '169 853 741'] ])
// using a associative array
->setData([
['id' => 1, 'name' => 'Peter', 'age' => '35', 'phone' => '961 168 851'],
['id' => 2, 'name' => 'John', 'age' => '44', 'phone' => '169 853 741'],
])
// using json string
->setData([[1,"Peter","35","961 168 851"],[2,"John","44","169 853 741"]])
// using PDO result or your framework ORM. see example how to grab $data at the end
->setData($data)
// add attributes to the html tag one by one
->attr('table', 'id', 'demoTable')
->attr('table', 'class', 'table table-bordered table-striped table-hover')
->attr('table', 'cellspacing', '0')
// or add all attributes at once
->attrs('table', ['class' => 'table table-bordered', 'cellspacing' => '0'])
// add attributes to the table rows
->css('tr', 'background-color', 'red')
// add attributes to the table rows using a callable
->attr('tr', 'data-id', function($row) {
return 'row-' . $row['id'];
})
// add a new column for array data
->column()
->title('Name')
->value(1)
->add()
// add a new column for (associative array, PDO or ORM) data
->column()
->title('Age')
->value('age')
->add()
// add a column with a closure for value field to process data in execution
// this example assumes data as object
->column()
->title('Name')
->value(function ($row) {
return rand(1,10)%2 ? ''.$row->name.'' : $row->name;
})
->add()
// another closure example for adding a column with edit action with no title on
// this example assumes data associative array
->column()
->value(function ($row) {
return 'edit '.$row['name'].'';
})
->add()
// add a column with text field as filter
->column()
->title('Name')
->value('name')
->filter()
->add()
// add a column with a drop down field as filter
// $filterData as array
->column()
->title('Name')
->value('name')
->filter([[1, 'Peter'], [2, 'John']])
->add()
// add a column with a drop down field as filter
// $filterData from (associtive array, PDO or ORM). see example how to grab $data at the end
->column()
->title('Name')
->value('name')
->filter($filterData)
->add()
// add a column with some attributes and css for and
->column()
->title('Name')
->value('name')
->attr('th', 'data-val', 'foo') // add attributes to
->css('th', 'background-color', '#f5f5f5') // add css to
->attr('td', 'data-val', 'bar') // add attributes to
->css('td', 'background-color', '#f5f5f5') // add css to
->add()
// echo table output
->render();
// OR return table output
->render(true);
```
## Example using PDO and datatables
```php
// grab data from db with PDO or in alternative from your framework ORM
$db = new PDO('mysql:host=HOST_NAME;dbname=DB_NAME;charset=utf8', 'DB_USERNAME', 'DB_PASSWORD',
array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
// data to populate table
$data = $db->query("SELECT id, name, age, phone FROM persons")->fetchAll(PDO::FETCH_OBJ);
// used for column filter
$filterData = $db->query("SELECT name as val, name FROM persons limit 10")->fetchAll(PDO::FETCH_OBJ);
\Jupitern\Table\Table::instance()
->setData($data)
->attr('table', 'id', 'demoTable')
->attr('table', 'class', 'table table-bordered table-striped table-hover')
->attr('table', 'cellspacing', '0')
->attr('table', 'width', '100%')
->column()
->title('Name')
->value(function ($row) {
return rand(1,10)%2 ? ''.$row->name.'' : $row->name;
})
->filter($filterData)
->css('td', 'color', 'green')
->css('td', 'width', '50%')
->css('td', 'background-color', '#ccc', true)
->add()
->column()
->title('Age')
->value('age')
->filter()
->css('td', 'color', 'red')
->css('td', 'width', '20%')
->add()
->column()
->title('Phone')
->filter()
->value('phone')
->css('td', 'color', 'red')
->css('td', 'width', '20%')
->add()
->column()
->value(function ($row) {
return 'edit';
})
->css('td', 'width', '10%')
->add()
->render();
?>
Include Jquery, Datatables and Bootstrap (optional) in your html.
$(document).ready( function () {
$('#demoTable').DataTable();
});
```
## Roadmap
- [ ] add demo and more examples
- [ ] code some tests
## Contributing
- welcome to discuss a bugs, features and ideas.
## License
jupitern/table is release under the MIT license.
You are free to use, modify and distribute this software, as long as the copyright header is left intact