2013-02-14 74 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是另一个数组,那么您知道它有一个子菜单。

相关问题