Máte spoustu naskenovaných fotografií z různých dovolených, oslav či dalších akcí? Nebo přímo používáte digitální fotoaparát a přemýšlíte, jak jednoduše a organizovaně zobrazit fotografie na vašem počítači? Nebo chcete připravit elektronické fotoalbum, které budete moci svým přátelům a známým darovat na CD? Následující seriál článků vás povede krok za krokem při tvorbě jednoduchého elektronického fotoalba.

Specifikace požadavků

Jako první krok je potřeba si rozmyslet, jak by mělo fotoalbum vypadat, jaké by mělo nabízet uspořádání fotografií a jaké funkce bude podporovat. Zřejmě budete souhlasit s tím, že by album mělo nabízet roztřídění fotografií do jednotlivých kolekcí, chronologicky uspořádaných dle data. Každá kolekce fotografií bude mít svůj název (např. „Dovolená ve Španělsku (2001)„).

Uživatel si bude moci v jednotlivých kolekcích listovat, klikne na název a zobrazí se mu kolekce fotek, kterou bude chtít vidět. Nebudou se načítat naráz všechny fotografie v plné velikosti, ale zobrazí se seznam zmenšených obrázků (takzvaných thumbnailů), a teprve kliknutí na některý z nich zobrazí fotografii v původní velikosti. Protože fotografií z nějaké akce může být velmi mnoho, bude lepší rozdělit každou kolekci na jednotlivé listy (například po 9 fotografiích).

Každá fotografie bude mít svůj popisek a datum pořízení. Dle svého uvážení budete moci jednoduše rozšířit databázi o další údaje, například jakým fotoaparátem byla fotografie pořízena, na jaký film a podobně. Podle popisku bude uživateli umožněno vyhledávání fotografií v albu. Výsledek hledání bude zobrazen v podobě sady náhledů.

Nakonec, když budete chtít album nahrát někomu na CD, budete mít dvě možnosti – buď dáte k dispozici přímo webovou aplikaci v PHP, kterou si daný uživatel zprovozní na svém lokálním www serveru, nebo naprogramujete funkci pro automatické vygenerování off-line verze alba s fotografiemi, kterou pak uložíte na CD. Off-line verze bude vypadat úplně stejně jako výše zmíněná webová aplikace s tím rozdílem, že zde nebude možnost fotografie vyhledávat.

Funkce systému

V předchozích odstavcích byly stanoveny podmínky, které by fotoalbum mělo splňovat. Pokud jednotlivé myšlenky shrnu, systém by měl obsahovat následující funkce:

  • uspořádání fotografií dle data do jednotlivých kolekcí
  • zobrazení vybraných kolekcí fotografií
  • jednoduché vyhledávání podle údajů o fotografiích
  • založení a nahrání nové kolekce do fotoalba
  • přidání nové (zrušení staré) fotografie
  • automatické vygenerování off-line verze fotoalba

Celý systém bude vytvořen pomocí PHP, s využitím databáze MySQL. Pro jednoduší práci se fotografie nebudou ukládat do databáze, ale budou uloženy ve vyhrazeném adresáři. Aplikace je vhodná spíše pro lokální použití, nikoli pro vystavení na internetu. Při psaní těchto článků budu zároveň předpokládat, že máte alespoň základní znalost PHP a SQL (MySQL).

Dopředu upozorňuji, že z důvodu čitelnosti a přehlednosti ukázek zdrojových kódů vynechávám různé testování chybových stavů (všechny operace s databází, kontrola vstupu uživatelských dat a podobně) a také neošetřuji některé extrémní stavy, například že v kolekci fotografií nebude nalezena žádná fotografie. V neposlední řadě se vůbec nezabývám otázkou designu stránek. Také upozorňuji na to, že pokud se rozhodnete vystavit takovou aplikaci přímo na internet, je potřeba v kódu provést řadu úprav pro zvýšení bezpečnosti.

Návrh databáze

Návrh databázové základny musí vycházet přesně z výše provedeného rozboru systému. Jednou ze základních tabulek bude tabulka KOLEKCE, která bude zahrnovat všechny základní informace o dané kolekci fotografií. Další tabulkou bude FOTKA, která bude obsahovat záznamy o všech jednotlivých fotografiích ve fotoalbu. Každá fotografie bude náležet právě do jedné kolekce. U každé kolekce se bude evidovat i cesta (adresář), kde budou fotografie uloženy.

Databáze se bude jmenovat Album. Vytvoříte ji prostřednictvím příkazového řádku konzoly serveru MySQL následujícím způsobem:

create database album;

Tento krok je velmi důležitý, pokud jej neprovedete, nebudou vám skripty aplikace fungovat!

Tabulka Kolekce

Každá kolekce fotografií bude mít svůj název, rok, datum konání (může zde být od-do), kolik obsahuje celkem fotografií, po kolika fotografiích se mají zobrazovat jednotlivé části kolekce.

create table KOLEKCE (
 ID integer not null,
 NAZEV varchar(80) not null,
 POCET integer,
 ROK varchar(4) not null,
 DOBA varchar(30),
 CAST integer default -1,
 ADRESAR varchar(80) not null,
 primary key (ID)
);

Pokud položka CAST bude mít hodnotu -1, znamená to, že neurčujete, po kolika fotografiích se má kolekce na jednotlivých stránkách zobrazovat, zobrazí se vždy celá kolekce fotografií na jedné stránce (v opačném případě se kolekce fotografií bude zobrazovat právě po tolika fotografiích, kolik bude určovat hodnota atributu CAST). Atribut ADRESAR určuje adresář, ve kterém budou fotografie dané kolekce uloženy.

Tabulka Fotka

Tabulka FOTKA bude sdružovat záznamy o jednotlivých fotografiích. Jak jsem už nastínil, u každé bude evidován název (popisek), klíčová slova a datum. Dále je potřeba zaznamenat vazbu na příslušnou kolekci a jméno fyzického souboru na disku (jak plné velikosti fotografie, tak i jejího thumbnailu).

create table FOTKA (
 ID integer not null,
 KOLEKCE_ID integer,
 POPIS varchar(80),
 DATUM date,
 THUMB varchar(80) not null,
 PHOTO varchar(80) not null,
 primary key (ID),
 foreign key (KOLEKCE_ID) references KOLEKCE (ID),
);

Adresářová struktura

K základním informacím o systému patří ještě seznámení s adresářovou strukturou. Pro celou aplikaci si založte adresář Album a do něj uložte všechny skripty a fotografie. S každým novým skriptem vás budu informovat, kam jej máte uložit. Struktura zatím vypadá takto:

   Album\
             \- System
             \- Photos

Skript pro vytvoření databáze

Na závěr dnešního článku uvedu jednoduchý skript create_db.php, který vytvoří navrženou databázi. Skript create_db.php uložte do adresáře \Album\system.

<HTML>
<HEAD>
<TITLE>Vytvoření databáze</TITLE>
</HEAD>
<BODY>
<H1>Vytvoření databáze</H1>
<?
function vytvor_tabulku ($tabulka, $prikaz) {
  mysql(„Album“, $prikaz);
  $chyba = mysql_errno();
  if (!$chyba) {
    print „Tabulka <B>$tabulka</B> byla úspěšně vytvořena!<BR>“;
  }
  else {
    print „Při vytváření tabulky <B>$tabulka</B> došlo k chybě!<BR>“;
  }
}
mysql_Connect(„localhost“,“login“,“heslo“);
$command1 = „create table KOLEKCE ( ID integer not null, NAZEV varchar(80) not null, POCET integer, ROK varchar(4) not null, DOBA varchar(30), CAST integer default -1, ADRESAR varchar(80) not null, primary key (ID) )“;
vytvor_tabulku(‚KOLEKCE‘, $command1);
$command2 = „create table FOTKA ( ID integer not null, KOLEKCE_ID integer, POPIS varchar(80), DATUM date, THUMB varchar(80) not null, PHOTO varchar(80) not null, primary key (ID), foreign key (KOLEKCE_ID) references KOLEKCE (ID) )“;
vytvor_tabulku(‚FOTKA‘, $command2);
mysql_close();
?>
</BODY>
</HTML>

Celý skript create_db.php si můžete stáhnout. Ke skriptu bych ještě uvedl malou poznámku. U funkce mysql_connect() si můžete všimnout, že jako argumenty používám řetězce „localhost„, „login“ a „heslo„. Až se budete pokoušet skript spustit, je nutné za tyto řetězce dosadit konkrétní hodnoty dle vašeho nastavení MySQL serveru, nebo dle informací, které obdržíte od svého poskytovatele připojení k databázi MySQL. Tento postup platí i pro všechny další skripty, takže se již o něm nebudu zmiňovat.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět