将背景代码与HTML显示代码分开的好方法是什么?

时间:2012-12-12 00:35:19

标签: php html templates logic file-structure

以下是我如何获取文件及其操作方式的粗略图片。

index.php 在开始时显示起始HTML标记并包含header.php(链接的div),最后包括footer.php,它显示结束HTML标记。 在这之间,index.php从GET参数,POST表单等获取所有用户输入,并从数据库中获取数据( functions.php和mysql_functions.php )。要显示正文内容,它包含基于用户请求的任何页面的PHP模板文件,例如: index.php?p = page1 包括 template_page1.php

模板文件中显示的信息存储在数组中,而不仅仅是普通变量,因此在模板中我的内容如下所示:

<title><?php echo $content['page_title']; ?></title>

<div>
    <?php
        foreach($name as $content['names']){
            echo '<p>'.$name.'</p>';
        }
    ?>
</div>

模板文件中没有真正重的代码,只有循环和基本的if语句。重要的东西是在index.php和函数文件中完成的。

有时我觉得它可能是hacky and messy而不是一种好的做事方式。前几天我看了一个模板系统(Code Igniter),看起来很复杂,要改变这么多不同的文件只是为了显示一些内容。

我是否可以对我正在做的方式提出一些批评和一些利弊,以及如何更好地做到这一点的一些想法?

2 个答案:

答案 0 :(得分:0)

你是对的。将大量代码堆叠到一个文件中并不是一种好习惯。但是,如果你是PHP的初学者,你不应该太担心它。我不能完全想象你的文件结构,但我想我有一个想法。

尝试将每个PHP函数和诸如此类的东西放在其他文件中,并尽可能少地使用index.php中的PHP。但是,请确保没有太多不必要的文件(每个事件/功能一个)。

答案 1 :(得分:0)

在php中至少有一个测试版的Template Toolkit。但perl中的原文本质上是一种不同的语言。它非常强大。

原作是在CPAN上。我认为目前的版本是2.25。

我的网站构建系统内容和标记几乎完全分开。

这是添加内容之前的基本页面:

[% PROCESS header.inc 
    Title = "Sherwood's Forests -- Seedling Sales" 
    Desc = "Sherwood's Forests Pre-season orders for little Trees."
%]

<DIV id="content">
[% FILTER multimarkdown %]


# Seedling Sales 2014

<div markdown="1" class=picr>

![Picture alternate text][/base-absolute/path/to/image.jpg]

</div>

Please be patient

#### This file is still germinating 


[% PROCESS Copyright.inc %][% END %]



</div>
[% INCLUDE footer.inc %]

所有内容都在FILTER行和底部之间进行内容以markdown写入。允许我在列的右侧浮动图像。 CSS完全是液体,因此屏幕仍可在iPhone上使用(几乎没有)。

大部分魔法都在header.inc中。它读取文件fileindex.txt,它实质上是整个网站的菜单树。没有java。所有静态网站。

Fileindex.text看起来像这样:

ABBAB:f:/Home/Business_Stuff/Inventory.html:3:Inventory.html:Inventory
ABCAB:f:/Home/Business_Stuff/Ordering.html:3:Ordering.html:Ordering
ABDAB:f:/Home/Business_Stuff/Prices.html:3:Prices.html:Prices
ABJAB:f:/Home/Business_Stuff/Business_Stuff.html:3:Business_Stuff.html:Business Stuff
ADAAA:d:/Home/Services:2:Services:Services
ADJAB:f:/Home/Services/Christmas_Trees.html:3:Christmas_Trees.html:Christmas Trees
ADKAB:f:/Home/Services/Custom_Growing.html:3:Custom_Growing.html:Custom Growing
ADLAB:f:/Home/Services/Nature_Walks.html:3:Nature_Walks.html:Nature Walks

开头的字母汤决定了索引的排序顺序。 d或f是目录或文件。该数字是菜单层次结构中的级别数。然后是完整路径的文件组件。最后用于链接名称的文本。其中一些是早期重写的重点,但不值得修复。 “不要优化它”。最后一个字段允许使用与文件名不同的链接名称。这用不多。

fileindex.txt本身是由perl程序MakeFileIndex生成的。它使用两种信息来源:查找结果。在源树上运行,文件tt2seq在菜单项的顺序上有可选的覆盖。

我想在我的网站上添加新页面。

将第一个文件复制到相应的目录。使用我的新内容更改该文件的内容。如果它需要以非字母顺序出现,那么我必须在tt2seq中添加行来控制它。运行MakeFileIndex。运行ttree -a(Template Toolkit中的实用程序)这将更新每个文件中的所有菜单项。

验证页面是否符合我的要求。如果没有,则重新编辑。重新运行我刚编辑的文件的ttree。当我开心时,请同步到我的服务器。

净效应是我花在机械上的时间与写作时间相比很小。

如果我决定重新安排网站,我只需在目录树周围移动文件,然后重建。这不会修复内容块中的任何内部链接。

以这种方式制作的网站是http://sherwoods-forests.com。这是一个老式的网站。重点是内容,而不是嘶嘶声。但它是一个用于生成静态页面的好系统。