caption = Html::tag('caption')->add(
$content
);
return $this;
}
/**
* Static helper creating a tr element
*
* @param Attributes|array $attributes
* @param Html|array|string $content
* @return HtmlElement
*/
public static function tr($content = null, $attributes = null)
{
return Html::tag('tr', $attributes, $content);
}
/**
* Static helper creating a th element
*
* @param Attributes|array $attributes
* @param Html|array|string $content
* @return HtmlElement
*/
public static function th($content = null, $attributes = null)
{
return HtmlElement::create('th', $attributes, $content);
}
/**
* Static helper creating a td element
*
* @param Attributes|array $attributes
* @param Html|array|string $content
* @return HtmlElement
*/
public static function td($content = null, $attributes = null)
{
return HtmlElement::create('td', $attributes, $content);
}
/**
* @param $row
* @param null $attributes
* @param string $tag
* @return HtmlElement
*/
public static function row($row, $attributes = null, $tag = 'td')
{
$tr = static::tr();
foreach ((array) $row as $value) {
$tr->add(Html::tag($tag, null, $value));
}
if ($attributes !== null) {
$tr->setAttributes($attributes);
}
return $tr;
}
/**
* @return HtmlElement
*/
public function generateHeader()
{
return $this->nextHeader()->add(
$this->addHeaderColumnsTo(static::tr())
);
}
/**
* @return HtmlElement
*/
public function generateFooter()
{
return HtmlElement::create('tfoot')->add(
$this->addHeaderColumnsTo(static::tr())
);
}
/**
* @param HtmlElement $parent
* @return HtmlElement
*/
protected function addHeaderColumnsTo(HtmlElement $parent)
{
foreach ($this->getColumnsToBeRendered() as $column) {
$parent->add(
Html::tag('th')->setContent($column)
);
}
return $parent;
}
/**
* @return null|array
*/
public function getColumnsToBeRendered()
{
return $this->columnsToBeRendered;
}
/**
* @deprecated
* @param array $columns
* @return $this
*/
public function setColumnsToBeRendered(array $columns)
{
$this->columnsToBeRendered = $columns;
return $this;
}
/**
* @deprecated
* @param $row
* @return HtmlElement
*/
public function renderRow($row)
{
$tr = $this->addRowClasses(Html::tag('tr'), $row);
$columns = $this->getColumnsToBeRendered();
if ($columns === null) {
$this->setColumnsToBeRendered(array_keys((array) $row));
$columns = $this->getColumnsToBeRendered();
}
foreach ($columns as $column) {
$td = static::td();
if (property_exists($row, $column)) {
$td->setContent($row->$column);
}
$tr->add($td);
}
return $tr;
}
/**
* @deprecated
* @param HtmlElement $tr
* @param $row
* @return HtmlElement
*/
public function addRowClasses(HtmlElement $tr, $row)
{
$classes = $this->getRowClasses($row);
if (! empty($classes)) {
$tr->getAttributes()->add('class', $classes);
}
return $tr;
}
/**
* @deprecated
* @param Traversable $rows
* @return HtmlDocument|HtmlElement
*/
public function renderRows(Traversable $rows)
{
$body = $this->body();
foreach ($rows as $row) {
$body->add($this->renderRow($row));
}
return $body;
}
/**
* @return HtmlElement
*/
public function body()
{
if ($this->body === null) {
$this->body = Html::tag('tbody')->setSeparator("\n");
}
return $this->body;
}
/**
* @return HtmlElement
*/
public function header()
{
if ($this->header === null) {
$this->header = Html::tag('thead')->setSeparator("\n");
}
return $this->header;
}
/**
* @return HtmlElement
*/
public function footer()
{
if ($this->footer === null) {
$this->footer = $this->generateFooter();
}
return $this->footer;
}
/**
* @return HtmlElement
*/
public function nextBody()
{
if ($this->body !== null) {
$this->add($this->body);
$this->body = null;
}
return $this->body();
}
/**
* @return HtmlElement
*/
public function nextHeader()
{
if ($this->header !== null) {
$this->add($this->header);
$this->header = null;
}
return $this->header();
}
/**
* @return string
*/
public function renderContent()
{
if (null !== $this->caption) {
$this->add($this->caption);
}
if (null !== $this->header) {
$this->add($this->header);
}
if (null !== $this->body) {
$this->add($this->body());
}
if (null !== $this->footer) {
$this->add($this->footer);
}
return parent::renderContent();
}
}