Превью новости и незакрытые теги

Lithium366

Новичок
Превью новости и незакрытые теги

Появилась необходимость выводить не всю новость целиком, а только, скажем, 100 первых слов. Причем новость эта естественно с тегами. Разными. И разной глубиной вложенности. Подскажите плз. какие существуют (и существуют ли) функции / библиотеки классов умеющие грамотно закрывать в обработанных substr кусках открытые теги. Пошарил в гугле пару минут, ничего не нашел

Зачем это нужно: Продукт готовый. Хочется его обновлять. Поэтому не хочется лазить в код. Не хочется заставлять клиента вводить "Анонсы". Исходное форматирование должно быть сохранено
 

Андрейка

Senior pomidor developer
пошарь еще пару минут в поиске.. ну не первый же ты с такой проблемой, да?
 

Lithium366

Новичок
Автор оригинала: Андрейка
пошарь еще пару минут в поиске.. ну не первый же ты с такой проблемой, да?
Нашел tidy. не уверен что удастся уговорить хостера его поставить
 

Qwerty

Новичок
В принципе, несложно написать парсер строки, который находит все открытые и незакрытые тэги и закрывает их в обратной последовательности (таблиц там, надеюсь, нет). Обрезанные кусочки будут явно недлинные, тэгов мало, значит парсить немного.
А вообще, действительно, лучше анонсы отдельно писать.
 

tf

крылья рулят
Вот это не правильно. По опыту сужу. Анонс зачастую может отличаться от первого параграфа статьи.
у меня часто просят это поле сделать необязательный, т.е. заполнять по возможности, пусто - парсим полный текст
 

antson

Новичок
Партнер клуба
Lithium366
зачем в автоматическом аннонсе новости сохранять теги из откусаного кусочка ?
Например, если в первом абзаце контент менеджер загнал тег h1 красного цвета или img src=большая_картинка, то какая вероятность, что аннонс впишется в дизайн отведенного для него блока ?

Для типового показа аннонса
дата
заголовок
кратко ххх символов

аннос достаточно собрать из yyy первых символов текста новости предварительно очищенных от всех тегов.
xxx определяется как позиция последней точки или пробела
в кусочке из yyy символов . в случае, если xxx не позиция точки, а позиция пробела можно к строке для красоты добавлять "..."
 

Qwerty

Новичок
antson
В анонсе могут потребоваться ссылки, например, или выделение важного фрагмента жирным или цветом...
К тому же в начальном задании было сохранение форматирования.

Я бы объединил всё предложенное следующим образом:
1. Предоставил возможность ввести анонс вручную
2. Если поле анонса не заполнено, формируем его автоматически, следующим образом:
- парсим, удаляя картинки, таблицы и т.п. (вряд ли они там будут в начале), одновременно записываем открытые тэги;
- достигнув необходимой длины режем и закрываем все открытые (и не закрытые еще) тэги в обратной последовательности.
В дальнейшем на редактирование выдаем этот сгенереный кусок, надо будет - вводивший поправит.
 

kruglov

Новичок
Qwerty
Лично я думаю, что, если анонс не заполнен, чистим абсолютно все теги из текста и выдаем начало.

Если анонс заполнен - выдаем его вместе со всем содержимым.

Если секретарю лениво вбивать осмысленный анонс, то ему все равно и на жирность-курсивность, h1, hr, iframe и blockquote. Понадобятся - вставит вручную.
 
Сверху