Zdravim, mam kod pro generovani kalendare do ktereho se vypisuje obsah DB ve ktere sou ulozeny kurzy :
CREATE TABLE `kurzy` (
`id` int(10) NOT NULL auto_increment,
`jmeno` varchar(20) NOT NULL default '',
`popis` text NOT NULL,
`obtiznost` int(1) NOT NULL default '0',
`od_den` varchar(5) NOT NULL default '',
`od_mesic` varchar(5) NOT NULL default '',
`od_rok` varchar(5) NOT NULL default '',
`do_den` varchar(5) NOT NULL default '',
`do_mesic` varchar(5) NOT NULL default '',
`do_rok` varchar(5) NOT NULL default '',
PRIMARY KEY (`id`)
)
tady je PHP kod ( je to docela dlouhy ale jestli mate cas mrkněte na to pls ) :
<?php
class den
{
# trida slouzi pro ulozeni informaci o dni a vytvoreni bunky tabulky ve ktere jsou dny vypsany !
function den($pozadi,$den,$mesic,$kurz_popis="There is no course in this day"){
$this->kurz_popis=$kurz_popis;
$this->pozadi=$pozadi;
$this->den=$den;
$this->mesic=$mesic;
$this->bunka="<td style='background-color:".$this->pozadi."; ' onMouseOver='ukaz(\"".$this->kurz_popis."\")' onMouseOut='skryj(\"".$this->kurz_popis."\")'>".$this->den."</td>";
}
}
class kurz
{
function kurz($od_den,$od_mesic,$od_rok,$do_den,$do_mesic,$do_rok,$popis,$jmeno,$obtiznost,$rok,&$pole){
# ulozeni udaju o kurzu !
$this->od_den=$od_den;
$this->od_mesic=$od_mesic;
$this->od_rok=$od_rok;
$this->do_den=$do_den;
$this->do_mesic=$do_mesic;
$this->do_rok=$do_rok;
$this->popis=$popis;
$this->jmeno=$jmeno;
$this->obtiznost=$obtiznost;
$kal=new calendar($rok); # vytvori instanci tridy kalendar
if($od_mesic==$do_mesic){ # pokud je kurz v jednom mesici !!
for($i=$od_den;$i<=$do_den;$i++){
$pole->pozadi=$this->obtiznost; # zmeni atributy dnu v kalendáři !!!
$pole->pole_dnu[$od_mesic][$i]->kurz_popis=$popis; # zmeni atributy dnu v kalendáři !!!
}
}else{# pokud se nekona ve stejnej mesic !!!
for($i=$od_den;$i<=$kal->day_count[$od_mesic];$i++){ # cyklus pro mesic zacatku kurzu !
$pole->pole_dnu[$od_mesic][$i]->pozadi=$this->obtiznost; # zmeni atributy dnu v kalendáři !!!
$pole->pole_dnu[$od_mesic][$i]->kurz_popis=$popis; # zmeni atributy dnu v kalendáři !!!
}
for($i=1;$i<=$do_den;$i++){ # cyklus pro mesic konce kurzu !!
$pole->pole_dnu[$do_mesic][$i]->pozadi=$this->obtiznost; # zmeni atributy dnu v kalendáři !!!
$pole->pole_dnu[$do_mesic][$i]->kurz_popis=$popis; # zmeni atributy dnu v kalendáři !!!
}
}# konec else vetve k if($od_mesic==$do_mesic){ }
}
}# konec rtridy kurz
class calendar
{
#Functions:
# 1)calendar: a)vytvori pole polednu[mesice(1..12)][dny(1..(pocet_dni_v_mesici))]
# b)vytvori pole day_count[mesic] s informací kolik je v mesici dnu
# c)vytvori pole first_day[mesic] s indexama prvních dnu v mesici 1=pondeli .. 0=nedele
# d)spoji se s db
# 2)vypis_mesic_simple(int mesic) = vypíse jednoduchy kalendar
# 3)vypis_mesic(int mesic) = vypise kalendar ktery je jiz modifikovan obsahem DB
# 4)connect() = fce pro pripojeni do mysql DB
#------ kalendáøní údaje ----------------------
var $year;
var $month;
var $day_count= array();
var $first_day= array();
var $months = array(1=>"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var $days = array(1=>"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
function connect(){ # fce pro pripojení do DB serveru
include "connect.php";
}
function calendar($year){
$this->year=$year;
for($i=1;$i<=12;$i++){
$str="1 ". (string) $this->months[$i]." ".(string) $this->year; # string do timestamp
$this->day_count[$i]=date("t",strtotime($str)); # Pocet dní v danem mesici
$this->first_day[$i]=date("w",strtotime($str)); # Index prvního dne v mesici
#vytvori pole objektu den pro cely rok !!!!!
for($f=1;$f<=$this->day_count[$i];$f++){
$this->pole_dnu[$i][$f]=new den("#AFCEED",$f,$i);
}
#------------------
if($this->first_day[$i] == 0){ # Pokud je index prvního dne 0 ( Nedìle ) nastaví ho na 7. Kvùli rozliènosti indexování dnù
$this->first_day[$i]=7;
}
}
$this->connect(); # spojení s DB
}
function vypis_mesic_simple($mesic){ # tento výpis vypíše jenom kalendáø bez údajù z DB
echo "<table>\n";
echo "<tr>\n";
echo "<td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td><td>St</td><td>Su</td>";
echo "</tr>\n";
echo "<tr>";
for($vynech=1;$vynech < $this->first_day[$mesic];$vynech++){
echo "<td> </td>\n"; # cyklus pro vynechání dnù až do poèáteèního dne
}
for($den=1;$den<=$this->day_count[$mesic];$den++){
$timestamp=$str="$den ". (string) $this->months[$mesic]." ".(string) $this->year;
echo "<td>$den</td>\n";
if(date("w",strtotime($timestamp))==0){ # když je nedìle tak zalom øádek a zaèni na novym
echo "</tr>\n";
echo "<tr>\n";
}
}
echo "<tr>";
echo "</table>\n";
}
function vypis_mesic($mesic){
$this->kurzy=array();
$i=0;
$dotaz=mysql_query("SELECT * FROM kurzy WHERE 1");
while($row=mysql_fetch_array($dotaz)){
$i++;
$obtiznost="red"; # tady pak dodělat zmeny barev pri ruznejch obtiznostech !
$this->kurzy[$i]=new kurz($row['od_den'],$row['od_mesic'],$row['od_rok'],$row['do_den'],$row['do_mesic'],$row['do_rok'],$row['popis'],$row['jmeno'],$obtiznost,$this->year,$this->pole_dnu);
}
# tady bude vypis mesice !
}
}
$pokus= new calendar(2007);
print_r($pokus->pole_dnu[1]); # vypíše obsah pole 1 mesicekde jeste nejsou dny modifikovany obsahem DB
$pokus->vypis_mesic(1); # tady by se meli modifikovat ty dny !
echo "<hr>";
print_r($pokus->pole_dnu[1]); # tady by se vy výpisu meli objevit uz dny modifikovane ale nejsou !!!!!!!!!!!!!!
?>
Funguje to zhruba tak : vytvorenim instance calendar se inicializuje pole s nazvem pole_dnu[mesic][den]=new den();
ktere obsahuje jednotlive dny ( instance tridy den , která nese informace o tomto dni: jestli je to kurz a tak)
Pote při zavolani $pokus->vypis_mesic(1); by se měli tyto objekty modifikovat podle obsahu DB ( ALE TO SE NESTANE !!! )
Prosím poraďte kde dělám chybu. Díky za všechny odpovědi .