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


Simple HTML include system (Nested includes)

我的html文件变得非常巨大,因为我正在编写一个大型html应用程序,我想组织它。我有一个数组,它将包括所有看起来像这样的include:

$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

边栏.html

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

作用域是个问题,因为回调没有访问$value/$key的权限。我可能需要的是匿名函数,但我不确定这是否正确。欢迎任何帮助。

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

简短回答:没有。

您要维护包含所有内容的文件夹结构,然后还要维护第二个阵列系统来管理所有内容。如果你的网站变得更大或更复杂,它很快就会变得无法维护。

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

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

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

这是我需要的函数,使用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()更改为