Часть дерева / TWIG {{post.content}} вверху, остальная часть внизу

Мне нужно вывести, скажем, первые 100 букв {{post.content}} где-то выше, а затем вторую часть {{post.content}} ниже.

{{post.content.length(100)}}  //to display the first 100 characters
{{post.content.length(-100)}} //to remove the first 100 characters

Вышеупомянутое, похоже, не работает для этого. Мне было интересно, есть ли для этого элегантное решение (возможно, оно встроено в Timber, например, ".length ()")?


person Frizzant    schedule 23.11.2018    source источник


Ответы (2)


Если контент не содержит HTML, вы можете просто использовать _2 _ -фильтр

{{ lipsum | slice(0, 100) }}

-----------------------------------------

{{ lipsum | slice(100) }}

демонстрация

person DarkBee    schedule 23.11.2018
comment
Скорее всего, он будет содержать html. Есть другой вариант? - person Frizzant; 23.11.2018
comment
Важно ли, чтобы html оставался там по какой-либо причине? В противном случае сначала примените striptags - person DarkBee; 23.11.2018
comment
Да, потому что я хочу использовать его для post.content. И пользователь, по крайней мере, будет использовать там теги ‹h1› ‹b› ‹img› и т. Д. @DarkBee - person Frizzant; 24.11.2018
comment
Я предлагаю использовать CSS и многоточие, а затем - person DarkBee; 24.11.2018
comment
Похоже, это доставило нам немало хлопот для поисковых роботов Google? В CSS нет возможности отображать только определенное количество символов в div, не так ли? Знаете ли вы другой способ - я бы предположил, что это должно быть выполнено в Timber / TWIG / PHP как-то более или менее аккуратно. - person Frizzant; 25.11.2018
comment
Если контент содержит html, вы можете нарушить разметку. Что делать, если у содержимого есть открывающий тег, например <div> или <p>, тогда вы можете удалить закрывающий тег или разрезать тег изображения пополам. - person DarkBee; 25.11.2018

К сожалению, сейчас в Timber для этого ничего не встроено. Я бы рекомендовал написать собственный класс для вашего сообщения и сделать эти дискретные функции:

<?php

  class MyPost extends Timber\Post {

    function content_top() {
        //first grab what WP has in the database
        $content = $this->post_content;     

        //do stuff here to get first 100 chars

        //apply WP's filters
        $content = apply_filters('the_content', ($content));
        return $content;
    }

   function content_bottom() {
        //first grab what WP has in the database
        $content = $this->post_content;     

        //do stuff here to get last 100 chars

        //apply WP's filters
        $content = apply_filters('the_content', ($content));
        return $content;
    }

Вот руководство по созданию настраиваемого класса сообщений

person Jared    schedule 25.11.2018