Forum Webscript.Ru

Программирование => PHP => Тема начата: fog от 21 Октября 2002, 19:14:41

Название: Обрезание новостей
Отправлено: fog от 21 Октября 2002, 19:14:41
Задача:

Если новость сильно длинная, ограничить её длинну, и сделать ссылку на полную.

1. нехочется делать выборку полных текстов из базы, а потом резать. Можно ли сразу доставать из MySQL первые 1000 символов поля? Имхо нет...

2. Могут быть открытые теги. (т.е. Открыт тег до 1000 а закрыт после, и в итоге получаем  главную страничку, с незакрытыми тегами)Как из закрыть? Может есть какая-нибкдь ф-я которая закрывает все открытые теги (не стандартная само собой, кажется стандартных таких нет)


И как вообще подобные штуки откатываются?
Название: Обрезание новостей
Отправлено: ThE0ReTiC от 21 Октября 2002, 19:19:27
1. Можно. Читай ман по мускл
2. Не храни теги в базе.
Название: Обрезание новостей
Отправлено: Макс от 21 Октября 2002, 19:24:31
fog
обычно в администрированиии новостей для этого просто добавляют отдельное поле "Краткая новость".

ThE0ReTiC
Цитировать
2. Не храни теги в базе.
иногда надо
Название: Обрезание новостей
Отправлено: ThE0ReTiC от 21 Октября 2002, 19:26:04
Цитировать
иногда надо

Хм...
Например?
Название: Обрезание новостей
Отправлено: Макс от 21 Октября 2002, 19:29:09
Например новости оформляются в визуальном online-редакторе (тот который только под IE работает).
Название: Обрезание новостей
Отправлено: Tronyx от 21 Октября 2002, 21:11:55
Цитировать
Не храни теги в базе.

А если нужно текст как-то выделить? bold`ом например?
Название: Обрезание новостей
Отправлено: Maniac от 21 Октября 2002, 21:40:25
fog
В мане по мускулу поищи substr - это спасет тебя.
А что касается тэгов - придется, видать тебе самому писать.
Это не такая уж сложная проблема.
Решается примерно так: заводишь ассоциативный массив, ключами которого служат значения различных тегов. Бежишь по тексту. За каждый открытый тег увеличиваешь соответствующий элемент массива, за каждый закрытый - уменьшаешь.
Потом вставляешь в конец закрывающие теги для всех ненулевых элементов.

А если не хочешь геммороиться - составь список закрывающих тегов (ну, там, болд, италик, спан, фонт колор etc.) и вставляй их всем скопом. Я не думаю, что твои новости будут в виде таблиц оформляться (а если будут - подумай еще раз о концепции новостей)
Название: Обрезание новостей
Отправлено: Макс от 21 Октября 2002, 22:17:28
Цитировать
В мане по мускулу поищи substr - это спасет тебя.
или left:


Цитировать

`LEFT(str,len)\'
     Returns the leftmost `len\' characters from the string `str\':

          mysql> select LEFT(\'foobarbar\', 5);
                  -> \'fooba\'

     This function is multi-byte safe.

Название: Обрезание новостей
Отправлено: Tronyx от 21 Октября 2002, 22:19:01
Узнаёшь какие теги открыты, а какие закрыты:

preg_match_all("/<[^<>]+>/", $o_tags);    // все открытые
preg_match_all("/<\\/[^<>]+>/", $cl_tags); // все закрытые

Думаю проверку и закрытие оставшихся тегов сделаешь сам ;)
Название: Обрезание новостей
Отправлено: Меняздесьдавнонет от 21 Октября 2002, 22:26:56
подытожим.
fog
наиболее правильным является метод отдельного хранения кратких аннотаций, безо всякого форматирования.
Так у меня сделано на одном сайте.
Там же, в поиске, способом, который предложил Maniac, вынимется из текста кусок - начало, первые 500 символов, с запасом, а потом им делается stripslashes, что очень очень правильно, и полностью снимает воторой вопрос.
На странице с маленькими кусочками новостей вообще не должно быть тегов.
Только функция называется не substr, a substring, или left

Ну, а на другом сайте заказчик не пожелал делать аннотации, а пожелал выводить первое предложение новости. Нет проблем. substring_index до первой точки прекрасно справляется с этой задачей.

Так что, fog, на фоне такого многообразия вариантов, твое заявление о том, что "Имхо, нет", становится несостоятельным.
Я даже больше скажу. открой раз в жизни документацию по mysql и посмотри раздел строковых функций. ты будет потрясен открывшимися перспективами.
Название: Обрезание новостей
Отправлено: Антошка от 30 Октября 2002, 11:22:25
Читал, читал... скоко много пишут...
Сам вчера делал такую же задачу...
насчет первого, сразу куча вопросов к специалистам... вот вы говорите обрезать на 20 символе (НУ если грубо)
ПРИМЕР:
Думаю проверку и закрытие оставшихся тегов сделаешь сам
РЕЗУЛЬТАТ:
Думаю проверку и зак...

И чего там человек хотел сказать не понятно...
Короче, мне не понравилось что слова обрубаются на полуслове, и поэтому пришлось возиться с тремя различными функциями, код дома остался кому интересно напише, но теперь у меня обрубается только целыми слова код весит 3 строки (маленьких)

А насчет тегов... мне кажется что надо переработать или вид новостей или заключить в табличный вид... как известно таблица сама обрубит ;)
так что с этим я не мучался...
Название: Обрезание новостей
Отправлено: fog от 05 Ноября 2002, 17:22:41
Всем спасибо. Я нашел своеобразное решение. Буду воплощать его в жизнь ;-)