Слово выделения Twig (плагин Timber)

Я использую плагин Timber для Wordpress.

И создаю страницу поиска результатов. Я хотел бы выделить слово, которое искал пользователь.

В PHP я написал, что:

$highlight = array();
if ($terms) {
    foreach($terms as $term) {
        array_push($highlight, '<span class="blue bold">'.$term.'</span>');
    }
}

И это для замены искомого слова в PHP:

<p class="date red"><?php echo str_ireplace($terms, $highlight, get_field('subtitle_post')); ?></p

Но я не знаю, как это преобразовать в Twig (Timber)?


person Jandon    schedule 29.12.2016    source источник


Ответы (2)


Вы должны использовать собственный фильтр веточки.

Из документации: расширение древесины. (Я пытался адаптировать его к вашему примеру, но, возможно, вам придется его изменить)

/* functions.php */

add_filter('get_twig', 'add_to_twig');

function add_to_twig($twig) {
    /* this is where you can add your own fuctions to twig */
    $twig->addExtension(new Twig_Extension_StringLoader());
    $twig->addFilter(new Twig_SimpleFilter('highlight', 'highlight'));
    return $twig;
}

function highlight($text, array $terms) {

    $highlight = array();
    foreach($terms as $term) {
       $highlight[]= '<span class="blue bold">'.$term.'</span>';
    }

    return str_ireplace($terms, $highlight, $text);
}

Затем вы можете использовать свой собственный фильтр с

{{ yourField|highlight(words) }}
person goto    schedule 29.12.2016

Вы можете просто выделить заданные слова с помощью функции карты Twig:

{% set sentence = 'The quick brown fox jumps over the lazy dog' %}
{% set highlight = ['the', 'quick', 'fox'] %}
{{ sentence|split(' ')|map( word => ( word|lower in highlight ? '<strong>' ~ word ~ '</strong>' : word ) )|join(' ') }}
person Zoltán Hajdú    schedule 08.12.2019