Autor Zpráva
hexcross.
Profil *
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
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 *
Díky moc mrknu na to poradne az po obede ale kazdopadne jsi mi moc pomohl! :)
petr 6
Profil
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
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 *
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
hexcross.:
nedávej ten HTML tag dovnitř cyklu, ale kolem něj.
hexcross.
Profil *
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
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 *
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
Ale fuj, řádek 2 si přepiš na
if($i<10) echo "0";
a nejlépe ho vlož bezprostředně před
echo $i
jinak budeš 1. dubna nemile překvapen.
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." "; }
(A to obalení toho íčka prázdným řetězcem taky není nutné)
hexcross.
Profil *
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
hexcross.
Udělal jsem to takto jelikož se mi ta nula musí vypisovat i když bude třeba druhého
Jenže kód v [#10] by ti tu nulu vypsal před tag strong i font, tj. nějak takto
0<strong>1 02 0<font>3</font> 04 atd.

a tos asi nechtěl. V [#12] už to máš opraveno.
hexcross.
Profil *
Souhlas, díky :)
hexcross.
Profil *
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
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
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>";
  }
?>
hexcross.
Profil *
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
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 *
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 :)))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0