Обрезать длинные тексты

1.26K
.

Скрин

Прикрепленные файлы:
.
ДоХтор
# Hasanov (12.10.2017 / 21:13)
За кончиной процесс!
Тогда уж лучше сделай так (чтобы слова не обрывались) :
* (+/-)
///Ссылка на гостевую////
$length = 35; // Длина строки, после которой обрезать лишнее
 
if ($set['mod_guest'] || $rights >= 7)
    echo '<div class="mainmenu"><b><a href="guestbook/index.php">' . $lng['guestbook'] . '</a></b> (' . counters::guestbook() . ')</div>';
 
///текст из гостевой////
echo '<div class="list1">';
 
$guest = mysql_fetch_assoc(mysql_query("SELECT `text` FROM `guest` ORDER BY `time` DESC LIMIT 1"));
$guest_text = $guest['text'];
 
if (mb_strlen($guest_text, 'UTF-8') > $length) {
    $guest_text = mb_substr($guest_text, 0, $length, 'UTF-8');
    $guest_text = preg_replace('~(?:\s\S+$|\s*$)~', '', $guest_text);
    $guest_text .= ' <a href="guestbook/index.php"><span style="color:#FF0000;">Дальше...</span>';
}
 
echo $guest_text . '</div>';
.
Hasanov

Забыли только мультиязычности :-) вместо Дальше...
' . $lng['next'] . ' в языковым пакете есть оказывается

Прикрепленные файлы:
.
# Hasanov (13.10.2017 / 07:44)
Забыли только мультиязычности :-) вместо Дальше...
' . $lng['next'] . ' в языковым пакете есть оказывается
Можно вместо слова "Дальше" использовать указатели (стрелки), и тогда мультиязычность не понадобится.

Я немного подправил код, чтоб при минимальной длине слово не обрезалось. Надо добавить этот метод в файл /incfiles/classes/functions.php
functions.php (+/-)
/**
 * Сокращение текста
 * 
 * @param string  $text   - Текст для обработки
 * @param string  $link   - Ссылка на оригинал
 * @param integer $length - Длина сокращённого текста
 * 
 * @return string
 */
public static function reduction($text, $link, $length = 70)
{
    if (mb_strlen($text, 'UTF-8') > $length) {
        $substr = mb_substr($text, 0, $length, 'UTF-8');
        
        $text = strpos($substr, ' ') !== false 
            ? preg_replace('~(\s)?(?(1)\S+$|\s$)~', '', $substr) 
            : strstr($text, ' ', true);
        
        $text .= " ... <a href='$link'><span style='color:red;'>&raquo;&raquo;</span>";
    }

    return $text;
}
А в файле, в котором будет вывод сокращённого текста, надо прописать этот код:
code (+/-)
///Ссылка на гостевую////
if ($set['mod_guest'] || $rights >= 7) {
    echo '<div class="mainmenu"><b><a href="guestbook/index.php">' . 
        $lng['guestbook'] . '</a></b> (' . counters::guestbook() . ')</div>';
}
 
$guest = mysql_fetch_assoc(mysql_query("SELECT `text` FROM `guest` ORDER BY `time` DESC LIMIT 1"));

$text = $guest['text'];
$link = 'guestbook/index.php';

///текст из гостевой////
echo '<div class="list1">' . functions::reduction($text, $link) . '</div>';
Если понадобится изменить длину сокращённого текста, то её можно передать третьим параметром в вызов метода functions::reduction().
Пример: functions::reduction($text, $link, 35);
.
Tuwap.ru

ДоХтор, А как такое реализовать в 7 версии?)

.

Кеня, Нужно код поглядеть, сразу не скажу.

.
Tuwap.ru
# ДоХтор (02.02.2020 / 13:21)
Кеня, Нужно код поглядеть, сразу не скажу.
Будет время погляди пожалуйста) Буду примного благодарен
Всего: 17