在Twig中渲染HTML标题元素

时间:2018-12-04 14:30:33

标签: twig html-heading

我正在用树枝渲染一些标题,并想知道是否有更好和更易理解的方式来进行以下操作...

<{{ block.headingType }} class="measure-wide">{{ block.headingText }}</{{ block.headingType }}>

{{block.headingType}}是在编辑器中选择的标题的值。值是h2,h3,h4,h5等。

HTML标题的模板化方法看起来很丑陋(即使呈现有效)。有没有一种更好的方法可以根据所选值在树枝中显示标题标签?

1 个答案:

答案 0 :(得分:1)

如果您使用大量的标头,建议创建一个类来让您处理该标头并添加一个ids <- '{1,2,3}' dbGetQuery(dbcon, "SELECT * FROM foo WHERE i = ANY($1)", list(ids)) 方法,这使得呈现标记更加容易

ids

toString

class Heading {

    private $heading_type = 'h1';
    private $heading_text;
    private $classes = [];

    public function __construct($text) {
        $this->setHeadingText($text);
    }

    public function addClass($c) {
        if (!in_array($c, $this->classes)) $this->classes[] = $c;
        return $this;
    }

    public function getHtml() {
        return new \Twig_Markup($this->__toString(), 'UTF-8');
    }

    public function __toString() {
        return '<'.$this->getHeadingType().(!empty($this->getClasses()) ? ' class="'.implode(' ',$this->getClasses()).'"':'').'>'.$this->getHeadingText().'</'.$this->getHeadingType().'>';
    }

/**============================================
                GETTERS/SETTERS
============================================**/
    public function setHeadingType($value) {
        $this->heading_type = $value;
        return $this;
    }

    public function getHeadingType() {
        return $this->heading_type;
    }

    public function setHeadingText($value) {
        $this->heading_text = $value;
        return $this;
    }

    public function getHeadingText() {
        return $this->heading_text;
    }

    public function getClasses() {
        return $this->classes;
    }
}

编辑:添加了<?php $twig->render('template.twig', [ 'heading1' => new Heading('Title'), 'heading2' => (new Heading('Subtitle'))->setHeadingType('h2') ->addClass('foo'), ]); ,可让您删除原始过滤器,例如

{{ heading1 | raw }} {# out: <h1>Title</h1> #}
{{ heading2 | raw }} {# out: <h2 class="foo">Subtitle</h2> #}