PHP-шаблон с переменными?

Я хочу упростить разработку своих новых проектов, и я хотел, чтобы простые кости были очень простыми решениями для шаблонов. Я огляделся по сети, и все либо слишком раздуто, либо заставляет меня съеживаться.

Мои файлы HTML будут такими:

<html> <head> <title>{PAGE_TITLE}</title> </head> <body> <h1>{PAGE_HEADER}</h1> <p>Some random content that is likely not to be parsed with PHP.</p> </body> </html> 

Очевидно, я хочу заменить {PAGE_TITLE} и {PAGE_HEADER} на что-то, что я установил с PHP. Как это:

 <?php $pageElements = array( '{PAGE_TITLE}' => 'Some random title.', '{PAGE_HEADER}' => 'A page header!' ); ?> 

И я бы использовал что-то вроде str_replace и загрузил замененный HTML в строку, а затем распечатал ее на странице? Это то, к чему я сейчас нахожусь на пути … у кого-нибудь есть какие-либо советы или способ, которым я могу сделать это лучше?

Благодарю.

Ваша текущая стратегия будет работать, и это довольно просто. str_replace() эффективен и чист, и вы можете просто закодировать его для замены точных совпадений тегов с вашим содержимым переменной. Однако недостатком является то, что сначала вы должны загрузить все свои шаблоны в строки, и это может быть довольно неэффективно.

Альтернативный метод, который очень похож, можно просто использовать extract () . Extract возьмет набор пар ключ / значение и создаст переменные из них в локальной области. Если вы include() шаблон в ту же область, ваши переменные будут готовы к работе.

Что-то вроде этого:

 function loadTemplate($template,$vars) { extract($vars); include($template); } 

Ваш шаблон может быть обычным PHP.

 <html> <head> <title><?php echo $PAGE_TITLE ?></title> </head> <body> <h1><?php echo $PAGE_HEADER ?></h1> <p>Some random content that is likely not to be parsed with PHP.</p> </body> </html> 

(Очевидно, вы могли бы использовать короткие теги для меньшей детализации шаблона, хотя я предпочитаю не соблюдать соображения совместимости.)

Тогда все, что вам нужно сделать, это:

 $pageElements = array( 'PAGE_TITLE' => 'Some random title.', 'PAGE_HEADER' => 'A page header!' ); loadTemplate('file.phtml',$pageElements); 

Вас может заинтересовать mustache.php . Это действительно легкая реализация класса PHP усы

Быстрый пример, взятый из README:

 <?php include('Mustache.php'); $m = new Mustache; echo $m->render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!" ?> в <?php include('Mustache.php'); $m = new Mustache; echo $m->render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!" ?> 

И более подробный пример – это канонический шаблон Усы:

 Hello {{name}} You have just won ${{value}}! {{#in_ca}} Well, ${{taxed_value}}, after taxes. {{/in_ca}} 

PHP сам по себе является движком шаблона, если вы хотите быть очень простым. просто используйте include()

file.phtml:

 <html> <head> <title><?=$tpl['PAGE_TITLE']?></title> </head> <body> <h1><?=$tpl['PAGE_HEADER']?></h1> <p>Some random content that is likely not to be parsed with PHP.</p> </body> </html> 

code.php:

 tpl = Array ( 'PAGE_HEADER' => "This is the lazy way to do it", 'PAGE_TITLE' => "I don't care because i am doing it this way anyways" ) include("file.phtml") 

Используйте этот механизм шаблонов класса с поддержкой блоков, циклов, ifset (также работает в циклах) и поворотов. Работает быстро. Наиболее подходит для небольших и средних проектов.

http://www.phpclasses.org/package/1216-PHP-Template-engine-blocks-loops-ifset-rotations.html

 function parseVars($vars, $file){ $file = file_get_contents($file); foreach($vars as $key => $val){ str_replace("{".$key."}", $val, $file); } echo $file; }