Øàáëîíû â PHP äëÿ ÷àéíèêîâ
// 7 ñåíòÿáðÿ 2003 ãîäàÈ ñíîâà çäðàâñòâóéòå. Äàâíî ÿ
Ñóæåñòâóåò òàêàÿ «ïðîáëåìà», êàê ðàçäåëåíèå îôîðìëåíèÿ
è ñîäåðæàíèÿ, è îòäåëåíèå èñïîëíÿåìîãî êîäà îò ïîëó÷àåìîãî
html’ÿ. Ìóõè — òàì, êîòëåòû — òóò. Ãðóáî ãîâîðÿ, ïðîãðàììèñò
ïðîãðàììèðóåò, äèçàéíåð äèçàéíèò è íèêòî íèêîìó íå ìåøàåò æèòü.
À åñëè íàäî ïîìåíÿòü
PHP õîðîø (õîðîø, ñîáàêà!) òåì, ÷òî ïîçâîëÿåò âñòðàèâàòü èñïîëíÿåìûå
êîíñòðóêöèè ïðÿìî â html. Ïëþñû ïîíÿòíû. Ìèíóñû, íàïðèìåð: äîâîëüíî
ñëîæíî ìåíÿòü îôîðìëåíèå â òàêîì êîäå: echo
"<b>".$boldtext."</b>"; Ãëóïûé äèçàéíåð èñïóãàåòñÿ
è óáåæèò, à óìíûé ïðîãðàììèñò ñêàæåò «ÿ âàì íå ãëóïûé äèçàéíåð,
÷òîáû åðóíäîé çàíèìàòüñÿ».
×åãî õî÷åòñÿ â èäåàëå? ×òîáû áûëà
Òî åñòü,
<html>
<title>[TITLE]</title>
<body>
[TEXT]
</body>
<html>
Òàì, ãäå ñòîèò [TITLE], äâèæîê âûâîäèò çàãîëîâîê, òàì, ãäå [TEXT] — ñîîòâåòñòâåííî, òåêñò.
Ëåãêî è ïðîñòî. È âñå ñ÷àñòëèâû. È ýòî ïðàâèëüíî.
Íî! Òóò è íà÷èíàåòñÿ ìàðàçì. Ñíà÷àëà ïèøåòñÿ «äâèæîê øàáëîíîâ»,
$page = str_replace ("[TITLE]", $title, $page);
$page =
str_replace ("[TEXT]", $text, $page);
Äàëüøå — áîëüøå. Îêàçûâàåòñÿ, ÷òî â íåêîòîðûõ ñëó÷àÿõ ýòîãî
ìàëî. Íóæíî áîëüøå ôóíêöèé! Íàïðèìåð, íàì íóæíî ïðîâåðÿòü: åñëè [TEXT]
ïóñòîé, òî âûâîäèòü îäíî, åñëè íå ïóñòîé, òî âûâîäèòü äðóãîå, òî åñòü,
ôàêòè÷åñêè, ââîäèòü óæå ìèíèìàëüíóþ ëîãèêó îòîáðàæåíèÿ. È ìû ïèøåì
Äî òàêîé ñòåïåíè íàâîðî÷åííûé, ÷òî äèçàéíåð, ðàäè êîòîðîãî âñå çàòåâàëîñü, — ÷òîáû òîò ñìîã ñàì ìåíÿòü îôîðìëåíèÿ, óæå íå ìîæåò ñìåíèòü îôîðìëåíèå ïîêà ñïåöèàëüíî íå âûó÷èò ÿçûê øàáëîíîâ.
À òåïåðü ïîòðÿñåì ìîçãàìè è õîðîøåíüêî ïîäóìàåì, ÷òî æå
ó íàñ ïîëó÷èëîñü. Ó íàñ ïîëó÷èëñÿ ôàêòè÷åñêè ÿçûê
ïðîãðàììèðîâàíèÿ, íàïèñàííûé íà PHP, êîòîðûé ìîæíî âñòðàèâàòü
â
Ïîçäðàâèì äðóã äðóãà. Ó íàñ ïîëó÷èëñÿ PHP, íàïèñàííûé íà PHP. Âåëîñèïåä äëÿ âåëîñèïåäà. Îñìûñëåíèå ýòîãî ïðèäåò ïîçæå.
À òåïåðü âîçâðàùàåìñÿ ê ïåðâîìó ïðèìåðó.
<html>
<title>[TITLE]</title>
<body>
[TEXT]
</body>
<html>
Ïîìíèòå? Ñðàâíèì åãî ñî ñëåäóþùèì ïðèìåðîì è ïîïðîáóåì íàéòè êàðäèíàëüíûå ðàçëè÷èÿ.
<html>
<title><?=$title?></title>
<body>
<?=$text?>
</body>
<html>
×åì îí êàðäèíàëüíî îòëè÷àåòñÿ? Íè ÷åì. Ãëóïûé âåðñòàëüùèê ïîéìåò, åñëè
åìó ñêàçàòü «íóæíî âñòàâèòü ïåðåìåííóþ text — ïèøè
<?=$text?>». Âìåñòå ñ òåì, ýòî — íå ÷òî èíîå,
êàê ñîêðàùåííàÿ çàïèñü îïåðàòîðà echo.
È íèêàêîãî èíòåðïðåòàòîðà øàáëîíîâ íå íóæíî.
Òî åñòü ñëåäóþùèé ïðèìåð
<html>
<?php
$text = "Ýòî òåêñò";
$title = "Ýòî
çàãîëîâîê";
?>
<title><?=$title?></title>
<body>
<?=$text?>
</body>
<html>
Äàëüøå — áîëüøå. Âûíîñèì âñå øàáëîíû â îòäåëüíûé ôàéë. È ïèøåì ïðîñòî:
<?php
$text = "Ýòî òåêñò";
$title = "Ýòî
çàãîëîâîê";
include "template.html";
?>
Èäåÿ ïîíÿòíà? Â ïðîöåññå èñïîëíåíèÿ <?=$èìÿ_ïåðåìåííîé?>.
Âåðñòàëüùèêó æå, ÷òîáû íàó÷èòüñÿ ðàáîòàòü ñ òàêèìè
«øàáëîíàìè», íóæíî âñåãî 3–5 ìèíóò äëÿ îçíàêîìëåíèÿ ñ îñíîâàìè
ñèíòàêñèñà PHP. È íå íàäî ó÷èòü
Íó ÷òî ïëîõîãî â òàêîì âîò øàáëîíå ñòðàíèöû?
<? if ($text==""): ?> <? else: ?> <? endif; ?>
</body><html><title><?=strtoupper($title)?></title>
<body>
Òåêñòà íåò, ïóñòî.
Ââåäåíûé òåêñò:
<b><?=$text;?></b>
</html>
Ïëþñû — íàëèöî. Äëÿ åãî âûâîäà íå íóæíî íèêàêèõ äîïîëíèòåëüíûõ âåùåé. Êðîìå PHP.
Âîò, ñîáñòâåííî, è âñå.
PS. Óâàæàåìûå óìíèêè. Äàííûé ñïîñîá «øàáëîíèçàöèè» äåéñòâèòåëüíî
ïîêðûâàåò 95% íóæä ïðîñòûõ ñìåðòíûõ. Åñëè âàì