Мы создаем приложение и хотели бы отделить часть html от части кода (php), как мы можем использовать следующий файл шаблона с php?
<h1>{$heading}</h1> <p>{$content}</>
И php-код как следующий …
<?php $heading = $row['heading']; $description = $row['content']; ?>
как мы можем включить tpl-файл и использовать его? Благодарю.
На самом деле, это непригодная система шаблонов.
Представьте, что на странице будет 20 заголовков и 20 описаний? Собираетесь написать их все? А затем HTML изменился, и вам придется менять его 20 раз? В таком шаблоне нет никакой пользы.
На самом деле, нет никакой разницы в отделении HTML от PHP .
Это бизнес-логика должна быть отделена от логики представления , так как вам все равно придется использовать какую-то логику в вашем шаблоне. И PHP так же хорош для этого, как и любой другой язык шаблонов .
Просто отделите свой код на 2 части: получение части данных и отображение части.
Сделайте свою обычную страницу PHP получить все необходимые данные, затем определите шаблон для этих данных, а затем вызовите шаблон основного сайта, который будет отображать всю страницу.
Ну, вот пример такого разделения.
Представьте, что у вас есть links.php
страница содержит ссылки на дружественные сайты. эта страница должна получить все необходимые данные, а затем вызвать шаблон:
<? //include our settings, connect to database etc. include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php'; //getting required data $DATA=dbgetarr("SELECT * FROM links"); $pagetitle = "Links to friend sites"; //etc //and then call a template: $tpl = "links.tpl.php"; include "main.tpl.php"; ?>
где main.tpl.php
– ваш основной шаблон сайта, включая общие части, такие как заголовок, нижний колонтитул, меню и т. д .:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>My site. <?=$pagetitle?></title> </head> <body> <div id="page"> <? include $tpl ?> </div> </body> </html>
и links.tpl.php
– это фактический шаблон страницы:
<h2><?=$pagetitle?></h2> <ul> <? foreach($DATA as $row): ?> <li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li> <? endforeach ?> <ul>
Вы не должны переписывать проверенную и существующую функциональность, если у вас нет веской причины. Эта разметка очень похожа на Smarty. Взгляните на это: http://www.smarty.net/
Если вы хотите переписать его, вы можете посмотреть буферизацию вывода. Или вы можете создать свою собственную среду представления, где вы устанавливаете переменные для объекта представления, и он выполняет все управление кодом / областью для вас ala Zend, CakePHP