Вход • Регистрация

Как ограничить количество выводимых символов в шаблоне списка вопросов?

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

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

    помогите пожалуйста!
    cms мне не знакома((
    заранее благодарю за помощь!
  • 14 января 2016 г.
  • Код
    substr($this->htmleditor($row['anons']), 0, 150);


    Функция substr
    • 14 января 2016 г.
    • что-то не срабатывает(
      • 14 января 2016 г.
      • Вставьте перед строкой $this->htmleditor - вот это:
        Код
        $row['anons'] = substr($row['anons'], 0, 150);


        У вас должно получиться что-то вроде этого:
        Код
        $row['anons'] = substr($row['anons'], 0, 150);
        $this->htmleditor($row['anons']);
        • 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>';
          • 15 января 2016 г.
          • вру, заработало всё
            но теперь проблема такая
            в некоторых постах появилось "�" в конце
            да и слова некоторые очень не красиво по середине обрезаются((
            не поможете, что делать в этой ситуации?
            • 15 января 2016 г. , редакция: 15 января 2016 г.
            • Я прям ждал когда в конце этот вопрос всплывёт (поспорить нескем было...)
              из 100 случаев - этим заканчивается 95
              • 15 января 2016 г.
              • ну и возможно ли как-то решить эту проблему?
              • 15 января 2016 г.
              • Как варианты:
                1) Парсишь текст по словам и выводишь первые пять или семь (но Вас не устроит где то не законченная тема или мысль или слово не подходящее... )
                2) Затемнять градиентом последнее слово или два (как бы сливающееся с фоном постепенно к концу)
                3) ... В Каждом есть свои недостатки....
            • 15 января 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);
              • 15 января 2016 г.
              • Цитата
                string short_text (string $text, [integer $length = 80]) – не просто сокращает текст, а еще автоматом длописывает в конец три точки: "..."
              • 15 января 2016 г.
              • Я могу ошибаться, но мне кажется вы сначала вывели строку, потом обрезали, а необходимо сначала обрезать, после чего вывести...
            • 15 января 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']);


              Пользуйтесь любым удобным для вас методом обрезания строки и не каких проблем не будет.
              • 15 января 2016 г.
              • Огромное спасибо! Всё заработало именно так, как и нужно было!!!
  • 15 января 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']);


    В обоих вариантах в конце строки добавиться троеточие"..."

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум