使用PHP进行开发时,从显示页面中删除代码的好方法是什么。我工作的页面通常需要由外部人员编辑。这个人经常被许多PHP块弄糊涂,也喜欢破坏我的代码。
我已经尝试将代码块移动到函数中,所以现在整个HTML中都有各种功能。随着一些页面变得越来越复杂,它再次成为一个程序,并且处理POST是有问题的。
我在PHP开发中可以做得更好吗?
答案 0 :(得分:19)
您不需要“系统”来进行模板化。 你可以通过保持演示和自己的方式自己做到这一点。逻辑分开。 这样设计师可以搞砸显示器,而不是它背后的逻辑。
这是一个简单的例子:
<?php
$people = array('derek','joel','jeff');
$people[0] = 'martin'; // all your logic goes here
include 'templates/people.php';
?>
现在这里是people.php文件(你给你的设计师):
<html>
<body>
<?php foreach($people as $name):?>
<b>Person:</b> <?=$name?> <br />
<?php endforeach;?>
</body>
</html>
答案 1 :(得分:5)
看看一些流行的PHP框架如何使用模板。示例包括cakePHP,Zend Framework和Code Igniter。即使您不打算将您的网站建立在这些框架上,模板设计模式也是保持PHP代码远离Web设计人员的好方法,因此他们可以专注于布局而不是功能。
答案 2 :(得分:4)
在我看来,您需要开始在应用程序中实施所谓的“关注点分离”。这些例子给出了关于模板,以回应您对页面编辑器破坏您的代码的具体抱怨,这很重要,但只代表了这种策略的一个例子。随着您的程序变得越来越大,越来越复杂,修改和调试变得更加困难 - 即使您的设计人员没有破坏您的代码。
可能最常见的分离是数据,逻辑和表示之间的三向分离,如设计模式模型 - 视图 - 控制器(MVC)中所述。您不需要一个完整的MVC框架来实现相同的基本原则。这个想法只是在一个地方封装处理数据(模型)的代码,将这些数据呈现给另一个地方的用户(视图)的代码。您将该代码与仅与在正确的时间(控制器)向正确的用户提供正确数据有关的代码绑定在一起。
根据你的描述,听起来你现在拥有的是Transaction Script模式,你在浏览器中加载了一个php文件“dothis.php”,以及所有的函数定义和HTML显示在一起。你已经有了函数,所以你已经开始封装逻辑片段了。
我接近这个的方式是,与这里关于模板的其他答案一致,就是将所有HTML删除到另一个文件中,只引用简单的PHP变量和一些循环(但是尽可能少的条件切换) )。这将使模板更容易阅读,更难破解。当你的页面编辑器想要修改布局时,请给它们那个文件。
然后,您将所有数据访问功能分离到另一个文件,理想情况下创建一个类(或多个类,具体取决于数据的复杂程度以及重用它的频率)。
此时你的“dothis.php”已被删除,可能是一些配置代码(你可以将它们分成一个包含,以及一些身份验证代码(你可以将它们分开到自己的类中),并且只是调用数据访问函数,并调用包含的模板文件。因此,控制器本身非常简单,易于管理。
答案 3 :(得分:2)
外面的人是需要编辑逻辑还是仅显示(HTML)?
如果是后一种情况,请查看Smarty模板引擎。
答案 4 :(得分:2)
我强烈建议您阅读这本书PHP In Action。它将引导您完成数据库连接,模板系统和Web应用程序的所有其他基础知识的抽象。如果每个PHP开发人员都读过这本书,那么这种语言就会有更好的声誉。
它还有关于重构,单元测试和MVC控制模式的章节。
答案 5 :(得分:1)
我想我想远离一个不合身的框架。我可以使用的一些方法通常使用更干净的代码使页面更具可读性。
Stack Overflow希望我在最好的主观意见时决定哪个答案最好。谁能说出“最佳”做法是什么。
答案 6 :(得分:1)
如果您决定继续使用功能,可以从WordPress获得灵感。通过使模板更精细,您可以将“程序”降至最低。
此外,优秀的工具(即HTML编辑器)可以帮助设计人员忽略您的PHP并在不破坏代码的情况下处理设计。 (但我没有任何建议,抱歉。)
对于某些事情的另一种方法是创建自己的模板系统而不是SMARTY,但创建一个工作系统以满足您的需求可能需要很长时间才会超过像%% VARIABLE %%一个文本。
我们的公司使用SMARTY,即使模板中有很多代码,设计师也知道如何使用它。对于简单的CMS站点,我们使用ExpressionEngine,它使用类似HTML的标签将逻辑插入到模板中。
答案 7 :(得分:0)
关于这个主题可以说很多,但一个非常基本的出发点是尽可能多地将代码移到单独的文件中,然后使用include语句。
答案 8 :(得分:0)
我通常使用includes,因为它们对于组合和分组功能非常有用。另外,请注释您的代码。没有什么比其他人看到你的工作更糟糕了,不知道你为什么这样做。合理地命名变量和函数也可以做很多事情 - 例如:
$userName = "John Doe";
$dateOfBirth = "04/02/1982";
function calculateUserAgeFromBirth($userName, $dateOfBirth)
这样的命名变量也有助于最大限度地减少关于代码实际执行的内容的评论。