在 html 中使用 php 的特殊标签


Using special tags for php in html

在问这个问题之前,我已经做了一些研究,尽管我的运气为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'])

以下是细分:

  1. 确保 html 模板文件存在且可读

  2. 将模板文件读入字符串

  3. 将已知占位符替换为实际值

您的 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,如果要根据某些选项/条件显示不同的样式,这将非常有用。

上面的例子当然非常粗糙,可以通过多种方式进行改进,但它应该提供一种简单易行的方法(并且很容易适应更个人的需求/品味)。

相关文章: