Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP创建html模板_Php_Html_Templates_Dry - Fatal编程技术网

使用PHP创建html模板

使用PHP创建html模板,php,html,templates,dry,Php,Html,Templates,Dry,通过环顾和研究现有的MVC框架,我学到了很多关于MVC框架如何工作的知识。似乎我看到的每个框架都有一个布局,其中每个控制器中的每个方法都有自己的模板文件。因此,将有一个登录模板,一个注销模板,注册,等等 我的问题是,如何以及为什么要在一个文件中为整个页面创建模板。假设您希望在多个页面上显示登录表单,那么您不需要为希望在其中显示的每个模板创建登录表单吗?这是否违反了“不要重复自己”规则(干燥) 到目前为止,我一直在做的事情是创建liitle块模板,然后将它们组合起来创建每个页面。因此,与其做这样的

通过环顾和研究现有的MVC框架,我学到了很多关于MVC框架如何工作的知识。似乎我看到的每个框架都有一个布局,其中每个控制器中的每个方法都有自己的模板文件。因此,将有一个登录模板,一个注销模板,注册,等等

我的问题是,如何以及为什么要在一个文件中为整个页面创建模板。假设您希望在多个页面上显示登录表单,那么您不需要为希望在其中显示的每个模板创建登录表单吗?这是否违反了“不要重复自己”规则(干燥)

到目前为止,我一直在做的事情是创建liitle块模板,然后将它们组合起来创建每个页面。因此,与其做这样的事情

$title = 'Blah Blah Blah';
$user  = 'Jon Miller';

include 'index.phtml';

<html>
  <head>
    <title><?php echo $title; ?></title>
  </head>
  <body>
    <h3><?php echo $user; ?></h3>
    <form>login form</form>
  </body>
</html>
$title='Blah Blah Blah';
$user='Jon Miller';
包括“index.phtml”;
登录表单
我一直在这么做

$title = 'Blah Blah Blah';

include 'header.phtml';

$user  = 'Jon Miller';

include 'user.phtml';
include 'login_form.phtml';
include 'footer.phtml';

header.phtml
<html>
  <head>
    <title><?php echo $title; ?></title>
  </head>
  <body>

user.phtml
    <h3><?php echo $user; ?></h3>

login_form.phtml
    <form>login form</form>

footer.phtml
  </body>
</html>
$title='Blah Blah Blah';
包括“header.phtml”;
$user='Jon Miller';
包括“user.phtml”;
包括“login_form.phtml”;
包括“footer.phtml”;
header.phtml
user.phtml
登录\u form.phtml
登录表单
footer.phtml
像往常一样,我只想知道正确的方法,以及如何和为什么……这似乎违背了干涸的法则


谢谢

您应该检查一下“”和“”的概念。虽然我已经链接到了这些概念的Zend框架版本,但其他MVC框架(以及MVC概念)也应该有它们

其基本思想是将页面“视图”(例如登录表单)包含在站点“布局”(layout)中,该布局是整个站点使用的通用模板。当您请求具有不同视图(例如用户配置文件)的不同控制器时,该视图也包含在同一布局中

要在所有页面上包含类似于登录表单的内容,可以使用视图帮助器。该视图助手可以显示当前用户,也可以显示登录表单,具体取决于登录状态。视图辅助对象可以包含在布局中,也可以包含在特定控制器中(只要MVC框架允许某种命名的渲染段)


两步“include”方法比线性包含部分(包括页眉、内容、页脚——您现在正在做的事情)效果更好,因为您的模板不必拆分HTML标记。《Zend指南》在版面中有一系列模板视图。

一个词:组织。分离页面的每个部分将允许分别查看/编辑每个部分。这个简单的概念是非常有益的。例如,团队中想要处理登录过程的任何人都可以很容易地发现他们必须编辑
login\u form.phtml
,并且他们可以确保编辑
login\u form.phtml
不太可能无意中干扰其他功能

作为最佳实践,以下是我如何做到这一点(不完全相同,但类似)

MyGreenPage.phtml

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>
/*  Some styles needed by User */
/*  Some script needed by User */
    <h3><?php echo $user; ?></h3>
/*  Some styles needed by Login_Form */    
/*  Some script needed by Login_Form */
    <form>login form</form>
User.pjs

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>
/*  Some styles needed by User */
/*  Some script needed by User */
    <h3><?php echo $user; ?></h3>
/*  Some styles needed by Login_Form */    
/*  Some script needed by Login_Form */
    <form>login form</form>
User.phtml

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>
/*  Some styles needed by User */
/*  Some script needed by User */
    <h3><?php echo $user; ?></h3>
/*  Some styles needed by Login_Form */    
/*  Some script needed by Login_Form */
    <form>login form</form>
登录表单.pjs

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>
/*  Some styles needed by User */
/*  Some script needed by User */
    <h3><?php echo $user; ?></h3>
/*  Some styles needed by Login_Form */    
/*  Some script needed by Login_Form */
    <form>login form</form>
登录表单.phtml

<html>
  <head>
    <title><?php echo $title; ?></title>
<?php
    foreach($Contents as $Content)
        Include("$Content.pcss");
?>
<?php
    foreach($Contents as $Content)
        Include("$Content.pjs");
?>
  </head>
  <body>
<?php
    foreach($Contents as $Content)
        Include("$Content.phtml");
?>
  </body>
</html>
/*  Some styles needed by User */
/*  Some script needed by User */
    <h3><?php echo $user; ?></h3>
/*  Some styles needed by Login_Form */    
/*  Some script needed by Login_Form */
    <form>login form</form>
登录表单

让我再次提醒您,这并不是我所做的(我使用OOP所做的),因此这可能无法按原样运行,您可能需要对其进行编辑。

对于我正在处理的项目,所有视图都是XSL模板。我没有将变量传递给视图,而是在控制器中生成所有XML,并用视图对其进行转换

我喜欢这种结构,因为我可以将所有模板保存在一个文件中,并根据需要对它们进行排列。它也是一种标准的模板语言,非常灵活,有大量的文档。到目前为止,这一切都很顺利


这种结构的一个很好的例子是网站(查看源代码)。

使用PHP进行HTML模板制作最常用的方法是使用以下流行的模板引擎之一:


或者,您可以在HTML中放置类似于
的占位符。只需加载HTML,使用正则表达式查找所有占位符,并用相应的变量替换它们


或者,您可以加载HTML,将其作为一个语法进行解析,然后修改DOM。我创建这个库是为了能够使用类似jQuery的语法来实现这一点,但是您也可以使用vanilla PHP或其他几个库中的一个



或者,您可以使用JavaScript在前端进行一些HTML模板制作。如果您希望在前端和后端都做HTML模板,您可能需要考虑使用<强> <强>,因为MuScript模板既可用于前端(JavaScript),也可用于后端(带有PHP)。