HTML DOM Creator
Most a PHP egy igen ritkán használt képességét fogom bemutatni. PHP kóddal fogunk előállítani HTML kódot, amit a folyamat végén le is mentünk egy .html fájlba. Mindezt a "DOMDocument" osztály segítségével fogjuk megvalósítani, melyet a PHP5 és PHP7 verziók támogatnak.
Első lépésben létrehozzuk magát a dokumentumot, amiben majd fel fogjuk építeni a HTML DOM szerkezetünket. Illetve gondoskodunk arról, hogy a kimenetet formázva kapjuk meg.
PHP
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
Ezt követően pedig létrehozzuk az első DOM elemet, a "HTML" tag-et. A továbbiakban erre fogjuk "$html"-ként hivatkozni.
PHP
$html = $doc->createElement('html');
$html = $doc->appendChild($html);
A következő feladat, hogy a "HTML" tag közé elhelyezzünk további elemeket is. Mivel ezt egy meglévő DOM elembe szeretnék beágyazni, ezért az adott elemre kell használjuk a "appendChild" függvényt.
PHP
$head = $doc->createElement('head');
$head = $html->appendChild($head);
$title = $doc->createElement('title', 'Ez az oldal címe');
$title = $head->appendChild($title);
$body = $doc->createElement('body');
$body = $html->appendChild($body);
Az előző kódrészlet jól prezentálja az elemek egymásba ágyazásának módját. A "HEAD" tag a "HTML" tag-be került be. A "HEAD"-be pedig egy "TITLE" tag. Ha a tag megnevezése mögé pedig beírunk egy tetszőleges szöveget, azt azonnal be is fogja írni az adott tag-be.
Most pedig egy picit nehezítsünk és hozzunk létre egy táblázatot 5 sorral és 3 oszloppal.
PHP
$table = $doc->createElement('table');
$table = $body->appendChild($table);
$table->setAttribute('id', 'tablazat');
$table->setAttribute('border', '0');
$tbody = $doc->createElement('tbody');
$tbody = $table->appendChild($tbody);
$step = 1;
for ($row = 1; $row <= 5; $row++)
{
$tr = $doc->createElement('tr');
$tr = $tbody->appendChild($tr);
for ($col = 1; $col <= 3; $col++)
{
$td = $doc->createElement('td', $step);
$td = $tr->appendChild($td);
$step++;
}
}
Az összeállítás hasonló módon történt, mint az előző példánál, annyival kiegészítve, hogy a sorokat és oszlopokat két ciklussal hoztuk létre. De feltűnhetett még egy új lehetőség is, méghozzá a "setAttribute" függvény. Ezzel a függvénnyel tudunk az egyes HTML DOM elemhez különböző attribútumot társítani.
Mindezen felül hozzáadhatunk a készülő kódunkhoz kommenteket is.
PHP
$text = $doc->createComment(' komment ');
Végezetül pedig, hozzuk létre az így elkészült HTML fájlunkat.
PHP
echo 'Elkészült '.$doc->saveHTMLFile('created.html').' bájt méretű HTML fájl.';
OK, de ennél van egyszerűbb megoldás is! Nem?
Persze ezt meg lehet oldani lényegesen egyszerűbben is, ha a HTML kódot egy változóban tároljuk, majd kiírjuk egy fájlba az alábbi módon.
PHP
<?php
$html = '
<html>
<head>
<title>Ez az oldal címe</title>
</head>
<body>
</body>
<html>';
$file = fopen('created.html', 'w+');
fwrite($file, $html);
fclose($file);
?>
Ezzel viszont az lesz a baj, hogy a kódot egyetlen egy sorban fogja kiírni. Továbbá egy szinten túl eléggé zavaros lehet már az így készült kódunk. Továbbá az első példával létrehozott HTML kód szabványos lesz és nem kell attól tartani, hogy esetleg nincs megfelelően lezárva egy tag.
És mire jó ez?
A kérdés jogos, a válasz pedig egyszerű. Használhatjuk saját log fájlok készítéséhez, riportokhoz, vagy akár egy fájl alapú gyorsításra (file cache), ahol szeretnénk esetleg kivételt kezelni, vagy épp a fájl végére odaírni a cache fájl létrejöttének és megszűnésének dátumát. A felhasználási területek száma és formája csak a kreativitásunkra van bízva. A következő bejegyzésemben a HTML DOM parser-ről lesz szó, amiben a felépítés helyett a részekre szedésen lesz a hangsúly. Ezzel a két segédlettel még könnyen megvalósítható például az imént felhozott cache példa is.
Leírásaink azon kezdő és haladó programozóknak nyújtanak segítséget, akik már minimális szinten foglalkoztak weboldalkészítéssel. Ha szeretnél jobban elmélyülni a témában, vagy elsajátítani alapokat, még tovább fejlődni, akkor nézz körbe tanfolyam kínálatunkban, ahol a kezdőtől a profi szintig nyújtunk képzéseket a számodra.