CW(1,1) - Nasávání textů z databáze
Když už mám z URL vyloven permalink a ten je známý a existuje v databázi, pak můžu zahájit procesy k vykreslení jeho obsahu (článku pod unikátní adresou).
function nasajDATA() {
global $pdo, $permalink, $ARTICdata;
Zde vytahuji data z DB. Selekuji celý řádek databáze (*) dle kritéria, kde položka v sloupci URLalias rovná se permalinku. Jelikož je vždy jenom jeden, třídění podle identifikátoru (id) vzestupně by tam ani nemuselo být. Důležitější je ujištění, že se z DB vytáhne jediný řádek (limit 1), i když ani ono by tam být nutně nemuselo, protože hlavním rysem návrhu databáze je klíčová podmínka, že každý permalink tam existuje pouze jedinkrát (a má svůj unikátní číselný id a svůj unikátní URLalias).
$dotaz = $pdo->prepare("SELECT * FROM CONTENT WHERE URLalias=:permalink ORDER BY id ASC LIMIT 1");
$dotaz->bindValue(':permalink', $permalink, PDO::FETCH_ASSOC);
$dotaz->execute();
$ARTICdata = $dotaz->fetchAll();
return;
}
Tím mi tedy vznikne pole dat jménem ArticData, které obsahuje položky ze všech (asi deseti) sloupců v databázi, které můžu použít při vykreslování patřičné stránky textového obsahu.
Když mám načten jeden požadovaný řádek z tabulky DB, můžu zjišťovat o jaká data jde a na základě toho mu přiřadit patřičné view (šablonu vzhledu). Web jsem totiž po vzoru Joomly navrhl tak, že je zde více typů článků a vůbec obsahu. Lišící se kusy obsahu mají svoji příslušnou šablonu (view). Každý permalink vykresluje obsah náležící do právě jedné z kategorií:
Několik kategorií podle témat, které všechny používají jedinou šablonu (ArticleView) např.:
- PC hry
- Nemrtví
- Ruleta
- Život v německy mluvících zemích
- Srovnání školství v CZ oproti AT a CH
- Organizační články o webu bez vlastního obsahu
Dále hlavní organizační kategorie, které mají vlastní šablony:
- seznam článků (ArticleList)
- blog článků (ArticleBlog)
- rozsáhlý článek na automatické rozdělení do více menších (ArticMulti)
function zjistTYP() {
global $pdo, $permalink, $TYP;
if (!empty($permalink)) {
Selekuji tentokrát pouze jediný sloupec Typ z tabulky Content k danému permalinku:
$dotaz = $pdo->prepare("SELECT TYP FROM CONTENT WHERE URLalias=:permalink ORDER BY id ASC LIMIT 1");
$dotaz->bindValue(':permalink', $permalink, PDO::FETCH_ASSOC);
$dotaz->execute();
$TYP = $dotaz->fetchAll();
$TYP = $TYP[0]['TYP'];
Hodnota v poli Typ mi pak dá směrnici, jakou šablonu článku přiřadit, protože právě hodnotou Typ se liší příslušnost k šablonám. A vybírám je pomocí konstruktu switch:
switch ($TYP) {
case "CATlist":
Pomocí include prostě nacucnu šablonu do místa v základním skriptu (index.php). Na tomto místě později uplatním proměnnou ArticData, ve které už mám nachystáno vše, co k vybranému článku patří.
include 'v2CATLIST.view.php';
break;
case "CATblog":
include 'v3CATBLOG.view.php';
break;
case 'artic':
include 'v4ARTICLE.view.php';
break;
case 'articmulti':
include 'v5ARTICMULTI.view.php';
break;
case 'ANK':
include 'v6ANK.view.php';
break;
Když náhodou není definován Typ a přitom je permalink, pak opět stránka neexistuje a vyhazuji stavovou proměnnou 410 (permanentně neexistuje).
default:
Kvůli trablím u Googlu nově raději používám 410 než 404 nebo 302. O tom v samostatném článku.
http_response_code(410);
Starším postupem bych mohl použít přesměrování hlavičkou protokolu HTTP na custom404.
//header("location: https://digitalnicestovatel.cz/zz404.php");
exit;
Nebo nejstarším způsobem bych mohl přesměrovat na šablonu indexu, což by dnes bylo na tomto místě úplně špatně.
//include 'v1INDEX.view.php';
break;
}
} else {
Else zde znamená, že permalink je empty a tudíž správně přiřadím šablonu indexu (frontpage).
include 'v1INDEX.view.php';
}
return;
}
Tím vlastně končí vše kolem routingu článků, směrování obsahu do svých šablon.