imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 06.11.2005, 01:53     # 1
Прохожий_
Newbie
 
Регистрация: 24.04.2005
Сообщения: 23

Прохожий_ Путь к славе только начался
Урезание названия продукта по целым словам, не по кол-ву символов

Приветствую.
Я сделал tab delimited feed (тестовой файл, где вся инфа разделена табуляцией, предназначена для сабмита списка товара)

Так вот, в фиде название должно быть 55 символов.
Вот часть кода:

Код:
$this->data[$data['products_id']] = array ( 
'name' => substr($this->strip($data['products_name']), 0, 55),
Да, имя обрезается на 55 символов, но в основном обрезается по середине какого либо слова.

Хочу спросить спецов, каким образом обрезать на 55 символов или меньше, что бы слово, если оно попадает под урезание, обрезалось полностью?

Спасибо заранее.
Прохожий_ вне форума  
Старый 06.11.2005, 02:04     # 2
SergoZD
::VIP::
 
Регистрация: 19.10.2003
Адрес: Питер
Пол: Male
Сообщения: 1 467

SergoZD Простой бог
SergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой богSergoZD Простой бог
Прохожий_
Делай проверку, если длина больше 55, то ищи последний пробел, лежащий в пределах от первого символа до 55-ого и выкидывай всё что после него (включая его), если там пробелов не существует, то обрезай по 55 символу.
PHP код:
if (strrpos(substr($this->strip($data['products_name']), 055)), " ")
{
$this->data[$data['products_id']] = array ( 
'name' => substr($this->strip($data['products_name']), 0strrpos(substr($this->strip($data['products_name']), 055))), .......
}else{
$this->data[$data['products_id']] = array ( 
'name' => substr($this->strip($data['products_name']), 055), .......

Что-то типа того. Правда слишком громоздко как-то, но суть где-то такая.
SergoZD вне форума  
Старый 06.11.2005, 02:26     # 3
Прохожий_
Newbie
 
Регистрация: 24.04.2005
Сообщения: 23

Прохожий_ Путь к славе только начался
Sergo, спасибо.

Я сделал так:
PHP код:
'name' => preg_replace("~^(.{1,55})\b.*~""\\1"$data['products_name']), 
Прохожий_ вне форума  
Старый 08.11.2005, 19:47     # 4
Goryn
::VIP::
 
Аватар для Goryn
 
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633

Goryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собой
Вариант для Perl

Код:
my $lenm=55; # Максимальная длина текста
my $namefirst="Это первоначальное название продукта, которое нужно урезать";
my $nameshort=""; # Здесь будет урезанное имя
if (length($namefirst)<=$lenm ) {
 $nameshort=$namefirst;
}
else {
 $ml=substr($namefirst,0,$lenm);
 $ml=~ s/^(.+)(\s)(\S*)$/$1$2$3/;
 $nameshort=$1;
}
Код взят из древнего скрипта. Ща смотрю и мне кажется, что должно сработать и

$nameshort=substr($namefirst,0,$lenm);
$nameshort=~ s/^(.+)(\s)(\S*)$/$1/;
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы!
Goryn вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:54.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.