hello world!, стоит задача написать календарь для турнирной таблицы по гольфу включающий себя вот эти пункты: - Переключение между месяцами - 3 типа подсветки данных (Начало турнира - красным, каждое промежное число - серым, Конец турнира - белым) - Начало турнира являеться ссылкой - при наведении на начало турнира всплывает окошко с краткой информацией при условии что: - в одном месяце может быть несколько турниров - данные беруться из mysql,и записаны они так: [sql]id name starttime stoptime description 1 Отборочный тур 2008-5-05 2008-5-12 Бла-Бла 1 Призовой турнир 2008-5-27 2008-6-04 Бла-Бла [/sql] визуально это выглядит вот так: вот третий день не могу представить как можно реализовать рабочий алгоритм постройки такого календаря, поппробывал много способов но ничего невыходит, может ктонить тут есть кто может щелчком пальца решить такую задачку? заранее оч благодарен ; )
70% могут решить тебе эту задачу... но не решат - это займет самое ценное - время!! Время которое оплачивается другими. Если хочешь - назначь цену и может кто-то, кто посвободнее тебе поможет! ;-)
да я сам думаю решу я просто прошу помочь с тем как это примерно должно функционировать чтобы я уже додумал)
ну вот сейчас у меня это вот так: PHP: $f="0"; $daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); for($i=1;$i<$daysInMonth[5];$i++){ $start_dat = intval(substr($row['starttime'],-2)); $stop_dat = intval(substr($row['stoptime'],-2)); if($start_dat==$i){ $a='<span style="font-weight: bold; color: #636363;">'; $b="</span>"; }else { $a = ""; $b = "";} if($stop_dat==$i){ $c='<span style="font-weight: bold; color: #636363;">'; $d="</span>"; }else { $c = ""; $d = "";} if($start_dat==$i) $e='style="font-weight: bold; color: #c21244;"'; else $e = ""; if($stop_dat==$i) $g='style="font-weight: bold; color: #ffffff;"'; else $g = ""; echo '<div class="date" '.$e.$g.'>'.$a.$c.''.$i.''.$b.$d.'</div>'; $f++; if($f>7) { echo '<div class="clear"> </div>'; $f="0"; } } но он не подствечивает промежные числа при условии что они находяться с 27ого мая по 4 июня, он ужирняет 4 на тойже странице в мае [/code]
А ты думаешь, денег стоят усилия по нажатию клавиш для набора кода? Или денег стоит как раз - «подумать»?
morbid Начни с изучения функция для работы с датами и временем - тебя ждет много чудных открытий! ;-)
PHP: <?php $date = mktime(0, 0, 0, $_GET['месяц'], 1, $_GET['год']); $days = date('t', $date); $offset = date('w', $date) - 1; $weeks = ceil(($days + $offset) / 7); $calendar['months']['this']['name'] = strftime('%B', $date); $calendar['months']['this']['link'] = date('Y/m', $date); $prev = strtotime('-1 month', $date); $calendar['months']['prev']['name'] = strftime('%B', $prev); $calendar['months']['prev']['link'] = date('Y/m', $prev); $next = strtotime('+1 month', $date); $calendar['months']['next']['name'] = strftime('%B', $next); $calendar['months']['next']['link'] = date('Y/m', $next); for ($i = 0; $i < $weeks; $i++) for ($j = 1; $j <= 7; $j++){ $day = ($i * 7 + $j - $offset); if ($day > 0 and $day <= $days) $calendar['days'][$day] = ($j >= 6 ? 'weekend' : 'workday'); else $calendar['days'][($day - 100)] = false; } ?> $calendar - это массив. $calendar['days'] - массив дней, а $calendar['months'] - месяцев (текущий, предыдущий, следующий). PHP: <?php foreach ($calendar['days'] as $day => $class) if ($day <= 0) //рисуем пустату else // рисуем ячейку таблицы с class="$class" - ибо это рабочий день или выходной Разберёшься, пологаю. Теперь нам нужен tooltip (всплывающая шняга). Я делал для себя с Prototype.js: [js]Event.observe(window, 'load', function(){ var titles = $A(document.all || document.getElementsByTagName('*')); titles.find(function(node){ if (node.tagName == 'IMG' && node.alt && !node.title) node.title = node.alt; if (node.tagName == 'A' && node.target == '_blank') node.title += (node.title ? ' ' : '') + '(откроется в новом окне)'; if (node.title){ var div = document.createElement('DIV'); var object = Try.these(function(){ return eval(node.title); }) Element.extend(div); document.body.appendChild(div); div.setAttribute('id', 'tooltip'); div.setStyle({'position': 'absolute', 'width': 'auto'}).hide(); if (object){ div.appendChild(object); object.show(); } else { div.update(node.title.gsub(/\\n/, '<br />')); } node.removeAttribute('title'); Event.observe(node, 'mousemove', function(event){ if (!event.pageX && !event.pageY){ var body = document.body; event.pageX = (event.clientX + body.scrollLeft + node.scrollLeft); event.pageY = (event.clientY + body.scrollTop + node.scrollTop); } div.setStyle({'left': (event.pageX + 15), 'top': (event.pageY + 15)}).show(); }) Event.observe(node, 'mouseout', function(event){ div.hide(); }) } }) })[/js] CSS тултипа: [css]#tooltip { background: #fff; border: 1px solid #000; color: #000; font-family: verdana, arial, helvetica, sans-serif; font-size: 11px; margin: 0; padding: 2px; }[/css] В итоге масивы готовые к использованию и впоне неплохой тултип. Последнее и самое важное: восхищайся моим гением три-пять минут.
слушай чювак а подскажи еще как можно сверять по базе данных которую я указал выше и подсвечивать на твоем примере? а то я совсем запутался чтото
Трындец. Вот так и получают новички по 40к на работе. А чего? Начальник видит - работа сделана. На бабло.
Народ, да ладно вам. Мне просто хочется поделиться с миром своим гением. Руками и функцией вроде array_diff() или in_array() и т.д. смотри http://php.net.