Zajímá vás, jak přimět phpRS, aby vytvářel hezké SEF adresy? Aby umožňoval jejich kompletní správu? Čtěte dále.
Redakční systém phpRS je kvalitní redakční systém, pocházející z české produkce. Má mnohé výhody, ale i nevýhody. Mezi ony záporné vlastnosti patří slabá podpora SEF URL adres. Pokud se vám tento stav nelíbí, jsou pro vás tyto články, ve kterých si popíšeme jak „donutit“ phpRS, aby tyto hezké adresy podporoval. Prvně si pojďme vysvětlit, jak takové adresy vypadají.
Podoba SEF adres
To je pochopitelně to nejdůležitější, na čem se musíme dohodnout. Standardně phpRS generuje asi takovéto adresy (v celém textu budu předpokládat, že máme phpRS nainstalované na adrese http://localhost/phprs/):
http://localhost/phprs/clanek/2005122808
http://localhost/phprs/comment.php?akce=re&cisloclanku=2006090003&ck=1614
Nejspíše se mnou budete souhlasit, že takovéto adresy, to není ono. Přidat název článku za jeho číslo (jako zde na Programujte), např. http://localhost/phprs/clanek/2005122808-SEF-URL-Adresy-v-phpRS
, taky není to pravé. Pro příklad hezkých adres nemusíme chodit daleko, stačí se kouknout do krámu konkurence:
http://localhost/phprs/clanky/SEF-URL-Adresy-v-phpRS/
http://localhost/phprs/clanky/SEF-URL-Adresy-v-phpRS/nazory/pridat/
Toto už vypadá jinak, že? Na takové adresy se i lépe odkazuje, lépe se pamatují, vůbec jsou lepší. A dá se o nich prohlásit, že jsou SEF, a tím mohou pomoci SEO (ač lze tvrdit, že URL nemá na SEO vliv, já osobně zastávám opačný názor).
Celkově lze z názvu článku SEF URL Adresy v phpRS vytvořit 2 typické URL adresy:
SEF-URL-Adresy-v-phpRS
sef-url-adresy-v-phprs
Nejedná se o velký, avšak podstatný rozdíl. Oboje lze snadno vytvořit a oboje je jednoduše funkční, stačí si vybrat. Můj názor je vybrat si druhou možnost (malá písmena), protože je to na současném Internetu zvykem (aneb, kolik lidí zadává doménové jméno velkými písmeny?). Problém může být, když se rozhodneme pro jednu možnost, co s tou druhou. Existuje více možností:
- Vyhodit chybu – Článek nenalezen
- Toto je nejjednodušší řešení. Testujeme zadaný řetezec a pokud se rovná našemu řetězci (který byl vytvořen podle jedné z výše uvedených metod), zobrazíme daný článek, jinak nic. Toto není dobré řešení (každý se splete, zvlášť pokud máte v názvu velká písmena) a je lepší vybrat si jednu z ostatních možností.
- Brát za svou jakoukoliv variantu
- Taktéž řešení jednoduše proveditelné. Těsně před testem provedeme převod na malá písmena a poté testujeme. Při tomto postupu dochází k funkčnosti všech písmenkových variant. Problém je ve vyhledávačích, tento postup není SEO korektní, protože pokud fungují 2 a více URL adres k jednomu článku, dochází k duplikování obsahu. Je však lepší než metoda předchozí.
- Brát jen jednu variantu a druhou přesměrovat
- Dle mého názoru je toto řešení nejlepší. Budou zde nutné 2 testy. První otestuje zadanou URL s uloženou hodnotou a pokud sedí, zobrazí článek. Pokud ne, zkusí test pouze s malými písmeny. Pokud tento sedí, přesměruje s chybovým kódem 301 na správnou podobu URL. Při tomto kódu jsou platné všechny varianty, přičemž nedochází k duplikování obsahu.
Pokud jsme si vybrali jednu z variant, musíme dále prodiskutovat další podobu výsledné adresy. Jedním z kritérií je, zda používat či nepoužívat diakritiku. Jedním z příkladů stránky, používající diakritiku v URL, je Wikipedia.org. Já sám preferuji odstranění diakritiky kvůli dvěma prostým důvodům, a to jejímu pozdějšímu zobrazení v prohlížeči. MSIE i Firefox 1.5 zobrazí adresu v hexadecimálním tvaru, čili nehezky. A to bych si nenechal líbit. Durhým důvodemje opět zvyk uživatelů (v doméně taky nejsou háčky).
Dalším problémem může být oddělovač mezer. Běžně se používají 2 zápisy: - (pomlčka) a _ (podtržítko). Zde jednoznačně doporučuji pomlčku, protože podtržítko v Googlu značí rozdělené 1 slovo, zatímco pomlčka správně slova 2.
Jako poslední je nutno promyslet samotný tvar adres. Čili zda chceme používat http://localhost/phprs/clanky/nazev
, http://localhost/phprs/zpravicky/
, apod.
Návrh implementace
Samotné SEF adresy není třeba dávat do administrace, je však nutné, aby nahradily všechny URL ve veřejné části. Celý systém, který v těchto článcích vytvoříme, bude obsloužen jednou třídu (např. CSef), která musí umět:
- Převést jakýkoliv text do SEF podoby
- Toto by se mělo dít na základě nastavení z administrace (např. používat/nepoužívat diakritiku, apod.).
- Z předaných parametrů vytvořit proměnné používané phpRS
- Například z adresy
http://localhost/phprs/clanky/nazev/
vytvořit proměnnou $cisloclanku, apod. I toto by mělo být řízeno z administrace (co udělat, když článek neexistuje, apod.). - Mít metodu k vytvoření SEF adresy
- Kvůli možné změně částí adresy je tato metoda nutná. Její funkčnost by měla být asi následující. Z volání
$sef->CreateSEFAdress(\"clanek\",$link)
by měla vrátit (dle nastavení z administrace)http://localhost/phprs/clanky/nazev/
. - Umožňovat pohodlnou tvorbu vlastních adres
- Uvedu příklad. Běžně adresa článku vypadá asi takto:
http://localhost/phprs/clanky/kontaktujte-nas
a vy byste chtěli adresu změnit (např. vynechat částclanky
)? Daná třída musí na toto obsahovat v zásadě 2 možnosti:- Vyměnit adresu (čili systém nebude nikdy generovat výše uvedenou adresu, ale vámi chtěnou změnu)
- Vytvořit alias (systém bude odkazovat na vámi nechtěnou adresu, ale bude fungovat i vámi chtěná varianta).
Systémové požadavky
Samotný kód oné funkce a souvisejícího plug-inu budu psát pro PHP 5, konkrétně pro PHP 5.1.6. Na konci každého článku bude ke stažení výsledný kód jak pro PHP 5, tak PHP 4. K funkčnosti systému bude potřeba server Apache, povolený soubor .htaccess a povolený mod_rewrite. Námi psaný kód bude psaný pro phpRS verze 2.8.0, ke stažení bude verze pro phpRS 2.8.0 a phpRS 2.6.5.
Tak, tolik úvod plný teorie, příště se pustíme do vývoje oné třídy.