Умная обрезка заголовков по словам и символам в mod_articles_latest

  • 8 Ответов
  • 406 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

R31rus

  • *****
  • 525
  • + 2 -
  • «Нас Reboot, а мы крепчаем»
Обрезаю текст в заголовках модуля mod_articles_latest, но не очень красиво получается. Данным образом:

Код
<?php echo JString::substr($item->title, 0, 30).' ...'; ?>

Результат:

Код
Умная обрезка заголовков по сло...


В Google нашел много решений, но возникают ошибки в реализации... Как можно обрезать $item->title именно по словам и символам, чтоб не урезало наполовину последнее слово и был приемлимый вид? Кто сталкивался просьба напишите.


« Последнее редактирование: 31.05.2016, 20:03:51 от R31rus »
Зарплата - это еще одно доказательство того, что работать на других
невыгодно.


*

Missile

  • *****
  • 791
  • + 79 -
По-моему, обрезать по символам более правильно - ведь Вы хотите добиться, чтобы у Вас заголовок не переносился на другую строку, или что-то ещё? Проверьте себя предложением "Одиннадцатиклассница из Петропавловска-Камчатского синтезировала гидразинокарбонилметилбромфенилдигидробенздиазепин".

*

draff

  • *******
  • 2739
  • + 169 -
  • step by step
Код
 <?php echo JHtml::_('string.truncate', strip_tags($item->title), 53); ?>

*

SDKiller

  • ******
  • 2734
  • + 320 -
  • ...ergo sum

Смотрите, дождётесь что форум в реестр занесут

Цитировать
Как можно обрезать $item->title именно по словам и символам

Так по словам или символам? Если по символам, то substr, а если по словам, тогда пройдитесь регуляркой по word-баундари:

Код: php
$string = 'строка utf-8';
$offset = 30;
$string = preg_replace('#(?<=.{' . $offset . '})(\S+).*#u', '$string = 'строка utf-8';
$offset = 30;
$string = preg_replace('#(?<=.{' . $offset . '})(\S+).*#u', '$1', $string);', $string);
« Последнее редактирование: 31.05.2016, 14:57:49 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

Если надо в меньшую сторону, считаете strlen-ом результат, а затем убираете последнее слово, если строка превышает заданное число символов:
Код: php
$string = 'utf-8 строка обрезанная из примера выше';

if(mb_strlen($string) > 30)
{
    $string = preg_replace('#\s*\S+$#u', '', $string);
}
« Последнее редактирование: 31.05.2016, 14:57:23 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

R31rus

  • *****
  • 525
  • + 2 -
  • «Нас Reboot, а мы крепчаем»
Код
 <?php echo JHtml::_('string.truncate', strip_tags($item->title), 53); ?>

Это то что нужно! Спасибо
Зарплата - это еще одно доказательство того, что работать на других
невыгодно.

*

R31rus

  • *****
  • 525
  • + 2 -
  • «Нас Reboot, а мы крепчаем»
Так по словам или символам?

Сразу по словам и символам Филипп)) Тоесть не превышая указанное кол-во символов и не обрезая последнее слово напополам.
Зарплата - это еще одно доказательство того, что работать на других
невыгодно.