代码之家  ›  专栏  ›  技术社区  ›  Mikey1980

动态菜单系统

  •  0
  • Mikey1980  · 技术社区  · 15 年前

    我正在开发一个动态菜单系统,因为我构建的站点有一个严格的命名约定。

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

    这个想法是循环获取我的前端文件夹中的所有脚本,并构建一个数组,这样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;
            }
        }
    }
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   Ryan Kinal    15 年前

    在我看来,最好是在“.”上爆炸,而不是使用strpos和regex。

    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;
            }
        }
    }
    
        2
  •  1
  •   gablin    15 年前
    
    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;
            }
        }
    }