Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Черезстрочная раскраска таблиц. 
:(
    Опции темы
ksnk
Дата 12.6.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Есть таблица абстрактного вида, строчки которой нужно раскрасить на четные-нечетные. Таблица хранится и формируется из базы, так что это нисколько не парсинг, а именно генерация. Задача усложняется тем, что некоторые строки могут быть с colspan'ами/rowspan'ами. Здравый смысл, говорит мне, что каждый столбик придется таким образом раскрашивать отдельно, пробежавшись по всем им сверху-вниз (благо бежать все равно придется при выводе), однако при этом желательно избегать продолжительной "шахматной раскраски" таблицы.
Моя лень советует мне сначала спросить совета у форума  smile Вдруг кто-то уже сталкивался с такой задачей и как-нибудь оригинально ее решил. 
Кода - не надо, разве что на PHP звучит понятнее, чем на русском... идей, мыслей, пинков в нужном направлении вполне достаточно...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gcc
Дата 12.6.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Цитата(ksnk @ 12.6.2009,  00:10)
некоторые строки могут быть с colspan'ами/rowspan'ами. 

то есть таблица не плоская? какая она, приведи пример?

посмоти еще тут на javascript 
http://forum.vingrad.ru/forum/topic-261770.html
PM WWW ICQ Skype GTalk Jabber   Вверх
ksnk
Дата 12.6.2009, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(gcc @  12.6.2009,  00:18 Найти цитируемый пост)
то есть таблица не плоская? какая она, приведи пример?

А какая тогда? На мониторе оно все плоское  smile 

Вот пример неудачной раскраски user posted image


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
s0lman
Дата 12.6.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



ksnk, в самом деле, не проще ли это сделать js? 
В статьях по JQuery что-то подобное было первым примером...


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
rMaveric
Дата 12.6.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



ksnk, Судя по приведенному отрывку у тебя происходит теление именно на категории в строках. И в категории может находится несколько элементов являющихся именно строками.

С этой точки зрения рекомендую тебе использовать следующие виды раскраски


-------------------------------------------------------------------------------------------------
раздел (цвет А)     | строка чет (Цвет Б)
                    | строка нечет (цыет В)
                    | строка чет (цвет Б)
-------------------------------------------------------------------------------------------------
раздел (цвет А)     | строка нечет (Цвет В)
-------------------------------------------------------------------------------------------------
раздел (цвет А)     | строка чет (Цвет Б)


Таким образом для раскрашивания тебе необходимо давать стили не строке, а ячейкам не входящим в столбец раздела. и будет смотрется как надо.

К примеру разделы все белые, а строки уже бледно розовыми и бледноголубыми smile 


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
ksnk
Дата 12.6.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



rMaveric, Проблема в решении абстрактной задачи по раскраске абстрактной таблицы. В этом решении допускаются только 2 цвета и никакого разделения на "разделы", к сожалению нет. Rowspan'ы могут появится не только в первом столбце, но и во всех остальных. 
Нужно не допускать одинаковой окраски в 3-х и более сверху/снизу-соседних ячейках.

В моем примере - каждая нечетная строка получала свой цвет, от того ячейки с четным rowspan'ом получались одного цвета.

Пока остановился на таком решении:
-- каждая нечетная строка (элемент TR) получает дополнительный класс "odd" 
-- каждая четная строка (элемент TR) получает дополнительный класс "even" , как у меня уже и было.
два класса от того, что потенциально бывают, наверное, еще и просто строки таблицы, которые просто нарисованы в шаблоне и окрашены по другому... Какие-нибудь характерные футеры или хидеры...

Для каждой ячейки, обладающей четным rowspan, следующая за ней ячейка получит собственный класс 'invert'. вот, собственно и все. 

CSS, окрашивающий таблицу, получился таким
Код

.table tr.even td, .table tr.odd td.invert{
    background-color:rgb(247,249,251);
}
.table tr.odd td, .table tr.even td.invert{
    background-color:white;
}

Ну и пример раскрашенной таблицы 
user posted image

s0lman, На JavaScript'е этого делать не хочется, все равно уже окрашивается в PHP smile Да и алгоритм окраски тоже пришлось бы примерно такой-же мастерить...

Это сообщение отредактировал(а) ksnk - 12.6.2009, 12:58


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
gcc
Дата 12.6.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



ksnk,  а какая структура данных, ну логично будет записывать куда-то тот элмент последний который ты присвоил в предыдущий раз.... $plus, п отмо счетчик велить, получиться на оборот


Код


$грузоперевозки2 = array();

   foreach ($грузоперевозки as $k => $v) {

# $грузоперевозки2 = ( {elem=>реал}, {element=>old})

if ($plus ==1 &&  $i < 1) {
$i=$+1;
}

    if  (++$i % 2) {
         $грузоперевозки2 = array ( {elem=>$v}, {element=>old});
    }else {
         $грузоперевозки2 = array ( {elem=>$v}, {element=>new});
       $plus=1;
   }
  
}



PM WWW ICQ Skype GTalk Jabber   Вверх
ksnk
Дата 13.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



gcc, У меня в системе вставляемый на страничку контент побит на элементы. Текст+Фото, список ссылок, галлерея, заголовок-якорь и так далее. Один из этих элементов - таблица. Вставляется таблица обычно так : В Excel'е (word, броузер) отмечается нужный набор ячеек, говориться "Copy". В Админке в поле текстового редактора, замаскированного под "особую кнопку", тыкается правая кнопка мышки и выбирается "Paste", после этого в текстовом редакторе оседает HTML в котором эта таблица нарисована,  Он парсится, преобразуется во внутренне представление - таблица вставлена. Способ оказался настолько удобным, что юзеры пару месяцев не замечали, что у меня уже нельзя создать таблицу "с нуля", из-за накопившихся ошибок ;-)

Внутренне представление - массив строк, каждая строка - массив ячеек. Каждая ячейка - набор параметров. В каждой строке одинаковое количество ячеек, независимо от colspan-rowspan, просто некоторые ячейки помечаются как "затычки" и при рендеринге в html не выводятся. Так получается немного удобнее работать со строками - столбцами по номеру, удалить или скопировать.

Так что что там такое вставил юзер - это его юзерово дело. Он может про-rowspan'ить несколько рядом находящихся ячеек и выделить из них группу будет нельзя. запоминать только один номер тоже нельзя, "длинных" ячеек потенциально может быть много ;-)

gcc, В прнципе - я идею понял. предлагается "сдвигать" "цвето-четность" всей следующей ячейки. Это не особенно подходит, так как rowspan'ы это скорее исключение, чем правило. И "сдвигать" цвет всей строки из 10 элементов из-за одного первого элемента, значит "склеить" почти полностью пару соседних строк.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
rMaveric
Дата 14.6.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



ksnk, все хорошо, но не нравится в твоем алгоритме большая вероятность шахматных комбинаций...

Иными словами мне не нравится то, что у тебя в таблице последней "Экскаваторы-погрузчики" белые, а дальше вся строка идет серой, к томуже если возникнет в вышестоящей строке опять роуспан, то опять сместится раскраска... Не гут.

Я правда не знаю насколько у тебя абстрактная задача для абстрактной таблицы... Но раскраска по строкам нужно в 99% только когда идет логика в строках. И не требуется групировать строки.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
ksnk
Дата 14.6.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



rMaveric, Здесь требуется визуально разделить строки. Логически они делятся другими методами... Заголовки разделов или еще как... В общем это не дело этого алгоритма smile

А что такое на моем втором примере "шахматная комбинация"?

Это сообщение отредактировал(а) ksnk - 14.6.2009, 16:46


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
rMaveric
Дата 15.6.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



Цитата(ksnk @  14.6.2009,  16:45 Найти цитируемый пост)
А что такое на моем втором примере "шахматная комбинация"?

Ну... Вот допустим у тебя не 2 столбца, а 5. И предположим в 3м столбце ты объединишь роуспаном 2 ячейки последних в разделе "Транспорт для грузоперевозок."

Тогда нижеидущая строка будет выглядеть следующей раскраской белый-серый-белый-серый, что-то мне подсказывает, что тебе так не надо.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
ksnk
Дата 15.6.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Ну, не вижу в этом ничего особенно страшного, совершенства в мире нет ;-) Так как цель - визуальное разделение строк, то и так нормально.
В этом случае получатся "шашечки" на нижней строке, зато на следующей они пропадут, сменившись нормальной строковой раскраской. При этом ячейки одного цвета визуально "склеятся". Это - минусы. Так как склеятся ячейки в "узкой" строке, то это предполагается меньшим злом, чем если бы "склеились" "Большие" ячейки... А плюсом, imho, является то, что для такого случая все равно в 2 цвета прилично не раскрасить...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.