Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Шаблоны (TPL) » Как сократить текст до конца предложения, т.е. до точки?

Как сократить текст до конца предложения, т.е. до точки?


     09.11.2015    Шаблоны (TPL), Хаки    8742

вопрос
Есть тег: {short-story limit="x"} - Выводит только текст краткой новости без HTML форматирования, при этом сам текст публикации сокращается до указанного X количества символов - т.е. текст в короткой новости может сократиться на половине предложения...



Ответил: Sander


Открыть файл ./engine/modules/show.short.php
Найти строку:
if( ($temp_dmax = dle_strrpos( $row['short_story'], ' ', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );

Заменить на:
if( ($temp_dmax = dle_strrpos( $row['short_story'], '.', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );


Но если взять текст, например:
Выводит только текст краткой новости без HTML форматирования. При этом сам текст публикации сокращается до указанного X количества символов.

И использовать тег {short-story limit="50"}
То со стандартным алгоритмом будет показано:
Выводит только текст краткой новости без HTML

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

8 комментариев

compromat
Юзер

compromat - 10 ноября 2015 18:15 -

Спасибо, то что искал. Обрубает на конце предложение :)
Как теперь поставить точку (.) в конце самого преложения.

Sander
PHP-developer

Sander - 10 ноября 2015 18:48 -

{short-story limit="50"}.

ну или
if( ($temp_dmax = dle_strrpos( $row['short_story'], '.', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] ).".";

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

compromat
Юзер

compromat - 10 ноября 2015 19:20 -

Первым вариантом ставиться, спасибо, но если текст короткий, например меньше 50 символов, в конце предложение ставиться две точки..

Второй вариант не работает, точка не ставиться, только что проверил

Sander
PHP-developer

Sander - 10 ноября 2015 19:22 -

Тогда после строки
if( ($temp_dmax = dle_strrpos( $row['short_story'], '.', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );

Добавить
$row['short_story'] .= ".";

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

izi4
Юзер

izi4 - 22 сентября 2022 12:53 -

Здравствуйте. Как то можно сделать в 15.2?

Sander
PHP-developer

Sander - 22 сентября 2022 13:13 -

Простой, топорный, но рабочий вариант
$tpl->set( $matches[0], clear_content($row['short_story'], $matches[1]) );

Заменить на:
$tpl->set( $matches[0], rtrim(clear_content($row['short_story'], $matches[1]), '.,:?!') . '.' );

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

izi4
Юзер

izi4 - 22 сентября 2022 14:34 -

Скажите пожалуйста, то что вы предложили. Получается это текст обрезает по заданому лимиту и просто ставит точку. Я правильно понимаю?.
То есть вывести первое предложение до первой точки не вывести?

izi4
Юзер

izi4 - 22 сентября 2022 14:37 -

Лично у меня обрезало до {short-story limit="80"} и поставило точку. Какой тогда смысл если можно просто в shortstory поставить точку.
кеш и прочее сделал.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх