Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Модули DIAFAN.CMS Вопрос-ответ Как ограничить количество выводимых символов в шаблоне списка вопросов?


Sex Junkie (Sex Junkie) 14 января 2016 г.

что нужно прописать в коде, чтобы вывод вопроса в списке вопросов сократился до 150 символов?
я нашла в файле /modules/faq/views/faq.view.list.php
строку отвечающую за вывод самого вопроса:
Код
$this->htmleditor($row['anons']);

как здесь поместить условие, чтобы выводилось только 150 символов?

помогите пожалуйста!
cms мне не знакома((
заранее благодарю за помощь!

Инна (fantanella) 7914 января 2016 г.

http://prntscr.com/9pxua3
Вопрос-Ответ -> Настройки модуля
Спасибо сказали: Sex Junkie (Sex Junkie)

Sex Junkie (Sex Junkie) 14 января 2016 г.

у меня нет такого поля в настройках модуля(

Doket (kolganov_ev) 1114 января 2016 г.

Код
substr($this->htmleditor($row['anons']), 0, 150);


Функция substr
Спасибо сказали: Sex Junkie (Sex Junkie)

Sex Junkie (Sex Junkie) 14 января 2016 г.

что-то не срабатывает(

Doket (kolganov_ev) 1114 января 2016 г.

Вставьте перед строкой $this->htmleditor - вот это:
Код
$row['anons'] = substr($row['anons'], 0, 150);


У вас должно получиться что-то вроде этого:
Код
$row['anons'] = substr($row['anons'], 0, 150);
$this->htmleditor($row['anons']);
Спасибо сказали: Sex Junkie (Sex Junkie)

Sex Junkie (Sex Junkie) 15 января 2016 г.

так вообще всё ломается(

error.jpg

код у меня такой:

Код
echo '<div class="response_text"><span class="arr">&laquo;</span>';
$row['anons'] = substr($row['anons'], 0, 150);
$this->htmleditor($row['anons']);
echo '<span class="arr">&raquo;</span>';
echo '<br><br><a href="'.BASE_PATH_HREF.$row["link"].'">Подробнее</a></div>';

Sex Junkie (Sex Junkie) 15 января 2016 г.

вру, заработало всё
но теперь проблема такая
в некоторых постах появилось "�" в конце
да и слова некоторые очень не красиво по середине обрезаются((
не поможете, что делать в этой ситуации?

Dmitry (afonnikov10) 23515 января 2016 г., редакция 15 января 2016 г.

Я прям ждал когда в конце этот вопрос всплывёт (поспорить нескем было...)
из 100 случаев - этим заканчивается 95
Спасибо сказали: Sex Junkie (Sex Junkie)

Sex Junkie (Sex Junkie) 15 января 2016 г.

ну и возможно ли как-то решить эту проблему?

Dmitry (afonnikov10) 23515 января 2016 г.

Как варианты:
1) Парсишь текст по словам и выводишь первые пять или семь (но Вас не устроит где то не законченная тема или мысль или слово не подходящее... )
2) Затемнять градиентом последнее слово или два (как бы сливающееся с фоном постепенно к концу)
3) ... В Каждом есть свои недостатки....

Виталий (DIAFAN.CMS) 69615 января 2016 г.

Конечно, ведь substr() - это РНРшная функция, она рубит посимвольно. А в тексте в UTF-8 каждая буква - это несколько сивмолов, типа F182. Если рубануть букву посередине, будет F18, а это в юникоде может быть какая-нибудь хрень арабская, или вообще несуществующий код символа, и тогда вопросик в ромбике обеспечен.

У нас есть наша функция short_text, корректно сокращающая юникод:

http://www.diafan.ru/dokument/full-manual/developers/api/core/

Код
echo $this->diafan->short_text('<p>Не только стильный, но и достаточно удобный в эксплуатации. Возможна навеска дополнительного снаряжения снаружи. </p>', 400);


Т.е.
Код
$this->diafan->short_text($this->htmleditor($row['anons']),150);
Спасибо сказали: Sex Junkie (Sex Junkie)

Виталий (DIAFAN.CMS) 69615 января 2016 г.

Цитата
string short_text (string $text, [integer $length = 80]) – не просто сокращает текст, а еще автоматом длописывает в конец три точки: "..."

Doket (kolganov_ev) 1115 января 2016 г.

Я могу ошибаться, но мне кажется вы сначала вывели строку, потом обрезали, а необходимо сначала обрезать, после чего вывести...

Виталий (DIAFAN.CMS) 69615 января 2016 г.

Ну да, я обернул наоброт

Doket (kolganov_ev) 1115 января 2016 г.

Конечно поможем!
Я вам предложу целых 3 вида возможного решения проблемы.

1. Для тех кто не в теме, описываю все по порядку:
Код
// Проверяе длинну строки и рзрешаем обрезать строку только если длянна привышает 150 символов
if (mb_strlen($row['anons']) > 150) {

$row['anons'] = substr($row['anons'], 0, 150); // Обрезаем до 150 смвола
$strripos = strripos($row['anons'], ' '); // Определяем местопложение последнего пробела (число)
$row['anons'] = substr($row['anons'], 0, $strripos); // Обрезаем до последнего пробела
$row['anons'] .= '...'; // Прикрепляем к строке троетчие, чтобы предложение не выглядело оборвнным
}
$this->htmleditor($row['anons']);


2. Для тех кто шарит в PHP:
Код
if (mb_strlen($row['anons']) > 150) {
$row['anons'] = substr($row['anons'], 0, strripos(substr($row['anons'], 0, 150), ' ')) . '...';
}
$this->htmleditor($row['anons']);


3. Универсальный метод для гуру (сарказм):
Код
$row['anons'] = (mb_strlen($row['anons']) > 150) ? substr($row['anons'], 0, strripos(substr($row['anons'], 0, 150), ' ')) . '...' : $row['anons'];
$this->htmleditor($row['anons']);


Пользуйтесь любым удобным для вас методом обрезания строки и не каких проблем не будет.
Спасибо сказали: Sex Junkie (Sex Junkie), Михаил (ZzzBep)

Sex Junkie (Sex Junkie) 15 января 2016 г.

Огромное спасибо! Всё заработало именно так, как и нужно было!!!

Doket (kolganov_ev) 1115 января 2016 г.

Резюмируем.
Для обрезания строки до 150 символов нам поможет:

1. Рабочий вариант встроенный в DIAFAN.CMS (рекомендуется использовать):
Документация
Код
$this->htmleditor($this->diafan->short_text($row['anons'],150));


2. Вариант на чистом PHP (можно просто запомнить для других проектов):
Код
$row['anons'] = (mb_strlen($row['anons']) > 150) ? substr($row['anons'], 0, strripos(substr($row['anons'], 0, 150), ' ')) . '...' : $row['anons'];
$this->htmleditor($row['anons']);


В обоих вариантах в конце строки добавиться троеточие"..."
Спасибо сказали: Михаил (ZzzBep), Sex Junkie (Sex Junkie)

Sex Junkie (Sex Junkie) 15 января 2016 г.

Всем огромное спасибо за оказанную помощь!