使用PHP文件夹创建HTML菜单

时间:2014-04-29 15:14:07

标签: php html

我正在编写一个库,想要使用项目文件夹创建一个通用的HTML菜单。

我有这个结构:

 root     menu folders   sub-menu folders

01_Home     01_aaa          01_aaa, 02_abb, 03_acc
            02_bbb          ...
            03_ccc          ...

$root = 'content';

$fileData = fillArrayWithFileNodes ( new DirectoryIterator ( $root ) );
function fillArrayWithFileNodes(DirectoryIterator $dir) {
    $data = array ();
    foreach ( $dir as $node ) {
        if ($node->isDir () && ! $node->isDot () && $node != 'includes' && $node != 'data') {

            $data [$node->getFilename ()] = fillArrayWithFileNodes ( new DirectoryIterator ( $node->getPathname () ) );
        }
    }
    return $data;
}
function transformName($file) {
    return str_replace ( '_', ' ', substr ( $file, strpos ( $file, '_' ) + 1 ) );
}

我在这里创建HTML菜单:

<?php
foreach ( array_keys ( $fileData ['01_Home'] ) as $option ) {
?>
<li><a href="content/01_Home/<?php echo $option; ?>"> <strong><?php echo transformName($option); ?></strong></a></li>
<?php
}
?>

有谁知道如何显示子菜单文件夹名称?

1 个答案:

答案 0 :(得分:0)

就像你对fillArrayWithNodes所做的那样,我会创建一个帮助函数来显示特定文件夹数组的所有子节点,例如displayChildNodes($folder)

该函数将接收来自$fileData的关联数组,例如$fileData['01_Home']。它将包含一个类似for循环的fillArrayWithNodes,除非这次我们检查是否有数据,给定该键。我们通过确定它是否是一个数组来检查(因此它适合fillArrayWithFileNodes中的if条件),以及数组中是否有项目。

foreach($folderArray as $subNodeName => $subNodeNodes) {
    //1. Print out the folder name $subNodeName here. (like you did in the example)  
    //2. if is_array($subNodeNodes) && count($subNodeNodes) > 0, then call displayChildNodes($subNodeNodes) 
}