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

#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?
Буду очень благодарен за помощь.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.