2013-02-14 97 views
0

我是相當新的使用PHP,在此導航之前,我的PHP使用範圍很簡單。PHP導航,有沒有更好的方法來做到這一點?

我已經寫生成鏈接動態地使用從陣列拉出內部variables.php

總的目標變量的導航是加/減鏈接,subnavs,子subnavs一個navigation.php文件,分次subnavs只能通過編輯variables.php

我使用生成HTML結構笨重的感覺給我的方法,它工作得很好,但我覺得有這樣做的一個簡單的方法。 ..

另外,我需要額外的樣式爲任何具有subnav目前(表示subnav存在的箭頭)的LI。我想動態生成它。

那說我的問題是:

  1. 是否有這樣做的一個簡單的方法?
  2. 有沒有一種方法根據是否存在子導航來動態生成我的動態?

每一頁都有下面的代碼,它的變化取決於在頁面上。

<?php $title = 'Home'; ?> 

我variables.php:

<!-- NAVIGATION ARRAY --> 

<?php 
$nav_mini = array(
    'Home' => 'index.php', 
    'About' => 'about.php', 
    'Services' => 'services.php' 
    ); 
?> 

<?php 
$nav_main = array(
    'Home' => 'index.php', 
    'About' => 'about.php', 
    'Services' => 'services.php', 
    'Portfolio' => 'contact.php', 
    'Clients' => 'about.php', 
    'Gallery' => 'services.php', 
    'News' => 'services.php', 
    'Contact Us' => 'contact.php' 
    ); 
?> 

<?php // SUB NAV ARRAYS 

$nav_sub_about = array(
    'Our Team' => 'about.php' 
    ); 

$nav_sub_michael = array(
    'Michael' => 'index.php', 
    'Aaron' => 'about.php', 
    'Kenny' => 'about.php', 
    'David' => 'about.php' 
    ); 

$nav_sub_services = array(
    'Get Found' => 'about.php' 
    ); 

?> 

導航PHP文件主nav.php

<?php 

     foreach ($nav_main as $key => $value) { 

      echo "<li><a "; 
       echo "class='"; // STARTS CLASS= 
       if ($title == $key) { 
       echo "active "; }// ADDS ACTIVE CLASS TO LINK OF CURRENT PAGE 
      echo "' "; // END QUOTES FOR CLASS=" 


      echo "href='$value'>$key"; 

       if ($key == "About") { // STARTS IF SEQUENCE FOR SUBNAV ARROWS 
        echo "<span class='arrow'> +</span>";} 
       elseif ($key == "Services") { 
        echo "<span class='arrow'> +</span>";} 

      echo "</a>\n"; // END ANCHOR TAG FOR MAIN NAV LINKS 



//----------------------------------------------------------------------------------------------------------// 
// PLEASE START SUB-NAVS HERE ------------------------------------------------------------------------------// 
// AT THIS POINT A NEW <LI> IS GENERATED FROM THE FIRST FOREACH, IF THE BELOW IS TRUE IT POPULATES A SUBNAV //  


     if ($key == "About"){ // START SUBNAV FOR ABOUT 
      echo "<ul class='main-sub-nav'>"; // THIS LINE WAS ADDED TO START THE <UL> FOR THE SUBNAV, IT ENDS ON LINE 14 

      foreach ($nav_sub_about as $key => $value) { 
       echo "<li><a href='$value'>$key"; 

        if ($key == "Our Team") { // STARTS IF SEQUENCE FOR SUBNAV ARROWS 
        echo "<span class='arrow'> +</span>";} 

       echo "</a>\n"; // ENDS ANCHOR TAG FROM SUBNAV LI 

        // SUB-SUB-NAV STARTS HERE 
         if ($key == 'Our Team') { 
         echo "<ul class='main-sub-sub-nav'>"; // THIS STARTS THE UL FOR SUB-SUB-NAV 

          foreach ($nav_sub_michael as $key => $value) { 
         echo "<li><a href='$value'>$key</a></li>\n"; 
        } 
        echo "</ul>"; // THIS ENDS THE SUB-SUB-NAV UL STARTED ON LINE 34 
       echo "</li>";}// THIS IS THE END IF <LI> FROM THE SECOND FOREACH ON LINE 35 

     } 

     echo "</ul>"; // THIS WAS ADDED TO END THE SUBNAV <UL> STARTED ON LINE 11 
     echo "</li>";} // THIS IS THE END OF THE <LI> FROM THE FIRST FOREACH ECHO FROM LINE 8 

//----------------------------------------------------------------------------------------------------------// 
// AT THIS POINT A NEW <LI> IS GENERATED FROM THE FIRST FOREACH, IF THE BELOW IS TRUE IT POPULATES A SUBNAV // 

      if ($key == "Services"){ 
       echo "<ul class='main-sub-nav'>"; // THIS LINE WAS ADDED TO START THE <UL> FOR THE SUBNAV, IT ENDS ON LINE 14 

       foreach ($nav_sub_services as $key => $value) { 
        echo "<li><a href='$value'>$key</a></li>\n";} 
       echo "</ul>"; // THIS WAS ADDED TO END THE SUBNAV <UL> STARTED ON LINE 11 
       echo "</li>";} // THIS IS THE END OF THE <LI> FROM THE FIRST FOREACH ECHO FROM LINE 8 



     } // THIS BRACKET ENDS THE ENTIRE SET OF PHP. ITS PAIR IS ON LINE 19 

?> 

總體目標是隻能通過編輯variables.php

加/減環節,subnavs,分subnavs,分次subnavs下面是這個導航結構工作的一個活生生的例子...... http://khill.mhostiuckproductions.com/siteLSSBoilerPlate/

+0

一目瞭然,我想知道爲什麼你不只是使用多維數組或喙出php來編寫html。並回答你的問題 - 是的,是的。 – 2013-02-14 17:57:33

+0

我嘗試了一個多維數組,但是我無法讓它工作,甚至在查看其他代碼之後。毫無疑問,由於我缺乏知識。 – Michael 2013-02-14 18:02:15

回答

0

你在做什麼幾乎是當場上,但你讓你自己寫在你自己的代碼 而是允許它是通用的,所以寫一個函數,可以調用本身如果需要,做這樣的:

$menu_items = array(
    'Home' => 'index.php' 
    'About' => array('about.php', 
     array('Our Team'=>'ourteam.php'), 
    etc 
    ); 
?> 
  • 開始<ul>
  • 遍歷給定的數組
  • 添加<li>
  • 如果IS_STRING()這是一項附加<a href>
  • 如果is_array()有子項,
    • 添加<a href>
    • 第二個元素髮送到這個功能,並追加HTML返回
  • 接近</li>
  • 接近</ul>
  • 回報它

一個函數處理所有元素,無論它們是主元素還是子元素,並且無論您擁有多少個子列表,都會調用一次完成列表。現在

,爲你的小菜單只是他們的鍵(主頁,關於,服務)與一個函數創建HTML

+0

這是有道理的。你能提供一個例子,說明這個功能可能是什麼樣的,或者是一個可以指引我的地方的鏈接? 謝謝! – Michael 2013-02-14 18:14:39

0

一個更清潔的解決方案之前,挑選出從主數組中的元素是構建導航他們使用multidimensional arrays,然後iterate through。如果數組的value是另一個數組,那麼您知道它有一個子菜單。

相關問題