我的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
sidebarlayers.html
sidebarresources.html
sidebarsidebar.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()
更改为