Autor Zpráva
PetrHodan
Profil *
Ahoj, mám dotaz. Potřebuji poradit, jak napsat to, aby sem mohl k určitému datumu zobrazit určitý obsah (jen vzkaz). Mám to na procvičování příkladů z matematiky, aby se každý den zobrazil předem nadefinovaný příklad, který tam napíšu, nic víc, např. (22.2 - XXX, 23.2 YYY, 24.2 AAA a podobně). Pokud to nepůjde datumově tak alespoň na dny. Snad jsem to napsal rozumně. Díky moc za rady :)
juriad_
Profil *
Řešení v PHP může vypadat například takto (umíš PHP?):
function includeExample($path) {
    $dt = new DateTime(); # dnešní datum
    $diff = $dt->diff(new DateTime('1970-01-01')); interval od začátku éry
    $files = glob($path); # načtení všech příkladů
    
    $file = $files[$diff->days % count($files)]; # vybrání příkladu podle intervalu
    
    include $file; # zobrazení příkladu
}

A později na místě, kam chceš vložit dnešní přiklad napíšeš:
includeExample('examples/*.html');

Každý příklad vložíš do jednoho souboru s koncovkou html v adresáři examples.


Samo se to přizpůsobí jakémukoli počtu příkladů. Až dojdou, tak začne zobrazovat příklady od začátku. Příklady se ukazují seřazené podle abecedy (napřed a.html, pak apple.html, pak banan.html atd.) Přidání mnového příkladu způsobí přepočítání a následné zobrazení příkladu, který může být úplně jinde v té řadě. (Toto nejde vyřešit nikterak jednodše aniž by se někam neukládal poslední zobrazený příklad).
PetrHodan
Profil *
juriad:
PHPko ovládám minimálně a to hodně minimálně. Nemohl by jsi mi uvést příklad, jak by to vypadalo v praxi? S nějakými příklady? Nebo textem? Já bych se v tom už trošku orientoval. Děkuju moc
juriad_
Profil *
V adresáři examples si vytvoříš kolik chceš příkladů v HTML:

apples.html:
Váží-li jedno jablko 100 gramů, kolik váží 5 jablek?

banana.html:
Jaký je objem banánu, má-li délku 20 cm a průměr 3 cm?

V těchto souborech (jak už koncovka naznačuje klidně můžeš používat HTML značky. Tedy například:

rovnice.html:
Urči všechny řešení následující rovnice
<br>
x<sup>2</sup> + 2x + 1 = 0

Do hlavního souboru (index.php) vložíš to co jsem napsal v [#2]:
<?php
function includeExample($path) {
    $dt = new DateTime(); # dnešní datum
    $diff = $dt->diff(new DateTime('1970-01-01')); interval od začátku éry
    $files = glob($path); # načtení všech příkladů
    
    $file = $files[$diff->days % count($files)]; # vybrání příkladu podle intervalu
    
    include $file; # zobrazení příkladu
}
?>
<!doctype html>
<html>
...
<body>
Dnešní příklad k vyřešení je:
<div id="priklad">
<?php includeExample('examples/*.html'); ?>
</div>
</body>
</html>
PetrHodan
Profil *
Skvělý, tahle je to perfektní, jen nerozuním, kdy se co v jaký den zobrazí z těch komentářů #.
juriad_
Profil *
1.1.1970 se zobrazí 1. soubor podle abecedy.
2.1.1970 se zobrazí 2. soubor podle abecedy.

Proč počítám od 1.1.1970? Protože tehdy začala éra počítačů a veškerý čas na počítačích se počítá od tehdy.

To % (modulo) na 7. řádku zajišťuje, že jakmile počet dnů od 1.1.1970 je větší než počet souborů, tak se začne znovu. To je realizováno jako zbytek po dělení. Následně se jen vezme příslušný soubor z pole, a ten se zobrazí.
Keeehi
Profil
PetrHodan:
jen nerozuním, kdy se co v jaký den zobrazí z těch komentářů
To se teď nedá přesně určit. Záleží jaký bude den a hlavně kolik těch příkladů bude. Co se dá říct je to, že každý den to bude právě jeden, nějakým to začne (nedá se říct kterým) a další den se zobrazí ten, jehož jméno souboru abecedně následuje po tom co se zobrazil první den. Když se dojde na konec abecedy, zobrazí se abecedně první soubor.
PetrHodan
Profil *
Díky moc! Skvělý :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0