Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: три строчки.  (Прочитано 15518 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Chuda
Гость
« : 22-01-2007 06:27 » 

есть супермегазадача.
лента новостей.
дизайнер утверждает, что в ленте должно показываться исключительно по три строчки из каждой новости, а остальное по кнопке "далее".
с точки зрения скрипта одна строка - это многабукфф(неважно сколько), которые заканчиваются на \n. Если вырезать по количеству символов - тоже не вариант, ведь заранее не известно, сколько получится в вырезанном переносов. Более того - надо, чтоб эти три строчки выглядели прямоугольно, т.е. text-align: justify;
В общем, я пока не совсем понимяу, как такое сделать.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-01-2007 06:35 » 

Идея на вскидку: определить шрифт в писелях и max-height. Только, помнится, у IE6 и раньше max-height не поддерживается.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #2 : 22-01-2007 06:39 » 

хм...
да если так, то и просто height можно. или поиграться со свойством clip.
ты примерно это имел в виду?
мне кажется, что действовать оно должно в большинстве случаев категорически правильно, но безнадёжно ломаться в тот момент, когда пользователь поменяет размер шрифта у себя.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 22-01-2007 07:29 » 

У этого способа один существенный недотаток: обрезание произодет не обязательно по границе строки - может получиться некрасиво.

Кстати, дизайнер не учел, что страница может иметь разную ширину - точно три строки никогда не будет. Или нужно ограничивать размер блоков.


Продублирую аську для остальных.

Вариант 2:
Задать каждому символу вес (нечто вроде ширины) и набирать в результирующую строку не более чем ...
Недостаток: в разных браузерав все равно будет выглядеть по разному.

Вариант 3:
Чтобы ширину символов можно было измерять с точностью до пикселей, реализовать их в виде набора картинок.
Недостаток: массивно и не очень красиво в процессе загрузки.

Вариант 4:
Блок текста заменить картинкой.

Вариант 0:
Дизайнер не прав.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 22-01-2007 07:37 » 

Chuda,
Твой вариант (или вариант скрипта)
три строчки - это три строчки, а после этого кнопка далее  (где здесь проблема?)
Или
три строчки в блоке - независмо сколько строчек в ленте (где здесь проблема?). но здесь может произойти обрезание в самый неприятный момент (но это можно обойти - обрезать по словам)

или есть какие-то ограничения на размер блока
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 22-01-2007 08:07 » 

Sla, ты никогда не пробовал добить одинакового отображения страницы в разных браузерах?
В данном случае задача еще жестче поставлена: в блоке ровно три строки. Как ты на сервере поймешь, что в браузере отобразилось именно три строки, а не две или четыре?
Разница может быть:
1. один и тот же шрифт может отобразится по разному.
2. ширина блока будет различна.
3. человек, который будет вводить текст, наверняка будет не дизайнером и не будет выравнивать строчки руками - программа должна рачитать и обрезать как надо.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 22-01-2007 08:19 » 

RXL, пробовал - ничего не получилось Жаль
1. объяснить дизайнеру, что он не прав
2. заточить под 3 браузера (ие,фф,оперу)
Offtopic:

3. определить тип браузера, если ИЕ
большими букфами вывести вверху
Вы пользуетесь глючным браузером
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 22-01-2007 08:27 » 

Sla, IE есть на двух платформах, Mozilla (+ FF) и Opera - на большем числе. Еще есть Safari (Mac), Konqueror и еще несколько. А сколько есть версий... Все варианты учесть просто нельзя.
Дизайнер должен пойти на компромис!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #8 : 22-01-2007 08:32 » 

IE есть на двух платформах
разве??? я тестирую в ИЕ на четырёх...
Записан
Chuda
Гость
« Ответ #9 : 22-01-2007 08:34 » 

в общем, путём проб и ошибок наваялась супермегафункция.
надеюсь за сегодня её привести в порядок.
Но в общем, уже как-то работает.
Код:
function TextCrop($text,$maxnumstr,$strmaxlen){
/* обрезает текст $text до $maxnumstr строк
в каждой из которых не более $strmaxlen символов
*/
$numstr = 0;
$stringset = explode("\n",$text);
while($numstr < $maxnumstr){
$substrset = explode(
"\n",iconv("windows-1251","utf-8",wordwrap(
iconv(
"utf-8","windows-1251", $stringset[$numstr]
), $strmaxlen
)
)
);
$subwhile = 0;
while($numstr < $maxnumstr && $subwhile < count($substrset)){
$result .= $substrset[$subwhile]." ";
$numstr++;
$subwhile++;
}
}

return $result;
}
Записан
Chuda
Гость
« Ответ #10 : 22-01-2007 08:42 » 

да, кстати, если кому-то показалось странным, что текст переводится из утф-8 в ср1251, а потом обратно:
в ТЗ сказано: делать в утф-8.
пхп же не умеет работать с утф-8, длину строк считает по количеству байт в оной.
единственный язык сайта - русский, так что подобное издевательство над строкой допустимо.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 22-01-2007 09:23 » 

По части utf8: http://www.php.net/manual/ru/ref.mbstring.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
tishka17
Участник

ru
Offline Offline
Не разбрасывайте мусор


« Ответ #12 : 22-01-2007 09:24 » 

у меня возникла простейшая идея на html'е:

Код:
<pre> строка 1
строка 2
строка 3
</pre> кнопка далее...
« Последнее редактирование: 16-12-2007 14:35 от Алексей1153++ » Записан

//1001101010110100010100110011101111000010110111010101110011
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 22-01-2007 09:30 » 

немного ОФФ: насчет страница может быть любой ширины - а может дизайнер ее динамичной сделал?
а вообще я читал по поводу этого статью, что делают обрезку текста и "Далее" - в общем там к мнению пришли что это самый ужасный вариант... может как тут сделать ему предложить? типо пред-анонс того, что будет написано в новости...и помойму для посетителей будет понятнее
сори за офф небольшой
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 22-01-2007 09:35 » new

tishka17, конечно - пусть дизайнер переходит на моноширинные шрифты - нечего баловать! Жжешь
Этот метот ничем не лучше - ширина символа остается величиной неопределенной.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines