Kalendar – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kalendar – PHP – Fórum – Programujte.comKalendar – PHP – Fórum – Programujte.com

 

don_Dominique0
Super člen
31. 10. 2007   #1
-
0
-

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 .

Nahlásit jako SPAM
IP: 193.165.176.–
hrach
~ Redaktor
+1
Boss
31. 10. 2007   #2
-
0
-
Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
don_Dominique0
Super člen
31. 10. 2007   #3
-
0
-

To hrach : Jo znam tento datový typ ale v tomt případě je to pro mne takto výhodnější ( možna ne zrovna v tomhle scritu ale v jinych ano ). Ale to je teď jedno potřebuju poradit proč to nefunguje tak jak má. asi bude chyba někde v tom class kurz ale vůbec na ni neůžu přijít. Stejně díky za odpověď.

Jo a ještě jeden dotaz : fce pront_r() podle manuálu php vypisuje výstup takto formátovaný:

Array

(
[a] => apple
[b ] => banana
[c] => Array
(
[0] => x
[1] => y
[2] => z
)
)

ale u mne mi to vypíše pouze dořádku,nevíte jak to udělat aby to měl ten hezkej formát ?

Nahlásit jako SPAM
IP: 193.165.176.–
insider0
Věrný člen
31. 10. 2007   #4
-
0
-

zdravim,
s tim datem je to otresne :D, jak uz rikal hrach ...
nejsem si jisty, ale nemelo by se $pole s & uz posilat:
$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);

nejlepsi zpusob, jak prijit na chybu je dat si echo vsude kde je to moze = do podminek(kazde vetve), do cyklu, proste vsude a divat se, kam to nedoslo. Pokud to doslo vsude, tak si echovat promenne - taky v podminkach vsude a zjistit az kde se to nepovedlo a na to misto se zamerit

Nahlásit jako SPAM
IP: 147.32.97.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
insider0
Věrný člen
31. 10. 2007   #5
-
0
-

To don_Dominique : ona to ta funkce formatovane vypise, kdyz si das zobrazit zdrojovy kod, tak je to krasne formatovane, ale prohlizec ignoruje nove radky, bere je jako mezery, takze ti ho hodi do jednoho radku. Proto by to melo byt spise

echo "<pre>";

print_r(*****);
echo "</pre>";

Nahlásit jako SPAM
IP: 147.32.97.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
don_Dominique0
Super člen
31. 10. 2007   #6
-
0
-

To insider : Supr ten výpis funguje .
Ale ty dny se furt neprepisujou. S těma výpisama sem to zkoušel, ale než sem to dal sem tak sem je vymazal. Ale podle nich to stejně vypadalo že by to mělo fungovat.

Nahlásit jako SPAM
IP: 193.165.176.–
insider0
Věrný člen
31. 10. 2007   #7
-
0
-

no tak uz to mozna mam :)

ty predavas pole dnu, ale pak k tomu pristupujes, jako bys posilal neco nadrazeneho. Tak jak to mas napsane ted, tak je to vypis jako tohle:

$this->pole_dnu->pole_dnu[][]->pozadi ...

takze predava bud jen $this a tridu kurz nechat, nebo predavat $this->pole_dnu a upravit tridu kurz...

Nahlásit jako SPAM
IP: 147.32.97.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
don_Dominique0
Super člen
1. 11. 2007   #8
-
0
-

To insider : Díky za radu ! sice sem na to už včera večer přišel sám. Ale stejně díky.

Nahlásit jako SPAM
IP: 84.42.148.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

Podobná vlákna

Kalendář — založil don_Dominique

Kalendár — založil Tomas

Kalendár docklet — založil pETER

Kalendář obsazenosti — založil pecan987

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý