简单的HTML包含系统(嵌套包含)

时间:2013-12-11 00:02:54

标签: php html

我的html文件变得非常庞大,因为我正在编写一个大型html应用程序并且我想组织它。我有一个包含所有包含的数组:

$html_includes = [
  'menu',
  'tools',
  'canvas',
  'sidebar' => [
    "resource",
    "layers"
  ],
  "footer"
];

我要做的是创建一个函数来包含所有文件,如果有一个文件夹(例如侧边栏)包含<folder>.html并创建一个回调以包含带有<folder>.html文件的文件。到目前为止我的尝试:

function include_html($includes,$path=""){
    foreach($includes as $key => $value){
        if(is_array($value)){
            function callback(){
                include_html($value,($path.$key."/"));
            }
        } 
        include($path.$key.".html");
    }
}

include_html($html_includes);

文件夹结构

\canvas.html
\menu.html
\tools.html
\sidebar
\sidebar\layers.html
\sidebar\resources.html
\sidebar\sidebar.html

sidebar.html

<div id="sidebar">
    <div id="sortable">
        <?php callback(); ?>
    </div>
</div>

范围是问题,因为回调doest无法访问$value/$key。我可能需要的可能是匿名函数,但我不确定这是否正确。欢迎任何帮助。

2 个答案:

答案 0 :(得分:0)

  

这是组织代码的好方法吗?

简答:不。

您正在维护包含所有包含的文件夹结构,然后您将维护第二个数组系统来管理它。如果您的网站变得更大或更复杂,它很快就会变得无法维护。

至少应该将所有这些文件更改为.php或将服务器设置为通过PHP解释器运行.html文件。然后,当一个文件需要包含另一个文件时,您只需<?php include('otherfile.php'); ?> 文件所需的所有内容都将被包含在内,依此类推,而无需单独跟踪结构。< / p>

这可能也可以通过服务器端包含来实现,但恕我直言,这是最好的避免。

也就是说,像这样构建您的网站只比静态HTML文件略胜一筹。你应该考虑使用某种框架。

答案 1 :(得分:0)

这是我需要的使用http://www.php.net/manual/en/functions.anonymous.php

所需的功能
function include_html($includes, $path = "") {
  foreach($includes as $key = > $value) {
      if (is_array($value)) {
          $callback = function () use($value, $key, $path) {
              include_html($value, ($path.$key."/"));
          };
          include $path.$key."/".$key.".html";
      } else include $path.$value.".html";
  }
}

include_html($html_includes, $html_path);

sidebar.html改为callback() -> $callback()