Veselé Vánoce a spoustu funkčních skriptů pod stromeček

 |  O blogu  |  3 738x

Všem svým čtenářům častým i příležitostným, i náhodným poutníkům kteří zabloudili na můj blog přeji veselé Vánoce a šťastný nový rok 2008. Stejně tak mým blízkým i lidem neznámým, všem přeji pohodové svátky a vstup do nového roku tou správnou nohou.

prani.png

A protože se můj blog mimo jiné věnuje i tvorbě webu, tak kromě pěkného přáníčka, které pro mě vytvořil Danburger vám nadělím pod stromeček také pár skriptů a ukázek kódu, o kterých si myslím, že jsou upotřebitelné. Otevřel jsem zdrojové kódy svého redakčního systému a vybral pár funkcí, které se "můžou hodit". Zmíním zde funkci pro vytvoření řetězce pro hezké url a také něco málo o lomítkách na konci adresy.

PHP : základ hezkých url

K vytvoření hezkých url nám někdy mod_rewrite nestačí. Při práci s databází je nutné data odeslaná z formulářů zpracovat, a dynamicky generovat přátelské řetězce například z titulku článku. Uvedená funkce se postará o odstranění diakritiky, převodu na malá písmena a náhradu všech "nepřípustných" znaků na pomlčky.

Předpokládejme i možnost, že pracujeme s kódováním UTF, a tak ještě před zavoláním funkce strtolower() převedeme všechny znaky s diakritikou na malá písmena. Zde se často zapomíná na přehlasované samohlásky, či slovenské zmakčené l'. Dále už můžeme převést všechna ostatní písmena na malá. Pro případ, že jsme řetězec ještě před zavoláním funkce prohnali přes htmlspecialchars() se na dalším řádku zbavíme případných entit. Dva následující řádky s funkcí preg_replace() sice nejsou z mé hlavy, ale jsou přesně to, co pro vytvoření hezkého řetězce potřebujeme: vše, kromě alfanumerických znaků, pomlčky a lomítka nahradíme za pomlčku. Druhým regulárním výrazem se zbavíme více možných pomlček po sobě. Ve finále už jen zavoláme mého dobrého kamaráda trim() a odstraníme pomlčky ze začátku a konce řetězce.

Následující funkce převede "Takový škaredý řetězec" na "takovy-pekny-retezec" :

function permalink($permalink) {
    $permalink = str_replace(
        array('Á','Ä','É','Ë','Ě','Í','Ý','Ó','Ö','Ú','Ů','Ü','Ž','Š','Č','Ř','Ď','Ť','Ň','Ľ','á','ä','é','ë','ě','í','ý','ó','ö','ú','ů','ü','ž','š','č','ř','ď','ť','ň','ľ'),
        array('a','a','e','e','e','i','y','o','o','u','u','u','z','s','c','r','d','t','n','l','a','a','e','e','e','i','y','o','o','u','u','u','z','s','c','r','d','t','n','l'),
        $permalink);
    $permalink = strtolower($permalink);
    $permalink = str_replace(array('<', '>'), "-", $permalink);
    $permalink = preg_replace("/[^[:alpha:][:digit:]_]/", "-", $permalink);
    $permalink = preg_replace("/[-]+/", "-", $permalink);
    $permalink = trim($permalink, "-");
    return $permalink;
}

PHP : automatické doplnění / umazání koncového lomítka

V druhém dílu svého seriálu o mod_rewrite jsem uváděl příklad, jak automaticky doplnit lomítko na konec adresy. Bohužel, zmíněné řešení není stoprocentní, a někdy je nutné najít alternativní postup při řešení problému. Zde na blogu koncové lomítko také doplňuji, ale používám k tomu následující funkci.

Ta nejdříve otestuje, zda-li se jedná o pěknou url, a to kontrolou výskytu tečky a otazníku v REQUEST_URI. Pokud není ukončena lomítkem proběhne přesměrování s hlavičkou 301 Moved permanently. To samozřejmě neproběhne, pokud byl již před tím zaslán chybový stav.

function add_ending_slash() { # automatické doplneni koncoveho lomitka
    if ( !ereg("/$", $_SERVER['REQUEST_URI']) && !strpos($_SERVER['REQUEST_URI'], "?") && !strpos($_SERVER['REQUEST_URI'], ".") ) {
        header("Location: ".$_SERVER['REQUEST_URI']."/", 301);
        return true;
    }
    return false;
}

Pokud chceme koncové lomítko automaticky umazávat, je nutné nejdříve ošetřit zacyklení: přesměrování totiž proběhne i v případě, když zadáme adresu exitujícího adresáře. Stačí jen otestovat $_GET nebo $_SERVER['QUERY_STRING'] na hodnotu empty. Potom si můžeme být jisti, že bylo aplikováno "nějaké" RewriteRule a koncové lomítko s klidným svědomím umazat s hlavičkou 301.

function remove_ending_slash() { # automatické umazani koncoveho lomitka
     if ( !empty($_GET) && ereg("/$", $_SERVER['REQUEST_URI']) ) {
         header("Location: ".preg_replace ("~/$~", "", $_SERVER['REQUEST_URI'])."", 301);
         return true;
     }
    return false;
}

Chtěl jsem napsat ještě i něco málo o stylech, ale už mě dnes přemáhá únava. Takže ještě jednou: Šťastné a veselé!

Facebook Twitter Google+

Komentáře k článku "Veselé Vánoce a spoustu funkčních skriptů pod stromeček"

Gravatar
Fondil 24. 12 2007, 20:27
1/7 Pondělí 24. Prosince 2007, 20:27  |  MSIE, Windows XP

Taky ti přeju šťastné a veselé, bohatého Ježíška a hodně úspěchů v novém roce.

Gravatar
redhead 1. 4 2008, 17:13
2/7 Úterý 1. Dubna 2008, 17:13  |  Firefox, Windows XP

zdravim,
mam otazku, kdyz potrebuju pridat lomitko na konec pomoci php (rewrite nejak zklamal), ale ten soubor prece nefunguje, ale ten skript musi bezet v nejakym souboru. Tak se chci zeptat jak se na ten soubor dostanes? pres error dokumenty nebo jak?

Dik

Gravatar
Mike 1. 4 2008, 23:13
3/7 Úterý 1. Dubna 2008, 23:13  |  Opera, Windows XP

[2] redhead: zde vůbec o error documenty nejde. máš dejme tomu adresu neco.cz/neco a chceš doplnit lomítko aby url vypadala vždy jako neco.cz/neco/ . k tomu funkce slouží. a skutečná adresa souboru může vypadat například neco.cz/?stranka=neco - pomocí mod_rewrite vytvoříš iluzi složky. jestli jsem teda tvůj dotaz pochopil správně.

Gravatar
redhead 2. 4 2008, 14:45
4/7 Středa 2. Dubna 2008, 14:45  |  Firefox, Windows XP

j to chapu, jde mi o to, že když pomoci modu rewrite přepišu
neco.cz/?ble=neco na neco.cz/neco/ tak mi odkaz neco.cz/neco (bez lomitka) nefunguje, to je logicke. Tak to hodi chybovej dokument protoze soubor neexistuje tak se chci zeptat, kde tu funkci spoustis aby to lomitko mohl pridat. Proto sem se ptal na chybovy dokumenty, myslel jsem ze prave v tom chybovym dokumenty presmerovavas na adresu s lomitkem

diky

Gravatar
Mike 2. 4 2008, 16:40
5/7 Středa 2. Dubna 2008, 16:40  |  Opera, Windows XP

[4] redhead: ono to jde zapsat i tak, že ti budou fungovat adresy jak s lomítkem tak bez lomítka. i přes to je ale dobré lomítko přidávat.

funkci volám na indexu úplně na začátku, vlastně to je jedna z prvních akcí, kterou provádím po připojení k databázi. ale stačí to prostě jen dřív, než začneš odesílat nějaký kód na výstup, dřív, než začneš zpracovávat url.

Gravatar
redhead 2. 4 2008, 21:54
6/7 Středa 2. Dubna 2008, 21:54  |  Firefox, Windows XP

jasny, dik

Gravatar
emilek125 12. 3 2009, 09:00
7/7 Čtvrtek 12. Března 2009, 09:00  |  MSIE, Windows XP

taky tě přeju pěkný vánoce

Tento článek není možné komentovat.

Pro zaslání Vašeho vzkazu použijte Návštěvní knihu.

Parak simati, Muballit mitte, Nergal allatu mellamu mesaru, La tapallah Annuaki, Kettu Puluthu qillatua