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

Posted

技术标签:

【中文标题】将背景代码与 HTML 显示代码分开的好方法是啥?【英文标题】:What's a good way to separate the background code from the HTML displaying code?将背景代码与 HTML 显示代码分开的好方法是什么? 【发布时间】:2012-11-29 15:12:32 【问题描述】:

这是我如何拥有我的文件以及它们做什么的粗略图片。

index.php 在开头显示开始的 html 标记并包括 header.php(链接的 div),最后包括显示结束 HTML 标记的 footer.php。 在这之间,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 和函数文件中完成。

有时我觉得它可能很笨拙和凌乱,不是一种好的做事方式。前几天我查看了一个模板系统(Code Igniter),它似乎很复杂,有很多不同的文件需要更改以显示一些内容。

我能否对我的做法提出一些批评和一些利弊,以及一些关于如何更好地做到这一点的想法?

【问题讨论】:

我不知道代码点火器,但它似乎与其他模板系统确实不同。你应该看看 Smarty。 【参考方案1】:

你是对的。将大量代码堆叠到一个文件中并不是一个好习惯。但是,如果您是 PHP 的初学者,则不必太担心它。我无法在脑海中完全描绘出您的文件结构,但我想我有一个想法。

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

【讨论】:

【参考方案2】:

至少有一个用 php 完成的模板工具包的 beta 版本。但是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,它本质上是整个网站的菜单树。没有爪哇。所有静态网站。

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 生成的。它使用两个信息源: find 的结果。在源代码树上运行,以及一个文件 tt2seq,它在菜单项的顺序上有可选的覆盖。

我想向我的网站添加一个新页面。

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

验证页面看起来像我想要的那样。如果不是,则重新编辑。为我刚刚编辑的文件重新运行 ttree。当我高兴时,同步到我的服务器。

最终的结果是,与写作所需的时间相比,我花在机制上的时间很少。

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

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

【讨论】:

以上是关于将背景代码与 HTML 显示代码分开的好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

html网页背景颜色的代码是啥?颜色有几种表示方法?

在没有互联网的情况下在多部手机之间传输数据的好方法(现有)是啥?

如何将node js前端代码与后端代码分开?

自动绑定 JS 类方法的好方法是啥?

HTML 语言中页面背景图像、背景音乐的设置方法?插入超链接、图像的语法是啥

将现有应用程序迁移到的好的 PHP 框架是啥?