<?php namespace Xentral\Widgets\DataTable\Service; use Xentral\Widgets\DataTable\Column\Column; use Xentral\Widgets\DataTable\DataTableInterface; use Xentral\Widgets\DataTable\Result\DataTableHtmlResult; final class DataTableRenderer { /** * @param DataTableInterface $table * * @return DataTableHtmlResult */ public function createHtmlResult(DataTableInterface $table) { return new DataTableHtmlResult($this->getHtmlTable($table), $this->getDataTableOptions($table)); } /** * @param DataTableInterface $table * * @return array */ private function getDataTableOptions(DataTableInterface $table) { $options = $table->getOptions()->toArray(); $options['ajax'] = [ 'url' => $table->getConfig()->getAjaxUrl(), 'type' => $table->getConfig()->getAjaxMethod(), 'data' => $table->getConfig()->getAjaxParams(), ]; $options['columns'] = $table->getColumns()->toArray(); return $options; } /** * @param DataTableInterface $table * * @return string */ private function getHtmlTable(DataTableInterface $table) { $columns = $table->getColumns(); $headerHtml1 = ''; $footerHtml = ''; /** @var Column $column */ foreach ($columns as $column) { $headerHtml1 .= sprintf('<th data-name="%s">%s</th>', $column->getName(), $column->getTitle()); if ($column->has('footerHtml')) { $footerHtml .= sprintf('<th data-name="%s">%s</th>', $column->getName(), $column->get('footerHtml')); } else { $footerHtml .= sprintf('<th data-name="%s">%s</th>', $column->getName(), $column->getTitle()); } } $html = "\n"; $html .= sprintf( '<table id="%s" class="%s" width="100%%" data-autoinit="%s">', $table->getConfig()->getTableName(), $table->getConfig()->getCssClassesString(), $table->getConfig()->isAutoInit() ? 'true' : 'false' ) . "\n"; $html .= '<thead>'; $html .= '<tr>' . $headerHtml1 . '</tr>'; $html .= '</thead>' . "\n"; $html .= '<tfoot><tr>' . $footerHtml . '</tr></tfoot>' . "\n"; $html .= '</table>' . "\n"; return $html; } }