MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY ˇP , ta svým významem říká, že jde o tučný text, a použít značku , která se ve většině prohlížečích také zobrazí text tučným řezem, ale nese v sobě informaci o tom, že se jedná o důležitou část textu, ne však o tom, jak se má zobrazovat. Oddělení obsahu dokumentu od jeho formy není samo o sobě dostatečné, pokud nejsou jednotlivé prvky obsahu označeny podle toho, co skutečně znamenají. Příkladem může být označení: < d i v c l a s s = " n a d p i s " > A h o j < / d i v > 1. World Wide Web Conroscium -- http://www.w3.org/ 2. Cascading Style Sheet -- http://www.w3.org/Style/CSS/ 6 2. OPTIMALIZACE PRO VYHLEDÁVAČE -- SEO Toto říká, že obsah elementu je významově jiný než okolní text a díky použité třídě CSS ho lze snadno nechat odsadit a zvětšit. Zápis je validní, forma a obsah jsou odděleny, ale daleko vhodnější je použít zápis: Ahoj Ten svým významem dává najevo, že se jedná o nadpis. To zajistí jeho odlišení i při vypnutých kaskádových stylech a vyhledávačům říká, že se jedná o nadpis. Vyhledávače slovům v nadpisech přikládají větší význam [3], protože více vypovídají o obsahu celé stránky, a stránka je na tato slova lépe dohledatelná. 2.1.3 Klíčová slova Vyhledávače hledají stránky podle klíčových slov a správná volba klíčových slov a sousloví přivede právě ty návštěvníky, kteří mají o stránky zájem. Zvolená klíčová slova se musí v textu opakovat, nejlépe v různých tvarech a spojeních. Pokud se například stránka zabývá srovnáním různých typů mobilních telefonů, ale spojení ,,mobilní telefony" se v ní vyskytuje pouze jednou, vyhledávač správně nezjistí, o čem stránka pojednává a nebude na toto slovní spojení dobře dohledatelná. Časté používaní klíčových slov v textu na ně klade větší důraz a zvyšuje dohledatelnost stránky na tato klíčová slova. Neplatí to však absolutně, při příliš velké koncentraci klíčových slov mohou vyhledávače stránky penalizovat [10, strana 51], protože přirozený text příliš často klíčová slova neobsahuje. Těžko si lze představit stránku, kde polovinu textu bude tvořit spojení ,,mobilní telefony", taková stránka by byla pro návštěvníka nečitelná a jde o zjevný pokus o podvod. 2.1.4 ,,Hezká" URL Dynamické stránky, typicky generované pomocí redakčního systému, mohou generovat pro vyhledávače i uživatele nesrozumitelné adresy, které nic nevypovídají o jejich skutečném obsahu. Například adresa: www.example.com/mobilni-telefony.html zřetelně napovídá, jaký bude její obsah a označuje se jako tzv. ,,hezká", naproti tomu stránka s adresou: www.example.com/index.php?aid=12&bid=3 4&cid=5 6&did=7 8 7 2. OPTIMALIZACE PRO VYHLEDÁVAČE -- SEO tuto vlastnost postrádá. Výhodou první adresy není pouze možnost uhádnout její obsah, ale i její zapamatovatelnost a z hlediska optimalizace pro vyhledávače i možnost vložení klíčových slov přímo do adresy Naproti tomu druhá adresa všechny tyto vlastnosti postrádá a navíc nejspíše nebude vůbec zaindexována a vyhledávače ji svým uživatelům nenabídnou, protože stránky s mnoha parametry adresy ignorují [10, strana 31]. V případě použití dynamicky generovaných stránek je vhodné zvolit redakční systém, který obsah zpřístupňuje pod volitelným názvem neobsahujícím parametry. 2.1.5 Hlavička stránky V hlavičce (X)HTML stránky se může nacházet mnoho různých značek a některé jsou pro SEO klíčové. Značky, které by měla stránka obsahovat jsou následující: * < t i t l e > je nejdůležitější značka, definuje název dokumentu a vyhledávače ji přisuzují klíčový význam. Weby se stejným obsahem tágu < t i t l e > na všech stránkách brání vyhledávačům dobře určit obsah jednotlivých stránek. * určuje širší popis obsahu stránky a některé vyhledávače jej vypisují ve výsledcích hledání. Optimální délka je do 250 znaků. Delšímpopisům se již nepřiřazuje velký význam [10, strana 49]. * dává informaci o klíčových slovech stránky. Google i Seznam tuto značku ignorují, protože může obsahovat jiná slova než jsou v textu stránky opravdu obsažena, a může být zavádějící. Neznamená to, že i ostatní vyhledávače na ní neberou zřetel, proto by měla v hlavičce stránky být. * vyhledávači nařizuje, že má stránku indexovat a sledovat odkazy v ní obsažené. Je možné ji vynechat, protože to vyhledávače dělají skoro vždy i bez této značky, využití má pouze tehdy, když chceme prohlížeči sdělit, aby stránku neindexoval, v tom případě musí obsahovat content="noindex, nof ollow". U stránek vyžadujících přihlá- 8 2. OPTIMALIZACE PRO VYHLEDÁVAČE -- SEO šení nebo u administračního rozhraní webu je indexování vyhledávačem nežádoucí, jelikož nejsou určeny pro běžné návštěvníky. 2.1.6 Flash Formát Flash přináší webovým stránkám možnost prezentace multimediálního obsahu a ,,zkrášlení" pomocí animací, avšak nevhodné použití této technologie dokáže celý obsah webu skrýt před vyhledávači, protože ty neumí číst obsah těchto animací, ani rozpoznat odkazy, které mohou obsahovat. Stránka složená pouze z Flash animace neobsahuje pro vyhledávač žádný smysluplný text a její obsah není indexován. Také snaha mnoha tvůrců stránek o vylepšení pomocí Flash menu bez vytvoření alternativního menu pomocí (X)HTML zabrání vyhledávači navštívit podstránky webu, protože nemůže zjistit, že takový web nějaké podstránky vůbec obsahuje. Použití technologie Flash je tedy vhodné pouze pro grafické vylepšení stránky nebo prezentaci multimediálního obsahu, ale pro textový obsah nebo navigaci webu je nevhodná. Webové prohlížeče umí Flash přehrát, pokud mají nainstalován příslušný plug-in. Pokud tedy návštěvník tento plug-in nainstalovaný nemá, skryje tvůrce obsah své stránky nejen před vyhledávačem, ale i před návštěvníkem. 2.1.7 JavaScript Skripty napsané v JavaScriptu se provádí v prohlížeči návštěvníka a mohou webovým stránkám dodat funkcionalitu, kterou není možné vytvořit pomocí samotného (X)HTML a CSS, ale pokud se použijí nevhodně, může být některým návštěvníkům spíše překážkou, protože né všechny prohlížeče umí JavaScript provádět. Stránka se, podobně jako u technologie Flash, může stát nepřístupná pro návštěvníka i vyhledávač. Ideální použití JavaScriptu je na doplňkové funkce stránky, které mohou uživateli práci se stránkou pouze ulehčit (např. při okamžité kontrole vstupních údajů for­ mulářů). 2.1.8 Kvalitní obsah Webová stránka by měla obsahovat v nějakém ohledu přínosné informace nebo být pro návštěvníka jiným způsobem zajímavá. Pokud je stránka dobře dohledatelná, ale neobsahuje nic zajímavého, návštěvník odejde a příště se jí vyhne. Kvalitní obsah by měl návštěvníka přesvědčit, aby ji navštívil i v budoucnu. Kvalitní obsah stránky je klíčový pro úspěch celého webu a bez něj je optimalizace bezpředmětná. 9 2. OPTIMALIZACE PRO VYHLEDÁVAČE -- SEO 2.2 Off page faktory a jejich vliv Off page faktory souvisí s okolím stránky a jejich ovlivnění nemusí být pro autora stránky jednoduché, protože se nemusí nacházet ani na webovém serveru stránek. 2.2.1 Zpětné odkazy Odkazy vedoucí z jiných webů vypovídají o kvalitě stránky a umožňují stránku vyhledávačem nalézt. Robot vyhledávače pravidelně navštěvuje stránky, které vyhledávač indexuje, a pokud nalezne nový odkaz, navštíví jej také a potom je stránka zahrnuta do výsledků vyledávání. O kvalitě stránky vypovídá počet a kvalita zpětných odkazů. Stránky na internetu si tím, že na sebe odkazují, předávají část svého hodnocení. Proto zpětný odkaz z kvalitní stránky s vysokým indexem PageRank pomůže hodnocení více, než z méně kvalitní stránky [1]. V úvahu se bere i tématičnost odkazu [10, strana 61], mnohem významnější je odkaz z webu s tématicky podobným obsahem, než ze stránky zabývající se něčím naprosto odlišným. Zpětné odkazy stránky lze získat dvěma způsoby, a to buď přirozenou cestou registrace stránek do nejrůznějších internetových katalogů (Současným největším světovým katalogem je Open Directory Project3 ) a obsahem natolik kvalitním, že autoři jiných stránek na ni budou sami rádi odkazovat, anebo tyto odkazy z jiných kvalitních stránek koupit, ale to už je záležitost marketingu. 2.2.2 Mapa stránek Mapa stránek je vhodný způsob k zajištění indexování všech stránek webu ve vyhledávačích. Obsahuje seznam všech adres webu a volitelně i určení četnosti aktualizací, čas poslední aktualizace a relativní důležitost stránky v porovnání s jinými stránkami daného webu. Google poskytuje i rozhraní pro její správu spolu s dalšími nástroji na správu indexace webu4 . K vytvoření mapy stránek slouží Sitemap protocol5 , což je univerzální formát podporovaný mnoha vyhledávači. 3. http://dmoz.org/ 4. http://www.google.com/webmasters/sitemaps 5. http://www.sitemaps.org/protocol.php 10 2. OPTIMALIZACE PRO VYHLEDÁVAČE -- SEO 2.2.3 Duplicitní obsah Spatné nastavení webového serveru vyústí v problém duplicity všech stránek webu. Webové stránky bývají ve většině případů dostupné na adrese www. example . com i example . com, to je v pořádku, ale v mnoha případech to znamená 2 stejné weby na dvou adresách, a to optimalizaci rozhodně nepomáhá. Takto nastavený webový server komplikuje dosažení vyššího indexu PageRank, protože stránky, které na tento web odkazují, odkazují na variantu s www nebo bez www dle libosti autora odkazu. Obě varianty fungují a zdá se být vše v pořádku, avšak PageRank je pro obě adresy počítán zvlášť. Důsledek může být takový, že www. example. com má PageRank hodnoty 3 a example. com hodnotu 2, ale pokud by existovala pouze jedna varianta, mohla by mít 4. Dva méně dohledatelné weby přinesou méně návštěvníků než jeden více dohledatelný, proto je takové nastavení chybou. Ideální řešení takovéto situace je nastavit webový server tak, aby adresu example, com přesměroval pomocí kódu 301 HTTP protokolu (permanentní přesměrování) na www. example . com, případně naopak z adresy s www na začátku na adresu bez www. Pro návštěvníka pak budou fungovat adresy obě, pouze při jedné variantě dojde k rychlému přesměrování na straně serveru, a pro vyhledávač to znamená pouze jednu stránku s unikátním obsahem. Podobný problém vzniká při použití redakčního systému, který dovoluje situaci, při níž nabízí jeden obsah na dvou adresách. Typickým příkladem může být, pokud na example . com/ a example . com/?stranka=l je zobrazen stejný obsah. Pokud se redakční systém takto chová, dochází ke stejnému problému, jako u špatně nastaveného webového serveru, pouze v menším rozsahu a pokud problém není ošetřen, může dojít i k penalizaci stránky pro duplicitní obsah. 2.2.4 Soubor robots.txt Soubor robots.txt6 slouží podobně jako značka k povolení nebo zakázání indexace stránek. Měl by být přístupný v kořenovém adresáři webu na adrese www. example. com/robots . t x t . Umožňuje zakázat nejen jednotlivé stránky, ale i celé adresáře webu jednotlivým vyhledávačům a pomocí řádku Sitemap: http://www.example.com/sitemap.xml upozorňuje na mapu stránek. 6. http://www.robotstxt.org/ 11 Kapitola 3 Návrh redakčního systému 3.1 Proč redakční systém pro SEO? Redakčních systémů je nepřeberné množství a mnohé z nich umožňují vytvářet webové stránky v souladu s pravidly pro SEO. Mnohé z nich však tyto vlastnosti získávají až po doinstalování modulů, které toto umožní. Navíc se většinou jedná o velké systémy se složitým ovládáním, které nejsou vhodné pro menší weby, a méně počítačově gramotní uživatelé je nedokáží ovládat. Navrhl jsem tedy redakční systém, který se v porovnání s jinými open source redakčními systémy jako je Joomla1 nebo Drupal2 relativně jednoduše ovládá. Umožňuje dodržovat základní pravidla SEO i běžným uživatelům a v rukou odborníka dokáže jednoduše a efektivně optimalizovat stránky malého až středního rozsahu. 3.2 Požadovaná funkcionalita systému Z pohledu optimalizace pro vyhledávače má redakční systém mít tyto vlast­ nosti: * ,,hezká" URL * jednoduše nastavitelný obsah titulku, popisu a klíčových slov na všech stránkách webu * automaticky generovaná mapa stránek * možnost přesměrování stránek při změně adresy kterékoli stránky v rámci serveru * zamezení zobrazení duplicitního obsahu na více URL adresách 1. http://www.joomla.org 2. http://www.drupal.org 12 3. NÁVRH REDAKČNÍHO SYSTÉMU * snadné vytváření dobře strukturovaného obsahu pomocí editoru * korektní soubor robots.txt Z hlediska správy webu jsem redakční systém vyvíjel s ohledem na tyto klíčové vlastnosti: * snadná správa statických stránek webu * publikování článků řazených do editovatelných kategorií * možnost vkládání obrázků ve formátech JPEG, GIF a PNG do veškerého obsahu * publikace fotografií a jejich řazení do fotogalerií * validita všech generovaných stránek * editace menu a jejich položek * oddělení funkční a prezentační části skriptů * bezproblémová změna designu pomocí kaskádových stylů i generovaného HTML kódu * připravenost administračního rozhraní k případným předkladům do cizích jazyků * jednoduchá rozšiřitelnost o další funkce dle potřeby konkrétní pre­ zentace * univerzální kódování UTF-8 * generování RSS3 kanálu 3.3 Návrh databáze Návrh systému jsem provedl pomocí metody datově orientovaného přístupu [7]. Pohled na zjednodušený entitné relační diagram ilustruje základní vazby entit a atributů systému (Obrázek 3.1). 3. Really Simple Sindication -- http://cs.wikipedia.org/wiki/RSS 13 3. NÁVRH REDAKČNÍHO SYSTÉMU articles body articlejd (PFK) text _l_ article categories odkazuje na teľ articles articlejd (PK) categoryjd (PFK) url descr keyw lang released header annotation author dt categoryjd (PK) name url title descr keyw injnenu menu order obsahuje články \ presmerovaní 1 odkazuje na fn sites id url lang enabled file name title descr keyw (PK) 1-- přesměrování-' s přesměrování I ' , odkazuje na redirects redirectjd (PK) redirectfrom redirectto ts / presmerovaní _ . / static sites sitejd (PK) released lang url name title dt descr keyw x 1 \ \ \ \ \ \ \ \ odkazuje na"| \ \ I přesměrování '^přesměrování odkazuje na tělo -- _l_ photo_galleries galleryjd (PK) lang name descr keyw url dir text staticsitesbody sitejd (PFK) body obsahuje položky menus menujd (PK) name essential i ' ' menu items item d (PK) menu id (HhK) url text title menu order odkazuje na podmenu odkazuje na __ Obrázek 3.1: Entitně relační diagram redakčního systému 3.4 Popis typů stránek Systém rozlišuje následující typy stránek: * statická stránka * článek * výpis kategorie článků * galerie obrázků 14 3. NÁVRH REDAKČNÍHO SYSTÉMU * obrázek * funkční stránka Statická stránka je tvořena záznamem v tabulce s t a t i c . s i t e s , který obsahuje všechny potřebné údaje o stránce mimo samotného obsahu. Ten se nachází v tabulce static_sites_body a s příslušnou stránkou je spojen pomocí identifikátoru, který jednoznačně určí, jaké stránce daný obsah patří. Článek je v databázi reprezentován podobně jako statická stránka. Tedy hlavička se nachází v tabulce a r t i c l e s a tělo článku v a r t i c l e s Joody. Rozdíl je pouze v tom, že hlavička může obsahovat anotaci. Kategorie článků reprezentuje soubor údajů o celé kategorii a články jsou k ní přiřazeny identifikátorem kategorie, který se nachází v hlavičce každého článku. Články se pak na výstupu implicitně řadí podle data, kdy nejnovější články jsou vypisovány nejdříve. Galerie obrázků funguje podobně jako kategorie článků. Jednotlivé galerie s popisem a dalšími údaji jsou uloženy v tabulce p h o t o _ g a l l e r i e s a jednotlivé fotografie z tabulky photos jsou ke galerii přiřazeny jejím identifikátorem, který obsahuje každý záznam o fotografii. Funkční stránka, resp. její kód, je napsán v PHP souboru a uložen ve zvláštním adresáři. V databázi jsou pak v tabulce f n . s i t e s uloženy pouze informace pro zobrazení HTML hlavičky stránky a název příslušného souboru, ve kterém je uložen skript vykonávaný při zavolání stránky. Tato implementace dovoluje relativně jednoduché programování dalších funkcí pro konkrétní webové projekty. 15 Kapitola 4 Popis implementace Redakční systém jsem se rozhodl napsat ve scriptovacím jazyce PHP1 , jelikož se jedná o nejpoužívanější jazyk pro tvorbu dynamických webových stránek a je dostupný na většině webhostingových služeb. Skripty jsou napsány běžným způsobem a obsahují jednoduché výrazy [5] i složitější konstrukce [9]. PHP bývá nejčastěji implementováno na serverech s webovým serverem Apache2 a s operačními systémy Unix nebo GNU/Linux, pro které je nativně vytvořen. Jako databázový server používám MySQL3 , který je také velmi často používán v kombinaci s jazykem PHP a webovým serverem Apache. Jedná se tak o stabilní, ověřenou a široce dostupnou platformu pro tvorbu dynamických webových stránek. Systém není vázán pouze na MySQL, skript komunikující s databází MySQL je možné nahradit jiným a použít jiný databázový systém, jako například PostgreSQL nebo MSSQL. Podobně i webový server nemusí být nutně Apache a je možné použít jakýkoli jiný, který bude zvládat přepis adres. 4.1 Souborová struktura V kořenovém adresáři se nacházejí pouze PHP skripty pro zobrazení základních typů stránek, dále soubory index, php, i n i t _ c l a s s .php, conf .php, soubory kaskádových stylů, r o b o t s . t x t , f a v i c o n . ico (ikona stránky), sitemap.xml (mapa stránek), HTML stránka chyby 404 a pravidla pro mod_rewrite webového severu Apache. Zbytek systému je skrytý v následujících adresářích: * admin -- administrační rozhraní pro správu webu * cache -- adresář potřebný pro funkci třídy šablon Smarty 1. http:/ / www.php .net 2. http://apache.org 3. http://www.mysql.com/ 16 4. POPIS IMPLEMENTACE * c l a s s e s -- adresář globálních tříd používaných celým redakčním systémem * do c s -- manuály redakčního systému * download -- soubory nabízené návštěvníkům ke stažení * fee -- soubory obsahující speciální funkce používané některými jinými skripty * fn_sites -- stránky poskytující přídavnou funkcionalitu * images -- obrázky v tělech textů a v galeriích * img -- obrázky layoutu (designu) webu a administrace * j s -- javaseripty použité ve veřejné části stránek * lang -- statické texty a zprávy systému podle používaného jazyka * smarty -- adresář třídy šablon * t emp 1 at e s -- šablony stránek a administrace * t e m p l a t e s.compile -- předkompilované šablony * xml -- RSS kanály 4.2 Konfigurační soubor Konfigurační soubor conf. php v kořenovém adresáři webu nastavuje klíčové vlastnosti celého webu. První oddíl Website settings definuje tyto kon­ stanty: * SITE_NAME -- název webu, vkládá se do titulku stránky za název konkrétní stránky * SITEJJRL -- URL adresa webového serveru s implementací systému (např. h t t p : //www. example . com/) * S ITE_DE SCRIPT ION -- popis stránky používaný např. jako podtitul RSS exportu * CMS-VERS ION -- verze redakčního systému 17 4. P O P I S I M P L E M E N T A C E * CONTENT_EDITOR,CONTACT_EMAIL, WEBMASTER -- e-maily správce obsahu, kontaktní e-mail a e-mail správce webu * DEFAULT_PAGE -- hlavní stránka webu načítaná automaticky po zadání URL webového serveru * ERROR_PAGE -- stránka zobrazovaná po nenalezení volané stránky (chyba 404) * USE S_HOMEPAGE -- definuje, zda se má pro zobrazení hlavní stránky volat soubor homepage. php, ten může obsahovat PHP kód specifický pro zobrazení hlavní stránky konkrétního projektu Další oddíly konfiguračního souboru obsahují nastavení tříd a vlastností. Languages nastavuje jakyk webu, Smarty settings šablonovací třídu, Database settings definuje adresu databázového serveru, název databáze, uživatele a heslo. Obsahuje také chybová hlášení zobrazovaná při neúspěchu připojení k databázi. Session settings určuje název a dobu expirace session nesoucí mimo jiné i přihlašovací údaje po přihlášení uživatele do administrace. Authentication settings nastavuje základní parametry uživatelského jména a hesla potřebného pro přihlášení a chybová hlášení, která se mohou zobrazit při přihlašování. Oddíl Tables obsahuje nastavení názvu všech tabulek používaných systémem, umožňuje tak případné přejmenování tabulek nebo přidání prefixu k jejich názvu, a tím provoz více implementací redakčního systému na jedné databázi. Další nastavení definují chování některých funkcí webu, jako např. počet článků na stránce s výpisem kategorie, maximální velikost obrázků nebo souborů při uploadu, nastavení RSS exportu, nastavení mapy stránek, fotogalerie a případně dalších funkcí implementovaných v konkrétním projektu. 4.3 Třída šablon Redakční systém používá ke generování HTML kódu třídu Smarty verze 2.6.164 . Ta zajišťuje generování HTML kódu s obsahem dodaným prováděnými PHP skripty, protože ty neřeší jejich zobrazení (oddělení funkční a prezentační části skriptů) [6]. Třída po prvním sestavení šablony uloží její zkompilovanou formu do příslušného adresáře a urychlí tak každé další zobrazení stránky touto šablonou. 4. http://smarty.php.net 18 4. POPIS IMPLEMENTACE 4.4 Přepis adres Všechny typy stránek v systému jsou zobrazitelné pouze při zadání právě jednoho správného URL. Adresa každé stránky je podobná následujícímu příkladu: www.example.com/ webova-stranka-typl23 Část adresy za názvem domény a lomítkem, v příkladu webova-st ranka, označuje název zvolený při tvorbě stránky aje uložen v atributu ur 1 tabulky příslušného typu stránky. Poté následuje -typ, kde typ je zkratka typů stráne: * s -- statická stránka * a -- článek * ac -- kategotie článků * g -- galerie obrázků * ph -- obrázek * fn -- funkční stránka Poslední složkou adresy je číselný řetězec identifikátoru i d, v tomto případě 123. Ten je jednoznačným identifikátorem záznamu v tabulce daného typu. Pro identifikaci stránky stačí pouze zkratka typu a příslušný číselný identifikátor, první část adresy je obsažena pouze kvůli ,,hezkým" URL a přidání klíčových slov do adresy stránky. Po nalezení záznamu v tabulce odpovídajícího typu stránky je zkontrolována i tato část adresy a pokud souhlasí s řetězcem v atributu ur 1 nalezeného záznamu, je stránka zobrazena, jinak je vrácena chyba 404 (stránka nenalezena). Toto zamezí zobrazení při zadání chybné adresy a vzniku duplicitních stránek. Přepis ,,hezké" adresy do běžného dynamického tvaru, ve kterém jsou parametry předány v proměnných souboru index.php, zajišťuje modul webového severu Apache zvaný mod_rewrite. Redakční systém má svá vlastní pravidla pro přepis adres podle typů stránek a ty jsou uložena v souboru . h t a c c e s s v kořenovém adresáři webu. 4.5 Zobrazení stránky Stránku, která se má zobrazit, určují tři proměnné. Tyjsou po přepisu adresy předávány jako parametry ke zpracování souboru index. php v hlavním 19 4. POPIS IMPLEMENTACE adresáři webu. Soubor index. php nejprve načte soubor conf. php, který obsahuje definice konstant. Ty obsahují inicializační hodnoty všech tříd a případné další nastavení redakčního systému. Následně je volán soubor i n i t _ c l a s s . p h p a zinicializuje všechny potřebné třídy, mimo jiné i třídu page . c l a s s . php, která prodle parametrů typ, id a u r l načte parametry volané stránky (titulek, popis a klíčová slova). Poté jsou načteny menu webu, přiřadí se třídě šablon a následně je podle typu stránky volán skript, který je zodpovědný za načtení obsahu stránky a vygenerování hlavičky a těla stránky. Nakonec je zobrazena šablona patičky stránky. 4.6 Přesměrování Při změně řetězce URL již vytvořené stránky je vhodné do systému zakomponovat funkci přesměrování ze staré adresy na novou, protože stránka mohla být už zaindexovaná vyhledávači pod starou adresou a při otevření takového odkazu ve výsledcích hledání by se návštěvníkovi zobrazila pouze stránka informující o chybě 404 (požadovaná stránka nebyla nalezena). Návštěvník by posléze nejspíše odešel a nehledal by novou adresu stránky, a proto je v systému implementována funkce přesměrování. Po změně URL řetězce je možno zadat i přesměrování ze staré adresy stránky na novou. Pokud systém nenalezne stránku v databázi, spustí se procedura hledající adresu v tabulce přesměrování. Při nalezení záznamu, který definuje přesměrování z hledané adresy na jinou, systém vrátí pomocí HTTP protokolu stav 301 (permanentní přesměrování) a novou adresu stránky. Návštěvník je tak automaticky přesměrován na stránku pod novou adresou a vyhledávač při příští kontrole stránky rozezná přesměrování a zaindexuje stránku pod novou adresou. 4.7 Menu Jednotlivá menu jsou reprezentována záznamem v tabulce menus, jejich položky jsou uloženy v tabulce menu_it ems a jsou k nim přiřazeny pomocí identifikátoru ukazujícího do tabulky menus. Každá položka může odkazovat na stránku nebo soubor v redakčním systému nebo kdekoli na internetu. Položka také obsahuje údaj reprezentující její pořadí v rámci jednotlivého menu, přičemž konzistenci pořadí zajišťuje PHP skript vytvářející a editující položky menu. 20 4. POPIS IMPLEMENTACE 4.8 Editor textů a obsahu Pro snadnou editací textů musí být použit nějaký WYSIWYG5 editor, který jednoduše umožní běžnému uživateli editovat texty a pomůže je i správně strukturovat. Potenciálně vhodných editorů, které je možno zapracovat do redakčního systému je několik. Většina redakčních systému podporuje javascriptové open source editory jako TinyMCE6 nebo FCKeditor7 . Oba dva byly původně implementovány i do mého redakxčního systému. Ani jeden však nevyhovoval z důvodu svého nevalidního výstupu, což porušovalo jeden ze základních požadavků na redakční systém. Nakonec jsem se rozhodl použít proprietární editor XStandard8 , jehož výstup je striktně validní podle normy XHTML l.l9 a jeho ovládání subjektivně přehlednější. Do systému je implementována verze Lite, která je poskytována jako freeware. Nabízí sice pouze základní, ale zcela dostačující možnosti editace textu. V prohlížeči funguje jako ActiveX prvek a podporuje prohlížeče Microsoft Internet Explorer, Firefox, Opera a Safari a je tedy dostatečně univerzální pro použití na různých platformách. Na každé stránce s editorem XStandard je ponechána volba pro případné vypnutí editoru a editaci obsahu pomocí HTML prvku