Визуализация элементов HTML-заголовка в Twig - PullRequest
0 голосов
/ 04 декабря 2018

Я рендеринг некоторых заголовков с помощью ветки и хочу знать, есть ли лучший и более читаемый способ сделать следующее ...

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

{{block.headingType}} является значениемзаголовок, выбранный в редакторе.значения h2, h3, h4, h5 и т. д.

То, как шаблоны HTML-заголовков выглядят ужасно (даже при том, что рендеринг работает).Есть ли лучший способ визуализации тегов заголовков в ветке на основе выбранного значения?

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы используете много заголовков, я бы предложил создать класс, который позволит вам справиться с этим, и добавить метод 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> #}

edit: добавлен getHtml, который позволяет отбрасывать необработанный фильтр, например

{{ heading1.getHtml() }} {# out: <h1>Title</h1> #}
...