getTag()) { case 'tr': $this->getBody()->addHtml($html); break; case 'thead': parent::addHtml($html); $this->header = $html; break; case 'tbody': parent::addHtml($html); $this->body = $html; break; case 'tfoot': parent::addHtml($html); $this->footer = $html; break; case 'caption': if ($this->caption === null) { $this->prependHtml($html); $this->caption = $html; } else { throw new RuntimeException( 'Tables allow only one tag' ); } break; default: $this->getBody()->addHtml(static::row([$html])); } } else { $this->getBody()->addHtml(static::row([$html])); } } return $this; } /** * @param mixed $content * @return $this */ public function add($content) { if ($content instanceof stdClass) { $this->getBody()->addHtml(static::row((array) $content)); } elseif (is_iterable($content)) { $this->getBody()->addHtml(static::row($content)); } elseif ($content instanceof ValidHtml) { $this->addHtml($content); } else { $this->getBody()->addHtml(static::row([$content])); } return $this; } /** * Set the table title * * Will be rendered as a "caption" HTML element * * @param mixed $caption * @return $this */ public function setCaption($caption) { if ($caption instanceof BaseHtmlElement && $caption->getTag() === 'caption') { $this->caption = $caption; $this->prependHtml($caption); } elseif ($this->caption === null) { $this->caption = new HtmlElement('caption', null, ...Html::wantHtmlList($caption)); $this->prependHtml($this->caption); } else { $this->caption->setContent($caption); } 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 Html::tag('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 Html::tag('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->addHtml(Html::tag($tag, null, $value)); } if ($attributes !== null) { $tr->setAttributes($attributes); } return $tr; } /** * @return HtmlElement */ public function getBody() { if ($this->body === null) { $this->addHtml(Html::tag('tbody')->setSeparator("\n")); } return $this->body; } /** * @return HtmlElement */ public function getHeader() { if ($this->header === null) { $this->addHtml(Html::tag('thead')->setSeparator("\n")); } return $this->header; } /** * @return HtmlElement */ public function getFooter() { if ($this->footer === null) { $this->addHtml(Html::tag('tfoot')->setSeparator("\n")); } return $this->footer; } /** * @return HtmlElement */ public function nextBody() { $this->body = null; return $this->getBody(); } /** * @return HtmlElement */ public function nextHeader() { $this->header = null; return $this->getHeader(); } }