我开始理解模板在PHP中的重要性。我正在使用PHP本身作为模板引擎来避免学习任何新语言。虽然我对此有所了解,但我还是不清楚。我想知道专家们做了什么。
我应该创建一个完整的页面模板,包含所有表格,表格和其他所有内容(包括页眉和页脚),还是应该将所有表格,表格等放在自己的文件中,然后将它们添加到模板中需要的。
这是一个清理事物的小例子......
我应该
a)创建一个包含所有表格,表格和其他元素的页面,并将其用作最终产品
// Set all the information
$template->title = $username;
$template->user_info = get_user($user_id);
$template->articles = get_articles($user_id);
$template->ads = random_ad($user_info);
// Load the template with everything already in it
$template->load('user_page.tpl')
$template->display();
OR
b)在自己的文件中创建每个表,表单,相关的块元素,然后使用它们创建最终产品
// set the title and load the header template
$header['title'] = $username;
$template->load('header.tpl', $header);
// get the user info as an array and load into user profile template
$user_info = get_user($user_id);
$template->load('user_profile.tpl');
// load the new article form
$template->load('new_article_form.tpl');
// get the articles as an array of info and load into user articles template
$articles = get_articles($user_id);
$template->load('user_articles.tpl', $articles);
// get a random ad based on user info
$ads = random_ad($user_info);
$template->load('advertisements.tpl');
// load the footer template and display final page
$template->load('footer.php');
$template->display();
每个加载的文件都包含需要在最终页面上显示的一小部分内容。
由于Dont Repeat Yourself技术,我会想B,但我想知道哪个以及为什么
答案 0 :(得分:4)
我个人会说第一种方法是最好的,因为它可以保持所有文档和文档片段在语义上完整。
第二种方法意味着你的header.tpl中有一个<div>
,你的footer.tpl中的</div>
会关闭(除了可能会有一些标签适用于)。这意味着如果您更改布局,通过在某处添加包装div(例如),您必须记住在另一个文件中关闭它(或者,根据您的布局,两个或三个不同的文件)。
几种不同的嵌入式文件更糟糕。想想调试一个网站有多难,当一个文件 - 有条件地被包含 - 有一个额外的</div>
。你得到一个模糊的错误报告“有时页面看起来完全搞砸了,无论我使用哪种浏览器”都非常难以追踪。如果你使用基于表格的布局,那就更糟了..
使用第一种方法,您仍然可以使用DRY原则。您将模板加载到变量中。例如:
$userVars['name'] = $currentUser->name;
$templateVars['userinfo'] = $template->load('userinfo.php', $userVars);
...
$template->display('template.tpl', $templateVars);
您可以通过这种方式持续嵌套文档。有很多好处:
<div id="stats">
内有一个stats.tpl模板渲染。您还有一个视图,它只是自己呈现stats.tpl模板,然后使用jquery执行$('#stats').load('/ajaxstats.php')
,刷新该div但不重复代码。答案 1 :(得分:2)
每个模板共有的结构的模板继承(例如布局;页眉/页脚),以及可重用位(例如表格)的模板嵌入(即包括)。
使用方法A而没有继承,你要么包含常见的布局元素(这是恕我直言),要么在每个模板中复制整个布局(更糟糕的是)。简单的方法B会为所有内容创建大量的小模板位,这可能会降低可维护性。
为此,我真的建议使用真正的专用模板引擎而不是普通的PHP。它们使生活更轻松(继承是一回事;另一种 - 变量自动转义)。
答案 2 :(得分:1)
模板继承可能会成为最干净的代码。您现在可以使用PHP Template Inheritance
在直接的PHP中执行此操作答案 3 :(得分:0)
没有好的或坏的解决方案。有技术和指导方针,但随着时间的推移,您将了解哪种方法比其他方法更好。
只要看一下,我会说第二种方法可以让你更灵活,将页面分成更小的部分。较小的可能有时意味着更易于管理。
此外,第二个解决方案还允许超过1个人在页面上工作,因为他们只需要工作/更改页面的一部分而不是整个页面。
的问候,
答案 4 :(得分:0)