Как обрезать заголовок?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 10 октября 2014 в 13:51
Здравствуйте!
Подскажите пожалуйста, как ограничить длину заголовка при выводе в списке? (Версия 2.1.1).
То есть, нужна возможность устанавливать количество символов. Где искать? В админке вроде не нашел, в базе смотреть, или где-то в коде можно?
Всем спасибо за ответ.
#2 11 октября 2014 в 14:44
Собственно вопрос относится не только к заголовкам, но и к любому другому полю, которое выводится в списке.
Смысл в том, что пользователь, при создании объявления, может писать очень длинный заголовок, или заполнять другое текстовое поле, которые затем в списке отражаются очень не красиво, либо не помещаются в определенный блок.
На многих сайтах это решается обрезанием текста свыше определенного количества символов.
При просмотре записи, все отражается в полном объеме.
Надеюсь объяснил более-менее понятно.
#3 11 октября 2014 в 16:11
Поскольку в двойке используются php шаблон, то и обрезать придется средствами пхп в файлах шаблона. Например, пусть заголовок хранится в переменной $title, тогда где то в шаблоне должен быть вывод. Как то так:
  1. <?php echo $title;?>
заменяем на:
  1. <?php echo mb_substr($title, 0, 100);?>
где, второй параметр(0) обозначает начальную позицию, ноль — с начала строки — наверно, лучше не трогать.
третий параметр(100) — какую длину оставить, 100 символов — тут ставим сколько нужно.
Обрезание пройдет строго по длине, без учета слов. То есть слово может обрезаться по середине.
Если нужно, чтобы обрезалось с учетом слов, можно так
  1.  
  2. <?php
  3. $title = mb_substr($title, 0, 100);
  4. $position = mb_strrpos($title, ' ');
  5. echo mb_substr($title, 0, $position);
  6. ?>
  7.  
Примерно так.
#4 11 октября 2014 в 16:28
Марат, спасибо. Теперь осталось выяснить какой файл отвечает за вывод контента списком. Не могу найти пока…
#5 11 октября 2014 в 17:11

Теперь осталось выяснить какой файл отвечает за вывод контента списком

Alexprofi
Скорее всего это файл /templates/default/content/default_list.tpl.php. Строка 66:
  1. <a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>"><?php echo htmlspecialchars($item[$field['name']]); ?></a>
заменить на:
  1. <a href="<?php echo href_to($ctype['name'], $item['slug'].'.html'); ?>"><?php
  2. $title = htmlspecialchars($item[$field['name']]);
  3. $title = mb_substr($title, 0, 100);
  4. $position = mb_strrpos($title, ' ');
  5. $position = ( $position ? $position : mb_strlen($title));
  6. echo mb_substr($title, 0, $position);
  7. ?></a>
Если я вас правильно понял. Будет обрезать по словам. Немного подправил код, так будет правильнее.
#6 11 октября 2014 в 23:22
Марат, спасибо, все работает! Пробовал менять код и в другом файле отвечающем за стиль списка — default_list_tiles.tpl.php, работает.
Но как говорится, аппетит приходит во время еды. Пока все делал, появился другой вопрос. Как сделать то же самое, только не с заголовком (title), а с другим полем, которое создается админом и выводится в списке, например adress?
Буду очень благодарен за помощь.
#7 14 сентября 2024 в 23:19

Извините! Может кто знает как обрезать заголовок в версии 2.16.3? шаблон Modern

#8 15 сентября 2024 в 07:51

 klumbaklumba, нужны подробности. Обрезать где? До какого состояния?

#9 15 сентября 2024 в 18:24

 Zau4man, обрезать в тип поля Заголовок, по количеству символов.

#10 15 сентября 2024 в 20:09

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

В движке есть удобная функция для обрезки string_short github.com/instantsoft/icms2/blob/bb96c18544148da1e58293812ded78890784160a/system/libs/strings.helper.php#L705C10-L705C22

Если передать ей строку, и количество символов для обрезки, она вернет обрезанную строку.

Пример использования

  1. string_short($item[$field['name']], 10)

Рассмотрим обрезку заголовка на примере раздела новости. После установки движка для вывода новостей используется Журнальный стиль вывода

Изображение

Найдем этот файл templates\modern\content\default_list_featured.tpl.php

И отредактируем. Заменим в нем в двух местах

  1. <?php html($item[$field['name']]); ?>

на

  1. <?php html(string_short($item[$field['name']], 10)); ?>

Это укоротит заголовки до 10 символов в списке новостей

Изображение

По аналогии можно укоротить и в виджетах, их шаблоны лежат в папке templates\modern\controllers\content\widgets\list\list.tpl.php

И в самих записях, заменив в файле templates\modern\content\default_item.tpl.php

  1. <?php html($item['title']); ?>

на

  1. <?php html(string_short($item['title'], 10)); ?>

Изображение

#11 15 сентября 2024 в 20:54

Спасибо!!! Всё получилось.

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.