Fotoalbum v PHP – zobrazení fotografií
Do fotoalba již můžeme vkládat kolekce fotografií a uživatel může listovat seznamem všech kolekcí. Dnes se tedy podíváme na jednu ze základních funkcí fotoalba, zobrazení konkrétních fotografií vybrané kolekce.
Zobrazení fotografií
Zobrazování skupiny fotografií nám bude zajišťovat skript show.php
, kterému bude vždy na vstup předán parametr $kolekce
udávající, jaká kolekce se má zobrazit. Než začneme zobrazovat vlastní fotky, musíme z databáze zjistit základní údaje o kolekci. Kromě názvu nás bude zajímat, jestli se mají fotografie zobrazovat po skupinách (určitého počtu) nebo všechny naráz, jejich celkový počet, rok i doba. Údaje získáme jednoduše pomocí následujícího příkazu select
:
select NAZEV, ROK, DOBA, CAST, POCET from KOLEKCE where ID = $kolekce
Podle hodnoty atributu CAST
se skript rozdělí na dvě části. První část obslouží případ, kdy se fotografie zobrazují všechny najednou, druhá se stará o zobrazování fotografií po částech, včetně správného vygenerování odkazů „Další“ a „Předchozí„, aby šlo mezi jednotlivými skupinami fotek snadno přecházet.
Struktura skriptu show.php
Podobně jako v předchozím díle opět uvedu hrubou kostru skriptu, jednotlivé části očísluji a pak se k nim budu postupně vracet a vysvětlovat je.
<HTML>
<HEAD>
<TITLE>Zobrazení kolekce</TITLE>
</HEAD>
<BODY>
<h1>Fotoalbum 1.0 – Zobrazení kolekce</H1>
<HR SIZE=1 NOSHADE>
<?
/* (1) zjisteni zakladni udaju o kolekci z databaze */
if ($cast == -1) { /* fotografie se maji zobrazit vsechny naraz */
/* (2) Zobrazeni vsech fotografii */
}
if ($cast > 0) { /* fotografie se maji zobrazovat po castech */
/* (3) Zobrazeni fotografii po castech */
}
?>
</BODY>
</HTML>
Zjištění základních údajů o kolekci (1)
$result = mysql(„album“, „select NAZEV, ROK, DOBA, CAST, POCET from KOLEKCE where ID = $kolekce“);
$ch = mysql_errno();
if (!$ch) {
$nazev = mysql_result($result, 0, „NAZEV“);
$rok = mysql_result($result, 0, „ROK“);
$doba = mysql_result($result, 0, „DOBA“);
$cast = mysql_result($result, 0, „CAST“);
$pocet = mysql_result($result, 0, „POCET“);
print „<B>Kolekce: $nazev ($rok)</B><br>“;
print „$doba<br><BR>“;
}
else {
print „<font color=red>Při přístupu k databázi došlo k chybě!</font><br>“;
}
Zde zjistíme základní informace o kolekci, uložíme si je postupně do proměnných. Vypíšeme název kolekce, rok a dobu trvání. Pokud při čtení došlo k chybě, bude o tom vypsána chybová hláška.
Zobrazení všech fotografií (2)
$nar = 0;
print „<CENTER>“;
print „<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=3><TR>“;
$result = mysql(„album“, „select POPIS, THUMB, PHOTO, DATUM from FOTKA where KOLEKCE_ID = $kolekce order by ID“);
$p = mysql_num_rows($result);
for ($i = 0; $i < $p; $i++) {
$popis = mysql_result($result, $i, „POPIS“);
$thumb = mysql_result($result, $i, „THUMB“);
$photo = mysql_result($result, $i, „PHOTO“);
$datum = mysql_result($result, $i, „DATUM“);
print „<TD ALIGN=center><A HREF=\“photos/$photo\“ target=\“_blank\“><IMG SRC=\“photos/$thumb\“ BORDER=0 ALT=\“$popis ($datum)\“></A></TD>“; ++$nar;
if ($nar % 3 == 0) { print „</TR><TR>“; }
}
print „</TR></TABLE>“;
print „<HR SIZE=1 NOSHADE><CENTER>Zpět na nabídku <A HREF=\“index.php\“>všech alb</A></center>“;
Pro danou kolekci zjistíme všechny fotografie, které do ní patří. Potom v cyklu for
zajistíme zobrazení klikatelného odkazu na velkou fotografii. Odkazem je thumbnail. Thumbnaily se zobrazují do tabulky (s neviditelným rámečkem), vždy tři buňky na řádek. Po vytištění každé třetí buňky se vloží nový řádek tabulky. To nám zajišťuje proměnná $nar
. Kdykoli je dělitelná třemi (tedy $nar
modulo 3
je 0
), vloží se kód </TR><TR>
.
Zobrazení fotografií po částech (3)
$nar = 0;
print „<CENTER>“;
print „<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=3><TR>“;
$result = mysql(„album“, „select POPIS, THUMB, PHOTO, DATUM from FOTKA where KOLEKCE_ID = $kolekce order by ID“);
$p = mysql_num_rows($result);
if (!$start) { $start = 1-1; }
for ($i = $start; $i < $start+$cast && $i < $pocet; $i++) {
$popis = mysql_result($result, $i, „POPIS“);
$thumb = mysql_result($result, $i, „THUMB“);
$photo = mysql_result($result, $i, „PHOTO“);
$datum = mysql_result($result, $i, „DATUM“);
print „<TD ALIGN=center><A HREF=\“photos/$photo\“ target=\“_blank\“><IMG SRC=\“photos/$thumb\“ BORDER=0 ALT=\“$popis ($datum)\“></A></TD>“; ++$nar;
if ($nar % 3 == 0) { print „</TR><TR>“; }
}
print „</TR></TABLE>“;
print „<HR SIZE=1 NOSHADE>“;
$start += $cast;
$predch = $start – 2*$cast;
if ($predch >= 0) {
print „<A HREF=\“show.php?kolekce=$kolekce&start=$predch\“>< Předchozí</A>“;
}
if ($start < $pocet) {
print „ <A HREF=\“show.php?kolekce=$kolekce&start=$start\“>Další ></A>“;
}
print „ <A HREF=\“index.php\“>Hlavní nabídka</A>“;
print „</center>“;
Uvedený kód je velmi podobný kódu v části (2) s tím rozdílem, že cyklus for
, který nám zajišťuje zobrazení fotek, nemá řídící proměnnou $i
iniciovanou na 0
(zobrazovalo by se od první fotky), ale má ji nastavenou na proměnnou $start
, která se předává jako parametr. V parametru $cast
(který zjistíme z databáze) máme uložen počet, po kolika se mají fotky na stránce zobrazovat. Jednoduchou sčítací nebo odčítací operací na proměnné $start
zajistíme vygenerování korektního odkazu na zobrazení následující i předchozí části fotek. Kód samozřejmě hlídá, abychom se s proměnnou $start
nedostali mimo základní rozsah 1
až celkový počet fotek v kolekci (všimněte si, že ukončovací podmínka cyklu for
je složena ze dvou: $i < $start+$cast && $i < $pocet;
).
Celý skript si můžete stáhnout. Nakopírujte si ho do hlavního adresáře \Album
, v němž máte již skript index.php
. To je pro dnešek vše, příště se podíváme na jednoduché vyhledávání nad fotografiemi.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024 -
Jak nainstalovat šablonu ve WordPressu
23. července 2024 -
AI v programování: Jak používat GitHub Copilot (část 2)
19. února 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024