2010-08-24 82 views
0

我正在使用动态菜单系统,因为我构建的站点具有严格的命名约定。动态菜单系统

例如,如果我有一个脚本被命名为AboutUs.php,那么'关于我们'将成为父菜单项。但是,如果我有一个名为Product.Product1.php的脚本,那么'产品'是父项目,'产品1'作为子菜单项。

的想法是通过循环在我的前端文件夹抢占了所有的脚本和创建数组所以UL/li元素可以使用呼应嵌套foreach

我似乎无法得到Array$submenu)恰到好处..谢谢!

if ($handle = opendir('frontend/')) { 
while(false !== ($sFile = readdir($handle))) { 
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) { 
     $pos1 = strrpos($sFile, "."); 
     $menu = substr($sFile, 0, $pos1); 
     $pos2 = strrpos($sFile, ".php"); 
     if ($pos1 == $pos2) { // "." and ".php" where in the pos, skip submenu 
      $links[$menu] = 'fontend/'.$sFile; 
     } else { 
      $submenu = substr($sFile, $pos1, $pos2); 
      $links[$menu][$submenu] = 'fontend/'.$sFile; 
     } 
    } 
} 

}

+1

我一直在想的一件事:父母都有自己的脚本吗?用你的例子,会不会有'Product.php'和'Product.Product1.php'?如果是这样,子菜单阵列可能会出现问题。 – 2010-08-24 16:47:01

+0

不,我们在那里安全..虽然很好,但 – Mikey1980 2010-08-24 18:47:03

回答

2

在我看来,你可能会更好地爆炸''。而不是使用strpos和正则表达式。

while(false !== ($sFile = readdir($handle))) { 
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) { 
     $parts = explode('.', $sFile); 
     if (count($parts) == 2) 
     { 
      $urls[$parts[0]] = 'frontend/'.$sFile; 
     } 
     else if (count($parts) == 3) 
     { 
      $urls[$parts[0]][$parts[1]] = 'frontend/'.$sFile; 
     } 
    } 
} 
+0

啊,是的,这将产生一个更优雅的解决方案。 – gablin 2010-08-24 16:41:18

+0

这是性感..作品像一个魅力太 - 非常感谢! – Mikey1980 2010-08-24 16:49:03

+0

嘿,没问题。总是乐于帮助! – 2010-08-24 17:02:43

1

if ($handle = opendir('frontend/')) { 
while(false !== ($sFile = readdir($handle))) { 
    if (strrpos($sFile, ".php") === strlen($sFile)-strlen(".php")) { 
     $posExt = strrpos($sFile, "."); 
     $menu = substr($sFile, 0, $pos1); 
     $posSub = strrpos($menu, "."); 
     if ($posSub === false) { // "." and ".php" where in the pos, skip submenu 
      $urls[$menu] = 'fontend/'.$sFile; 
     } else { 
      $submenu = substr($menu, $posSub, ($posExt-$posSub)); 
      $urls[$menu][$submenu] = 'fontend/'.$sFile; 
     } 
    } 
} 

没有测试过,虽然,但它应该工作。编辑: 已修复,但在获取$子菜单。在某个地方也不可能出现“偏差1”的错误。