Сложный календарь, вопрос реализации

morbidx

Новичок
Сложный календарь, вопрос реализации

hello world!, стоит задача написать календарь для турнирной таблицы по гольфу включающий себя вот эти пункты:
  • - Переключение между месяцами
    - 3 типа подсветки данных (Начало турнира - красным, каждое промежное число - серым, Конец турнира - белым)
    - Начало турнира являеться ссылкой
    - при наведении на начало турнира всплывает окошко с краткой информацией
при условии что:
  • - в одном месяце может быть несколько турниров
    - данные беруться из mysql,и записаны они так:
Код:
id        name  	     starttime     stoptime  	description  	
1 	 Отборочный тур 	2008-5-05 	2008-5-12 	Бла-Бла
1 	 Призовой турнир	2008-5-27 	2008-6-04 	Бла-Бла
визуально это выглядит вот так:


вот третий день не могу представить как можно реализовать рабочий алгоритм постройки такого календаря, поппробывал много способов но ничего невыходит, может ктонить тут есть кто может щелчком пальца помочь решить такую задачку, или хотябы подсказать верный путь? заранее оч благодарен ; )
 

Фанат

oncle terrible
Команда форума
я могу.
сначала учимся выводить календарь просто.
для этого нужны познания арифметики в объеме начальной школы и некоторые знания в программировании.
затем учимся делать переключение межу месяцами (начальные знания в пхп, как передавать данные в скрипт)

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

morbidx

Новичок
спасиб, подскажите еще как должен выглядеть массив примерно? там же даты както сравниваться должны при рисовании календаря.
я вот пробую к примеру вот так:
PHP:
while($row = mysql_fetch_array($res)){

	$month = date("n", strtotime($row['starttime']));
	$day_start = date("d", strtotime($row['starttime']));
	$day_stop = date("d", strtotime($row['stoptime']));

for($i = $day_start; $i < $day_stop; $i++){
$date[$month][$i]++;
}
	}
но помоему чтото нето
 

Фанат

oncle terrible
Команда форума
боже мой. зачем все это?
оставь дату, как есть. строкой.
и сравнивай строки.
ты, когда свой календарь строишь, имеешь и год, и месяц, и день.
вот и формируй из них строку, и сравнивай
если совпадает с датой конца - то конец.
если меньше даты конца и больше начала - середина
совпадает с началом - начало.
это блин задачка для первого класса. что здесь сложного-то?
 

morbidx

Новичок
ну просто к примеру календарь рисуеться вот так:
for($i=1;$i<$date("t");$i++){
echo $i;
}

как же я буду число дня сравнивать со строкой всей даты, нада вытаскивать из нее день
 

Фанат

oncle terrible
Команда форума
просто твои записи из базы.
ты можешь получить строки из базы в массив? или даже этого не умеешь?
 

morbidx

Новичок
тьфу) я подумал про отдельный array

ну у мня щас вот так выглядит это:

Код:
                $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">&nbsp;</div>';
            $f="0";                    
            }
        }
но он не подствечивает промежные числа при условии что они находяться с 27ого мая по 4 июня, он ужирняет 4 на тойже странице в мае
 

Фанат

oncle terrible
Команда форума
о господи. что ты с чем сравниваешь?

давай вот я тебя спрошу.
беру деньги из кармана. откладываю на пиво. сравниваю с ценой за ботинки. ПОЧЕМУ НЕ СОВПАДАЕТ?
Ты знаешь, сколько денег у меня в кармане? Ты знаешь, сколько стоят ботинки?

А почему у меня спрашиваешь, почему не работает код, который неизвестно, что из чего вычитает и что с чем сравнивает?
Хотя бы для себя можно вывести все эти старт даты и прочее?
 

morbidx

Новичок
смотри, этот массив:
(
[id] => 1
[name] => Отборочный тур
[starttime] => 2008-5-27
[stoptime] => 2008-6-04
[description] => <p>Отборочный тур</p>
)
 

Фанат

oncle terrible
Команда форума
ты не мне показывай. а себе.
что у тебя будет в $start_dat, если от starttime отрезать два символа? А С ЧЕМ ТЫ ЭТО СРАВНИВАЕШЬ?

-~{}~ 19.06.08 18:19:

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

vovanium

Новичок
morbidx
У тебя есть startime и stoptime в виде строки, ты в своем цикле можешь из $i получить что-то типа 2008-05-$i, потом полученную строку и сравниваешь со строками starttime и stoptime.

Кстати оригинальная у тебя дата ты уверен что у тебя 2008-6-04 MySQL отдает, а не 2008-06-04? ;)
И как заметил фанат ты сраниваешь только число, без учета месяца и года. Что по твоему раньше 20 мая или 4 июля, а теперь сравни только числа, как это делает твой скрипт.
 

morbidx

Новичок
да я так и делаю, но если к примеру начальная дата идёт в мае а конечная в июне, то как ужирнить промежные числа?

вот так щас всё выглядит:
Код:
<?
$daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

if(isset($_GET['month'])) $this_month = $_GET['month'];
else $this_month = date("n");
				
for($i=1;$i<$daysInMonth[$this_month];$i++){
	$start_dat = date("d", strtotime($row['starttime'])); // выбираем число дня старта
	$stop_dat = date("d", strtotime($row['stoptime'])); // выбираем число дня стопа
	
	$start_month = date("n", strtotime($row['starttime'])); // выбираем число месяца старта
	$stop_month = date("n", strtotime($row['stoptime'])); // выбираем число месяца стопа
				

	if($start_dat==$i && $start_month==$this_month){ $a='<b>'; $b="</b>"; } else { $a = ""; $b = "";} // сверяем и ужирняем
	if($stop_dat==$i && $stop_month==$this_month){	 $c='<b>">'; $d="</b>"; }else { $c = ""; $d = "";} // сверяем и ужирняем

	echo '<div class="date">'.$a.$c.' '.$i.' '.$b.$d.'</div>'; // выводим то что получилось
	}
?>
 

Фанат

oncle terrible
Команда форума
прочти мое сообщение от 17:44
там написано, ЧТО сравнивать, и КАК
 

morbidx

Новичок
=) слушчай ну у мня щас всё сравниваетсься только промежные числа не пойму как ужирнить..
я тоже люблю смеяться на калеками, хоть все и говорят что нельзя))
 

morbidx

Новичок
забыл!
ну я вродь решил этот вопрос, только терь другой возник, мне наверное както нада поместить эти данные в отдельный array, потомучто записей в базе с старт-стоп датами может быть несколько и при одной отрисовке он соотвественно берет только первую запись из sql, и сравнивает только с первой
как сделать чтобы можно было сравнивать по всем записям?
цикл в цикле?
 

Фанат

oncle terrible
Команда форума
Если у тебя возник другой вопрос, то, может быть, его надо ЗАДАТЬ?
 
Сверху