【问题标题】: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。

标签: php html templates logic file-structure


【解决方案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。这是一个老式的网站。重点是内容,而不是嘶嘶声。但它是生成静态页面的好系统。

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多