在问这个问题之前,我已经做了一些研究,尽管我的运气为0。
我想弄清楚的几乎是我如何制作一个模板系统。我知道我可以看看别人是如何完成的,但我只是想我会要求得到一个简单的答案。
几乎我希望能够在html中使用类似{Name} or %name%
的东西,这显然来自PHP文件中的贵重物品。
例如,在我拥有的PHP文件中,我有$Name == "My Name";
与其将PHP放入看起来很混乱的html中,我希望能够使用%Name% or {Name}
而不是<?php echo $Name; ?>
我希望能够使用。
希望有人能理解我的意思,并帮助我。
谢谢
只需执行字符串替换:
public function _output($tpl, $values) {
if(!is_readable($tpl)) {
return ['err'=>'The ('.$tpl.') template is missing or unreadable!'];
}
$output = file_get_contents($tpl);
if($output === false){
return ['err'=>'Error loading template file ('.$tpl.')'];
}
foreach ($values as $key => $value) {
$tagToReplace = "[@".$key."]";
$output = str_replace($tagToReplace, $value, $output);
}
return $output;
}
用法:
_output('path/to/html/file', ['key'=>'value', 'key'=>'value'])
以下是细分:
确保 html 模板文件存在且可读
将模板文件读入字符串
将已知占位符替换为实际值
您的 html 文件可能如下所示:
<!DOCTYPE html>
<html>
<head>
<title>[@site_title]</title>
<script src="[@polymer_elements]webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="[@polymer_elements]paper-styles/paper-styles.html">
<link rel="import" href="[@polymer_elements]paper-styles/paper-styles-classes.html">
<link rel="import" href="[@polymer_elements]paper-header-panel/paper-header-panel.html">
<link rel="import" href="[@polymer_elements]paper-drawer-panel/paper-drawer-panel.html">
<link rel="import" href="[@polymer_elements]paper-toolbar/paper-toolbar.html">
<link rel="import" href="[@polymer_elements]iron-flex-layout/iron-flex-layout.html">
<link rel="import" href="[@polymer_elements]iron-media-query/iron-media-query.html">
<link rel="import" href="[@custom_elements]universal/ajax-widgets-loader/ajax-widgets-loader.html">
<link rel="import" href="[@custom_elements]universal/ajax-app-loader/ajax-app-loader.html">
</head>
所以假设你有一个像array('polymer_elements'=>'path/to/polymer/folder/', 'site_title'=>'my site title')
这样的数组
你从 php 的最终输出将是这样的
<!DOCTYPE html>
<html>
<head>
<title>my site title</title>
<script src="path/to/polymer/folder/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="path/to/polymer/folder/paper-styles/paper-styles.html">
<link rel="import" href="path/to/polymer/folder/paper-styles/paper-styles-classes.html">
<link rel="import" href="path/to/polymer/folder/paper-header-panel/paper-header-panel.html">
<link rel="import" href="path/to/polymer/folder/paper-drawer-panel/paper-drawer-panel.html">
<link rel="import" href="path/to/polymer/folder/paper-toolbar/paper-toolbar.html">
<link rel="import" href="path/to/polymer/folder/iron-flex-layout/iron-flex-layout.html">
<link rel="import" href="path/to/polymer/folder/iron-media-query/iron-media-query.html">
<link rel="import" href="path/to/polymer/folder/universal/ajax-widgets-loader/ajax-widgets-loader.html">
<link rel="import" href="path/to/polymer/folder/universal/ajax-app-loader/ajax-app-loader.html">
</head>
注意:对于所有说"使用smarty"的人,我认为smarty和所有其他模板引擎都很好。它们是由一个更大的社区开发的,而不仅仅是一个人,但有时我们只需要一个小片段,而不是整个库。
我了解,您正在寻找str_replace,这将完成用实际值替换keyword
的工作。我有时会这样使用它:
$template = file_get_contents('test.php');
$name = 'Mrs. Happy Dash.';
//Preps keywords in the template that needs to be replaced with our data.
$keywords = array
(
"{TITLE}" => 'Thank you for visiting',
"{INTRO}" => 'I hope you enjoyed your stay ' . $name,
"{SUB_INTRO}" => '<p style="color:red;">REMEMBER TO PAY!</p>',
"{ORDER_SUMMARY}" => '1x Sky diving class - 10 Euro',
"{HOWTOPAY_TITLE}" => 'You can pay like this:',
"{HOWTOPAY}" => 'Credit card',
"{FOOTER}" => 'Bye bye'
);
//Replaces the data in the template
foreach($keywords as $search => $data){
$template = str_replace($search, $data, $template);
}
echo $template;
您几乎可以使用任何您想要的东西作为关键字,%NAME%
,#NAME#
。只要你把它们写在关键字数组中。
用于替换keywords
的数据也可以包含 HTML,如果要根据某些选项/条件显示不同的样式,这将非常有用。
上面的例子当然非常粗糙,可以通过多种方式进行改进,但它应该提供一种简单易行的方法(并且很容易适应更个人的需求/品味)。