Обрезка текста?

#16 13 декабря 2014 в 22:14
  1. <a href="<?php echo $url; ?>"><?php if(strlen($item['title'])> 60){ $item['title'] = mb_substr($item['title'], 0, 60,"UTF-8") . '...'; } html($item['title']); ?></a>
сделал как вы сказали добавил кавычки толку нет((
#17 13 декабря 2014 в 22:48
так должно работать без ошибок:

  1. <a href="<?php echo $url; ?>"><?php if(mb_strlen($item['title'],'UTF-8')> 60){ $item['title'] = mb_substr($item['title'], 0, 60,"UTF-8") . '...'; } html($item['title']); ?></a>
#18 13 декабря 2014 в 22:55
SE7EN, попробуйте еще:
  1. <?php if( mb_strlen($item['title'], 'UTF-8') > 60 ){ $item['title'] = mb_substr($item['title'], 0, 60, 'UTF-8') . '...'; } ?>
  2. <a href="<?php echo $url; ?>"><?php html($item['title']); ?></a>
или вот так:
  1. <?php if( mb_strlen($item['title']) > 60 ){ $item['title'] = mb_substr($item['title'], 0, 60) . '...'; } ?>
  2. <a href="<?php echo $url; ?>"><?php html($item['title']); ?></a>
т.е. с указанием кодировки во всех случаях и без указания...

Еще как вариант записывать результат преобразования в другую переменную, т.е. не трогая $item['title'], а затем уже эту новую переменную выводить в ссылке
#19 13 декабря 2014 в 23:03
Надо с 'UTF-8' делать во всех вхождениях! вот инфу нашел:
  1. echo mb_strlen('ффф'); //6
  2. echo mb_strlen('fff'); //3
Это потому что русские символы занимают 2 байта места!!!
  1. echo mb_strlen('ффф','UTF-8'); //3
  2. echo mb_strlen('fff','UTF-8'); //3
а вот так все четко выводится =)
#20 13 декабря 2014 в 23:07
php на 5.4 переключите и пройдёт без mb_
#21 13 декабря 2014 в 23:07

Надо с 'UTF-8' делать во всех вхождениях!

Val
для русских символов!)
я тоже не сразу понял когда SE7EN написал:

Так обрезка не срабатывает: выводится полностью название новости и три точки в конце

SE7EN

А оно работало! просто конструкция strlen($item['title'])> 60 не правильно считает русские символы…
#22 13 декабря 2014 в 23:09

php на 5.4 переключите и пройдёт без mb_

lokanaft
на оперсервере php на 5.4 и конструкция strlen($item['title'])> 60 считает не правильно — только что проверил...

а mb_strlen($item['title'],'UTF-8')> 60 правильно
#23 14 декабря 2014 в 01:18
ВСЕМ ОГРОМНОЕ СПАСИБО!!!
ВРОДЕ ВСЁ ЗАРАБОТАЛО, ПО КРАЙНЕЙ МЕРЕ МЕНЯ ВСЁ УСТРАИВАЕТ.
Для title оставим так:
  1.  
  2. <?php if( mb_strlen($item['title'], 'UTF-8') > 45 ){ $item['title'] = mb_substr($item['title'], 0, 45, 'UTF-8') . '...'; } ?>
  3. <a href="<?php echo $url; ?>">
  4. <?php html($item['title']); ?>
  5. </a>
  6.  
Для teaser так:
  1.  
  2. <?php if( mb_strlen($item[$teaser_field], 'UTF-8') > 55 ){ $item[$teaser_field] = mb_substr($item[$teaser_field], 0, 55, 'UTF-8') . '...'; } echo ($item[$teaser_field]);?>
  3.  
тему закрывать не буду может у кого-то тоже вопросы появятся или предложения.
#24 14 декабря 2014 в 18:20
притащил сегодня домой знакомого пхпэшника, он сделал возможность указывать обрезку title и teaser в админке в настройках для каждого виджета.
попробую собрать в кучу и выложу тут.
выглядит вот так (действует только! на виджеты из папки "list")


вот так на сайте получается

скрин из админки и с сайта это разные виджеты, это я просто для наглядности
#25 14 декабря 2014 в 18:32

считает не правильно — только что проверил

reload
Но ведь год назад работал, а сейчас и вправду — нет...

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