Nov
19
Смених bTemplate със собствен прост engine
at
07:55 by
nofearinc
Category: PHP
В петък успешно закъснях с крайния срок на една фаза, разчитайки на bTemplate сляпо. Оказа се, че е почти невъзможно да подам PHP код за интерпретация, който да се изпълни и резултатът му да се подаде като параметър на желаното място в шаблона. Ето защо трябваше да пренапиша няколко странички (за щастие имаме повече backend и разчитаме малко на шаблона) с нов outlook, така че да мога да подавам безпроблемно динамично съдържание. Credits на Борис Червенков, че ми даде много полезни идеи от собствен опит за реализация на шаблона.
Цялостният модел изглежда горе-долу като MVC модела, т.е. данните са привидно ограничени под тези три направления на model-view-controller. Страниците са приведени под следния формат:
page1.php -> page1.view.php -> someController.php -> page2.php -> page2.view.php
page1.php и page2.php се занимават с модела. Те извършват връзката към базата от данни, XML, процедури и прочие и в крайна сметка от тях се извличат масиви с данни или някакви важни променливи. В тези модели се пазят също и пътища към файлове за включване в шаблона или променливи като заглавието на страницата. В тези страници включваме страницата-шаблон и подаваме като параметър определеното view!
page1.view.php и page2.view.php обслужват нормалния преглед на съдържанието. Те използват данните от предните страници и го извеждат на потребителя.
layout.php - шаблона, еднакъв за всички страници. Има някои празни места за променливи или пътища до менюта, хедъри и прочие.
someController - изпълнява ролята на препращач; може да има контролер за всеки по-основен event или един глобален контролер, който обслужва целия портал.
Кратка структура на модела:
<?php $arrayData = getData(); $tmplTitle = "List title" $tmplContentFile = "list.view.php" .... include(\\''layout.php\\'');?>
Примерна view страница:
<table> <?php for ($arrayData as $a) { ?> <tr><td> ... </td><tr> <?php } ?></table>
Шаблонът layout.php:
<?php // parameters $tmplTitle = (isset($tmplTitle)) ? $tmplTitle : "Default title"; $tmplHeaderFile = .... . . . .?><html>...<title><?php echo $tmplTitle; ?></title> <body> <?php inlcude($tmplHeaderFile) ?> .... <?php include($tmplContentFile); ?> ....</body></html>
Безподобния пост.
Related posts brought to you by Yet Another Related Posts Plugin.


















[...] Със сигурност има по-оптимално решение, но това работи в този случай. Ето и логиката в модела от даннитe: test.php (скелета на проектите ми приблизително описан тук): [...]