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

Определенное количество символов в анонсе

  • 04 июля 2013 г.
  • Подскажите, как выводить в блоке статьи, но так чтобы анонс обрезался до указанного количества символов, только начинаю работать с данной CMS и может не все знаю, к примеру в смарти это реализуется с помощью truncate, где можно указать какое количество символов выводить. Это нужно для того, чтобы красиво выглядели анонсы в блоках на главной, а в самой категории они были уже более полные, по типу блога.
    • 04 июля 2013 г.
    • Не красиво выглядят анонсы обрезанные по количеству символов!
      Нужно, хотя бы, после оговоренного количества символов, найти конец слова...
      • 04 июля 2013 г.
      • согласен, но хотя бы жестко обрезать, так как например на главной если писать по одному короткому предложению, то это на главной нормально, но в самой категории как то кастрированно выглядит, и обратная загвоздка, если писать нормальный анонс, то при выводе в блок на главной получаются полотна текста.
        • 04 июля 2013 г.
        • Для очень краткого изложения сути служит заголовок!
          Может на главной выводить только заголовки?
          • 04 июля 2013 г. , редакция: 04 июля 2013 г.
          • Нет совсем согласен, заголовок в полной мере не всегда отображает суть, как одно-два предложения. Но в большей степени из-за дизайна такой вопрос, так как статьи выводятся по три по горизонтали, и представьте если у двух будет короткий анонс, а у третьей будет длинный, то под первыми двумя будет пустота. В идеале я бы в тег шаблоны вывел еще и параметр типа text-limit="xx" ну как то так.
    • 04 июля 2013 г.
    • $string = $row['anons'];
      $string = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1));
      echo $string;


      Попробуй так
      • 04 июля 2013 г.
      • Ян, подскажите пожалуйста это куда вставить, просто только начал знакомиться с системой, не так быстро ориентируюсь.
        • 04 июля 2013 г.
        • название_модуля/views/название_модуля.view.list

          посмотри где выводится анонс, будет примерно такая строка
          $this->htmleditor($row['anons']);
          вместо неё вставь вот этот код попробуй

          $string = $row['anons'];
          $string = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1));
          echo $string;

          • 05 июля 2013 г.
          • Спасибо, сохранил, обязательно пригодится

            Вопрос, "21" - это количество слов или символов?
            • 05 июля 2013 г.
            • да, количество символов. Уже испробовал все отлично работает, то, что доктор прописал
              • 05 июля 2013 г.
              • Ага и ещё можно так.
                .div {
                overflow:hidden;
                text-overflow: "202620b";
                }
                или так
                div {
                width: 50%;
                position: absolute;
                clip: rect(auto, auto, auto, auto); /* rect(вверх, вправо, вниз, влево); при auto сторона остаётся без изменений, но вылезающий текст обрезается */
                }
              • 05 июля 2013 г.
              • Ну и собственно если в нутрь второго блока поместить контейнер ширины равной области обрезания то обрезание будет происходить по концу слова просто и замечательно и без PHP и знаний CMS :)
  • 07 июля 2013 г.
  • Спасибо! тоже сохранил себе, недавно такое требовалось, но обошлись заголовками, а это не очень удобно контент-админу...
  • 04 декабря 2013 г.
  • В версии 5.3 есть такой глюк. Ссылка на все новости приобретает следующий вид <a href="site.ru/<">Посмотреть все новости в категории "<"</a> Хотя должно быть просто "Все новости". Кто знает как победить?
    • 04 декабря 2013 г. , редакция: 04 декабря 2013 г.
    • если нету второго языка для сайта, в шаблоне пропишите жётско текст.

      'Посмотреть все новости в категории'.$result["name"];
      • 22 декабря 2013 г.
      • Спасибо Илья. А если же есть второй язык, как быть? Подскажите реализацию?
        • 22 декабря 2013 г.
        • непонятно почему у вас первоначальная конструкция не работает, которая в диафане, вы даже код не привели.
          который по вашему мнению не работает.

          попробуйте отказаться от быстрого редактирования:
          $this->diafan->_('Посмотреть все новости в категории «%s»', false, $result["name"]);

          • 22 декабря 2013 г. , редакция: 22 декабря 2013 г.
          • Редактриую файл news.view.show_block.php
            Вместо вывода анонса
            Код
            $this->htmleditor($row['anons']);
            вставляю следующий код
            Код
            $string = $row['anons'];
            $result = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1));
            echo $result;
            if($result!=$string)echo'...';
            В итоге получается http://d.pr/i/eGSO
            От быстрого редактирования я всегда отказываюсь)
          • 22 декабря 2013 г.
          • Сам себе отвечаю :) заработал следующий код
            Код
            $string = $row['anons'];
            $string = implode(array_slice(explode('<br>',wordwrap($string,200,'...<br>',false)),0,1));
            echo $string;
            Если символов больше 200, то обрежется и вконце будет троеточие, если символов меньше 200 то предложение закончится точкой.
            Просто интересно, почему предыдущий вариант вызывал странное действие с ссылкой "Все новости".
            • 23 декабря 2013 г. , редакция: 23 декабря 2013 г.
            • мдяяяя... так как вы записали в результат($result), ваш анонс, в итоге получилась строка, а потом к строке вы пытаетесь обратиться как к ассоциативному массиву. ))...кстати переменная тут вообще не нужна....

              И я отвечал не на тему, а на вопрос, а так, уже придумана функция, и заглянув в документацию, вы бы увидели верный код. Короткий текст уже придуман в диафане, и велосипед изобретать не нужно, не знаю зачем вам понадобился.

              собственно сама функция.

              ====

              string short_text (string $text, [integer $length = 80]) – сокращает текст.

              ====
              access: public
              string $text: исходный текст
              integer $length: количество символов для сокращения
              \\\\\\\
              Пример
              /* modules/faq/faq.model.php
              В функции get_elements($result) используется для формирования вывода вопроса и ответа на него.
              */
              $row["anons"] = $this->diafan->short_text($row["anons"], 160);
              $row["text"] = ! empty($row["text"]) ? $this->diafan->short_text($row["text"], 160) : '';

              ----
              • 23 декабря 2013 г.
              • Просто я не программист и в php вообще не в зуб ногой :) Просто нужно было для оформления сократить количество символов.

Новости

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

Форум