Усечение HTML с помощью Liquid

Я использую движок шаблонов Liquid, чтобы отобразить сводную серию постов - на данный момент у меня есть кое-что эти строки:

{% for page in site.posts %}
  {{page.content | truncatewords: 100}}
{% endfor %}

Содержимое страницы содержит HTML, и использование усеченных слов может привести к вставке недопустимого HTML в вывод. Я не хочу удалять весь HTML-код из контента (встроенные видео и изображения должны быть видны), и в идеале все, что я хочу, это добавить соответствующие закрывающие теги.

Я вижу, что простое усечение не приведет к ожидаемому результату, поэтому мой вопрос: как я могу урезать свой HTML, чтобы вывести правильную разметку с помощью Liquid?

Обновить

Очень специфическая проблема заключается в том, что у меня есть пример кода, размеченный с помощью Pigments. Теперь, если усечение происходит в середине примера кода, оно оставляет открытыми несколько тегов, искажая остальную часть страницы. Я ищу способ обрезать эти сообщения, не удаляя весь пример кода - просто обрезать и закрыть все открытые теги в теле контента.


person Codebeef    schedule 29.03.2011    source источник


Ответы (1)


Итак, после того, как я не смог найти много способов сделать это в Интернете, я придумал свое собственное решение, используя Nokogiri и обход в глубину проанализированного дерева узлов HTML.

TruncateHTML — это простой скрипт, который позволяет обрезать фрагмент HTML, сохраняя правильную структуру.

person Codebeef    schedule 15.04.2011
comment
Это было фантастично, именно то, что мне было нужно! Спасибо, что написали это :) - person Nick Knowlson; 11.03.2013