<?php
use gdgrid\gd\GridDataFormatter as Format;
use gdgrid\gd\IGridFormProvider;
use gdgrid\gd\GridForm;
/* @var \gdgrid\gd\GridTable $this */
if (false == isset($this->getTagAttributes()['id']))
$this->setTagAttributes(['id' => ['grid-table-' . substr(md5(microtime(true)), 0, 10)]]);
if ($this->getTag() === 'table')
{
if (false == isset($this->getTagAttributes()['class']))
$this->setTagAttributes(['class' => ['table', 'table-striped', 'table-bordered']]);
if (null === $this->getColumnRowTemplate())
$this->setColumnRowTemplate('<thead><tr {attr}>{columns}</tr></thead>');
if (null === $this->getTemplate())
$this->setTemplate('<th {attr}>{column}</th>');
if (null === $this->getCellRowTemplate())
$this->setCellRowTemplate('<tr {attr}>{cells}</tr>');
if (null === $this->getCellTemplate())
$this->setCellTemplate('<td {attr}>{cell}</td>');
}
$output = $this->getLayout() ?: ($this->getTag() ? '<{tag} {attr}>{columns}{rows}</{tag}>' : '{columns}{rows}');
$columns = '';
$fields = $this->fetchSortOrder();
$sortOrderSize = sizeof($fields);
foreach ($fields as $col)
{
if (false == $this->checkRow($col))
continue;
$template = $this->getRowTemplate($col) ?: $this->getTemplate();
$columnAttributes = $this->getColumnAttributes($col) ?? [];
$tr = [
'{attr}' => $columnAttributes,
'{column}' => null,
];
$row = $this->getRow($col, $tr);
is_array($row) ? $tr = array_merge($tr, $row) : $tr['{column}'] = $row;
if ($tr['{column}'] === null)
$tr['{column}'] = $col;
if (is_array($tr['{attr}']))
$tr['{attr}'] = Format::getAttributes($tr['{attr}']);
$columns .= strtr($template, $tr);
}
$columns = str_replace('{columns}', $columns,
str_replace('{attr}', Format::getAttributes($this->getRowAttributes()), $this->getColumnRowTemplate()));
$rows = '';
$template = $this->getCellTemplate();
if ($this->plugin()->checkFetched('filter') && $this->plugin()->getFetched('filter') instanceof GridForm)
{
foreach ($this->fetchSortOrder() as $item)
{
if ($opt = $this->plugin()->getFetched('filter')->getInputOptions($item))
$options[$item] = $opt;
}
}
else $options = $this->getProvider() instanceof IGridFormProvider ? $this->getProvider()->gridInputOptions() : [];
foreach ($this->getProviderItems() as $key => $val)
{
$cells = '';
for ($i = 0; $i < $sortOrderSize; ++$i)
{
if (false == $this->checkRow($fields[$i]))
continue;
$value = $val->{$fields[$i]} ?? ($val[$fields[$i]] ?? null);
if (is_scalar($value))
{
if (isset($options[$fields[$i]][$value]))
$value = $options[$fields[$i]][$value];
$value = $this->formatter()->format($fields[$i], $value)->getValue();
}
$tr = [
'template' => null,
'{attr}' => $this->getCellAttributes($fields[$i]),
'{cell}' => $value,
];
if ($this->checkCell($fields[$i]))
{
$row = $this->getCell($fields[$i], $key, $tr);
is_array($row) ? $tr = array_merge($tr, $row) : $tr['{cell}'] = $row;
}
if (is_array($tr['{attr}']))
$tr['{attr}'] = Format::getAttributes($tr['{attr}']);
if ($tr['{cell}'] === null)
$tr['{cell}'] = $this->getPrompt($fields[$i]) ?? '<div class="no-data">' . $this::NO_DATA . '</div>';
$cells .= strtr($tr['template'] ?? $template, $tr);
}
$attr = $this->getCellRowAttributes($key);
$rows .= str_replace(
'{cells}',
$cells,
str_replace('{attr}', ($attr ? Format::getAttributes($attr) : null), $this->getCellRowTemplate($key))
);
}
echo strtr($this->fetchLayout($output), [
'{tag}' => $this->getTag(),
'{attr}' => Format::getAttributes($this->getTagAttributes()),
'{columns}' => $columns,
'{rows}' => $rows,
]);
|