HTML conversion
The HTMLConverter
converts a CSV records collection into an HTML Table using PHP’s DOMDocument
class.
Settings
Prior to converting your records collection into an HTML table, you may wish to configure optional information to improve your table rendering.
HTMLConverter::table
public HTMLConverter::table(string $class_name, string $id_value = ''): self
This method sets the optional table class
and id
attribute values.
HTMLConverter::tr
public HTMLConverter::tr(string $record_offset_attribute_name): self
This method sets the optional attribute name for the record offset on the HTML tr
tag.
HTMLConverter::td
public HTMLConverter::td(string $fieldname_attribute_name): self
This method sets the optional attribute name for the field name on the HTML td
tag.
Conversion
public HTMLConverter::convert(iterable $records, array $header_record = [], array $footer_record = []): string
The HTMLConverter::convert
accepts an iterable
which represents the records collection and returns a string.
It optionally accepts:
- an array of strings representing the tabular header;
- an array of strings representing the tabular footer;
If any of these arrays are present and non-empty, the tabular data will be contained in a tbody
tag as per HTML specification.
use League\Csv\HTMLConverter;
//we fetch the info from a DB using a PDO object
$sth = $dbh->prepare("SELECT firstname, lastname, email FROM users LIMIT 2");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
$converter = (new HTMLConverter())
->table('table-csv-data', 'users')
->tr('data-record-offset')
->td('title')
;
// The PDOStatement Object implements the Traversable Interface
// that's why Converter::convert can directly insert
// the data into the HTML Table
$html = $converter->convert($sth);
echo $html;
// <table class="table-csv-data" id="users">
// <tr data-record-offset="0">
// <td title="firstname">john</td>
// <td title="lastname">doe</td>
// <td title="email">john.doe@example.com</td>
// </tr>
// <tr data-record-offset="1">
// <td title="firstname">jane</td>
// <td title="lastname">doe</td>
// <td title="email">jane.doe@example.com</td>
// </tr>
// </table>
$html = $converter->convert($sth, ['First Name', 'Last Name', 'E-mail']);
echo $html;
// <table class="table-csv-data" id="users">
// <thead>
// <tr>
// <th scope="col">First Name</th>
// <th scope="col">Last Name</th>
// <th scope="col">E-mail</th>
// </tr>
// </thead>
// <tbody>
// <tr data-record-offset="0">
// <td title="firstname">john</td>
// <td title="lastname">doe</td>
// <td title="email">john.doe@example.com</td>
// </tr>
// <tr data-record-offset="1">
// <td title="firstname">jane</td>
// <td title="lastname">doe</td>
// <td title="email">jane.doe@example.com</td>
// </tr>
// </tbody>
// </table>