2010-08-24 83 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」的錯誤。