Я не буду спорить о выборе механизма шаблона против только PHP. Я предпочитаю не использовать механизм шаблонов, например Smarty, потому что я хотел бы узнать, как правильно создать шаблон с использованием PHP и HTML. Может ли кто-нибудь предоставить ссылки или примеры того, как создать страницу шаблона?
Просто используйте альтернативный синтаксис PHP для конструкторов языка if / for / foreach, которые специально разработаны для этой цели:
<h1>Users</h1> <?php if(count($users) > 0): ?> <table> <thead> <tr> <th>Id</th> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tbody> <?php foreach($users as $user): ?> <tr> <td><?php echo htmlentities($user->Id); ?></td> <td><?php echo htmlentities($user->FirstName); ?></td> <td><?php echo htmlentities($user->LastName); ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php else: ?> <p>No users in the database.</p> <?php endif; ?>
Я также предлагаю создать помощники вида для выходов HTML, которые очень похожи и используют их вместо повторного HTML-кода.
Это действительно не так уж сложно.
Non-PHP goes out here <?php # PHP goes in here ?> More non-PHP goes out here <?php # More PHP goes in here ?>
function returnView($filename,$variables){ ob_start(); $htmlfile = file_get_contents($filename); foreach($variables as $key=>$value){ $htmlfile = str_replace("#".$key."#", $value, $htmlfile); } echo $htmlfile; return ob_get_clean(); } //htmlfile <html> <title>#title#</title> </html> //usage echo returnView('file.html',array('title'=>'hello world!');
im my framework У меня есть функция, которая загружает представление, а затем выводит его в макет:
public function returnView(){ ob_start(); $this->loader(); $this->template->show($this->controller,$this->action); return ob_get_clean(); }
Макет выглядит следующим образом:
<html> <head> <title><?php echo $this->layout('title'); ?></title> </head> <body> <?php echo $this->layout('content'); ?> </body> </html>
Что бы вы могли подумать, если вы должны выбрать подход, основанный на MVC, если вы включаете свои шаблоны внутри объекта (один из его методов класса), тогда $this
внутри файла шаблона укажет на объект, из которого вы его вызвали.
Это может быть очень полезно, если вы хотите обеспечить какую-либо инкапсуляцию для ваших шаблонов, т. Е. Если вы не хотите полагаться на глобальные переменные для передачи динамических данных (например, из базы данных).
Я использовал различные механизмы шаблонов, а также разработал свои собственные, со временем стал более сложным. Я считаю, что лучше всего использовать его как можно проще, используя собственный материал php, вместо создания сложных функций. (в этой статье есть несколько хороших точек: скучная архитектура хороша ). То, что я обнаружил, было намного лучше читабельности и обслуживания при возвращении в проект через несколько месяцев или лет.
Например:
<? $name="john"; $email="john@xyz.com"; require "templates/unsubscribe.php";
– шаблоны / unsubscribe.php –
<? $o=<<<EOHTML Hi $name, sorry to see you go.<BR> <input type=input name=email value=$email> <input type=submit value='Unsubscribe'> EOHTML; echo $o;
Используя пример Ричарда, но более простой:
<h1>Users</h1> <? if(count($users) > 0): ?> <table> <thead> <tr> <th>Id</th> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tbody> <? foreach($users as $user): ?> <tr> <td><?= htmlentities($user->Id) ?></td> <td><?= htmlentities($user->FirstName) ?></td> <td><?= htmlentities($user->LastName) ?></td> </tr> <? endforeach ?> </tbody> </table> <? else: ?> <p>No users in the database.</p> <? endif ?>