Autor | Zpráva | ||
---|---|---|---|
hexcross. Profil * |
#1 · Zasláno: 18. 3. 2011, 10:26:17
Zdravím zdravím,
potřebuji vytvořit v PHP(popř jQuery, JS!) jednoduchý jednořádkový kalendář který by vypsal podle čísel aktuální měsíc plus označil aktuální týden. Nebude potřeba k jednotlivým dnům přidávat události...přikládám obrázek s návrhem a prosím o nasměrování kde tak začít... Ovládám základy PHP+mySQL...díky za kazdou radu! |
||
Medvídek Profil |
#2 · Zasláno: 18. 3. 2011, 10:30:25 · Upravil/a: Medvídek
hexcross.:
Cyklus for podle počtu dnu v aktuálním měsíci, není ani potřeba db :) Prostuduj si funkci date. Vrací ti vše co potřebuješ, i název dne, takže podle něho dokážeš označit celý týden. Narychlo sem zpíchnul, možná trošku prasárnu s tím výběrem týdne, ale jde to použít na nějaký základ :) $cislo_dne_v_tydnu=date("N"); $cislo_dne_v_mesici=date("j"); $pocet_dnu=date("t"); switch($cislo_dne_v_tydnu){ case 1: {$od=$cislo_dne_v_mesici;break;} case 2: {$od=$cislo_dne_v_mesici-1;break;} case 3: {$od=$cislo_dne_v_mesici-2;break;} case 4: {$od=$cislo_dne_v_mesici-3;break;} case 5: {$od=$cislo_dne_v_mesici-4;break;} case 6: {$od=$cislo_dne_v_mesici-5;break;} case 7: {$od=$cislo_dne_v_mesici-6;break;} } $do=$od+6; for($i=1;$i<=$pocet_dnu;$i++){ if($i>=$od AND $i<=$do) echo "<strong>".$i."</strong> "; else echo $i." "; } |
||
hexcross. Profil * |
#3 · Zasláno: 18. 3. 2011, 11:14:24
Díky moc mrknu na to poradne az po obede ale kazdopadne jsi mi moc pomohl! :)
|
||
petr 6 Profil |
#4 · Zasláno: 18. 3. 2011, 11:22:59
Medvídek:
Řádky 5 až 13 jsi asi zpíchnul fakt na rychlo. Vrací totiž to samé jako $od=$cislo_dne_v_mesici-$cislo_dne_v_tydnu+1; |
||
Medvídek Profil |
#5 · Zasláno: 18. 3. 2011, 12:33:36
petr 6:
Máš zcela pravdu, já to vytáhnul a upravil z jednoho mého staršího kalendáře, kdy sem tam ten switch měl i kvůli něčemu jinému, v tomto případě samozřejmě zbytečné :) |
||
hexcross. Profil * |
#6 · Zasláno: 18. 3. 2011, 13:23:19
Tak řeším ještě jeden "problém" při výpisu aktuálního týdne podle tvého sciptu to sice každý den obalý do tagu ale nešlo by to udělat aby všech 7 dnů bylo obaleno do jednoho tagu?
Tedka to vytvoří tento kod : <strong>14</strong><strong>15</strong><strong>16</strong><strong>17</strong><strong>18</strong><strong>19</strong><strong>20</strong> Já bych potreboval trochu čistější : <span>14 15 16 17 18 19 20</span> Bylo by to nějak možné? Díky. |
||
panther Profil |
#7 · Zasláno: 18. 3. 2011, 22:44:20
hexcross.:
nedávej ten HTML tag dovnitř cyklu, ale kolem něj. |
||
Časová prodleva: 3 dny
|
|||
hexcross. Profil * |
#8 · Zasláno: 21. 3. 2011, 15:59:54
To nepomůže protože cyklus FOR se provede několikrát, asi bude potřeba vytvořit jinou podmínku nebo cosi :)
Zkusím na to přijít sám ale pokud máte řešení budu za něj rád :) |
||
Medvídek Profil |
#9 · Zasláno: 21. 3. 2011, 16:07:47 · Upravil/a: Medvídek
hexcross.:
Tak to je snad jednoduchá podmínka, ne? :) for($i=1;$i<=$pocet_dnu;$i++){ if($i==$od) echo "<strong>"; echo $i." "; if($i==$do) echo "</strong>"; } ukázka: http://data.69-design.cz/kal.php |
||
hexcross. Profil * |
#10 · Zasláno: 21. 3. 2011, 16:28:02
Taky už jsem na to přišel než jsem to četl :)
Ještě jsem tam dodělal podle toho co jsem chtěl ověření aktuálního dne v měsíci a také přidání nuly před jednomístný datum.. for($i=1;$i<=$pocet_dnu;$i++){ if (strlen("$i")=="1") echo "0"; if($i==$od) { echo "<strong>"; } if($i>=$od AND $i<=$do) { if ($i==$cislo_dne_v_mesici){echo "<font>".$i." </font>";} else {echo "".$i." ";} } else { echo "".$i." "; } if($i==$do) { echo "</strong>"; } } Díky všem za pomoc! Muzete lock :) |
||
petr 6 Profil |
#11 · Zasláno: 21. 3. 2011, 17:56:15
Ale fuj, řádek 2 si přepiš na
if($i<10) echo "0"; echo $i Dále vypusť podmínku na řádku 6, pokud s ní nemáš nějaké další úmysly. A ještě ten kód můžeš upravit tak, abys v něm neměl dvakrát else {echo $i." "; } |
||
hexcross. Profil * |
#12 · Zasláno: 22. 3. 2011, 12:46:12
S tou první podmínkou souhlasím zase jsem to radši udělal složitě... :)
Udělal jsem to takto jelikož se mi ta nula musí vypisovat i když bude třeba druhého... for($i=1;$i<=$pocet_dnu;$i++){ if($i==$od) { echo "<strong>"; } if($i<10) $nula=0; else $nula=""; if ($i==$cislo_dne_v_mesici){echo "<font>".$nula.$i." </font>";} else { echo $nula.$i." ";} if($i==$do) { echo "</strong>"; } } Určitě tam bude nějáká blbost to tušim :D Ale zatim to funguje pěkně... :) |
||
petr 6 Profil |
#13 · Zasláno: 22. 3. 2011, 12:57:03
|
||
hexcross. Profil * |
#14 · Zasláno: 23. 3. 2011, 11:03:04
Souhlas, díky :)
|
||
Časová prodleva: 6 dní
|
|||
hexcross. Profil * |
#15 · Zasláno: 29. 3. 2011, 18:48:04
Tak přecejenom Vám nedám pokoj :))
Jak bych mohl udělat aby se bílý rámeček vždy ukazoval na začátku kalendáře a to v něm aktuální datum a aby bílý rámeček neměnil pozici. Díky Vám to je takto : Odkaz Ale potřeboval bych to dle návrhu : Nějáké nápady? :) |
||
petr 6 Profil |
#16 · Zasláno: 30. 3. 2011, 13:42:40
hexcross.:
„Nějáké nápady?“ Nápady jsou. Záleží ovšem, co cheš mít před a za bílým rámečkem, resp. kolik hodnot... |
||
Bertram Profil |
#17 · Zasláno: 31. 3. 2011, 07:56:36
Něco takového? NUTNO dopilovat.
<?php class Kalendar { private $pocetDnu; private $intDenTydne; public $denMesice; public function __construct() { $this->pocetDnu = date('t'); $this->intDenTydne = date('w'); $this->denMesice = date('j'); } public function dnyAktualnihoTydne() { $konec = min($this->pocetDnu,(7-$this->intDenTydne)+$this->denMesice); $zacatek = max(1,((7-$this->intDenTydne)+$this->denMesice)-6); return range($zacatek,$konec); } public function dnyAktualnihoMesice() { return range(1,$this->pocetDnu); } public function aktualniDen() { return $this->denMesice; } } // Test třídy Kalendar $kalendar = new Kalendar; $tyden = $kalendar->dnyAktualnihoTydne(); $dny = $kalendar->dnyAktualnihoMesice(); $dnes = $kalendar->aktualniDen(); if ($dny) { echo "<p>"; foreach ($dny as $den) { if (in_array($den, $tyden, TRUE)) { if ($den == $dnes) { echo "<span style='background:#6699FF;color:white;'>$den </span>"; } else { echo "<span style='background:#6699FF;'>$den </span>"; } } else { echo "<span>$den </span>"; } } echo "</p>"; } ?> |
||
Časová prodleva: 3 dny
|
|||
hexcross. Profil * |
#18 · Zasláno: 3. 4. 2011, 16:27:07
Omlouvám se za pozdní odpověď, nějak nestíhám :)
Bertram : díky za pomoc, ale bohužel si myslím že jsi udělal to samé kam jsme již došli a ještě složitěji, oprav mě jestli se mýlím.... Petr 6 : takže to má být následovně : 5 čísel bude před bílím boxem, 7 čísel (celý aktuální týden) v boxu, a zbylých 22 čísel bude za boxem. Ty čísla jsou samozřejmně reálné datumy :) a zárověn ten rámeček musí zůstat stále na stejném místě a posouvat se budou jen čísla.... Další ukázka (před rámečkem je 6 datumů, to je moje chyba, má jich tam být 5 jak jsem psal) Díky. |
||
petr 6 Profil |
#19 · Zasláno: 4. 4. 2011, 10:13:23
hexcross.:
„před bílím boxem“ - asi myslíš bílý box „Ty čísla“ - asi myslíš ta čísla „reálné datumy“ - asi myslíš reálná data for($day=-11;$day<23;$day++){ $datum=strtotime("sunday +$day day"); if($day==-6) echo "<b>"; //zacatek ramecku if(date("j.n")==date("j.n",$datum)) echo "<i>"; //dnesek echo " ".date("d",$datum); if(date("j.n")==date("j.n",$datum)) echo "</i>"; //dnesek if($day==0) echo "</b>"; //konec ramecku } |
||
hexcross. Profil * |
#20 · Zasláno: 4. 4. 2011, 19:01:31
petr 6 :
To vysvětluje všechny ty 4 z češtiny :))) Jinak díky tvoje funkce funguje krásně, snad už nebude třeba nic vylepšovat :))) |
||
Časová prodleva: 13 let
|
0