-1

I got this nav menu in html and I need to convert it into php. I tried with php array and foreach but I stuck on the subitems. I cant figure out right now what should I do. Any ideas?

This is what i did till now.

  1. Make an array for the parent items.

    //Nav Items
    $navItems = array(
    array(
        slug   => "index.php",
        title  => "Home"
    ),
    array(
        slug   => "cruise-partners.php",
        title  => "Cruise Partners"
    ),
    array(
        slug   => "destinations.php",
        title  => "Destinations"
    ),
    array(
        slug   => "cruise-deals.php",
        title  => "Cruise Deals"
    ),
    array(
        slug   => "cruise-type.php",
        title  => "Cruise Type"
    ),
    array(
        slug   => "river-cruise.php",
        title  => "River Cruise"
    ),
    array(
        slug   => "luxury.php",
        title  => "Luxury"
    ),
    array(
        slug   => "contact.php",
        title  => "Contacts"
    )
    
    );
    
    ?>
    
  2. Use foreach and echo them

          <div class="containermargins clearfix">
          <nav class="hmenu"data-responsive-menu="true"data-responsive-levels="">
           <div class="responsivemenu collapse-button">
          <div class="container-inner">
            <div class="menuitem ">
              <a data-toggle="collapse"data-target=".hmenu .collapse-button + .navbar-collapse"href="#"onclick="return false;"><span></span></a>
          </div>
      </div>
       </div>
      <div class="navbar-collapse collapse">
      <div class="horizontalmenu  clearfix">
          <div class="container-inner">
              <ul class="menu  nav nav-pills nav-justified">  
    
    `<?php foreach ($navItems as $item) {
    echo '<li class="menuitem  submenu-icon-only toplevel-item"><a class="active" href=\"$item[slug]\">$item[title]</a></li>';
      } ?>`
    
          </ul>
    </div>
      </div>
    

    Here is my html nav menu.

    <div class="containermargins clearfix">
    <nav class="hmenu"data-responsive-menu="true"data-responsive-levels="">
    <div class="responsivemenu collapse-button">
      <div class="container-inner">
          <div class="menuitem ">
              <a data-toggle="collapse"data-target=".hmenu .collapse-button + .navbar-collapse"href="#"onclick="return false;"><span></span></a>
              </div>
            </div>
         </div>
        <div class="navbar-collapse collapse">
        <div class="horizontalmenu  clearfix">
          <div class="container-inner">
              <ul class="menu  nav nav-pills nav-justified">
        <li class="menuitem  submenu-icon-only toplevel-item">
        <aclass="active"title=" Direction - Tailor-made  Holidays"href="./home.html">Home</a>
           <div class="menu-popup ">
            <ul class="menu no-margins">
                <li class="menuitem sub-item sub-item">
           <a title="About Us"href="./home/about-us.html">About Us</a>
                </li>
                <li class="menuitem sub-item sub-item">
          <a title="FAQ"href="./home/faq.html">FAQ</a>
                </li>
            </ul>
            </div>
           </li>
           <li class="menuitem  submenu-icon-only toplevel-item">
          <a title=" Partners"href="./partners.html">Partners</a>
         <div class="menu-popup ">
           <ul class="menu no-margins">
                <li class="menuitem sub-item sub-item">
                <a title="Carnival"href="./partners/carnivals.html">Carnivals</a>
               </li>
               <li class="menuitem sub-item sub-item">
                <a title="Celebrity"href="./partners/Celebrity.html">Celebrity</a>
                <div class="menu-popup ">
      <ul class="menu no-margins">
         <li class="menuitem sub-item sub-item">
          <a title="Third Level 1"href="./partners/Celebrity/third-level-one.html">Third Level 1</a>
      </li>
        </ul>
                </div>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Cunard"href="./partners/cunard.html">Cunard</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Holland America Line"href="./partners/holland-america-line.html">Holland America Line</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Norwegian"href="./partners/norwegian.html">Norwegian</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Princess"href="./partners/princess.html">Princess</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Star Clippers"href="./partners/star-clippers.html">Star Clippers</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="PO"href="./partners/p-and-o.html">PO</a>
            </li>
            <li class="menuitem sub-item sub-item">
                <a title="Royal Caribbean"href="./partners/royal-caribbean.html">Royal Caribbean</a>
            </li>
           </ul>
          </div>
         </li>
           <li class="menuitem  toplevel-item">
           <a title="Destinations"href="./destinations.html">Destinations</a>
        </li>
        <li class="menuitem  toplevel-item">
        <a title=" Deals"href="./deals.html"> Deals</a>
      </li>
        <li class="menuitem  toplevel-item">
       <a title=" Type"href="./type.html"> Type</a>
      </li>
       <li class="menuitem  toplevel-item">
         <a title="River "href="./river-.html">River </a>
      </li>
        <li class="menuitem  toplevel-item">
         <a title="Luxury"href="./luxury.html">Luxury</a>
        </li>
         <li class="menuitem  toplevel-item">
         <a title="Contacts"href="./contacts.html">Contacts</a>
        </ul>
      </div>
      </div>
     </div>
     </nav>
    

DopeAt
  • 451
  • 3
  • 15

2 Answers2

2

You can create a nested array with the sub-items and iterate through it with a recursive function.
This way you can add as many sub-levels as you need.

$navItems = array(
    array(
        "slug"   => "index.php",
        "title"  => "Home"
    ),
    array(
        "slug"   => "cruise-partners.php",
        "title"  => "Cruise Partners",
         "subitems" => array(
             array(
                "slug"=>"x.html",
                "title"=>"sub-item.html"
             )
         )

    ),
    array(
        "slug"   => "destinations.php",
        "title"  => "Destinations"
    ),
    array(
        "slug"   => "cruise-deals.php",
        "title"  => "Cruise Deals"
    ),
    array(
        "slug"   => "cruise-type.php",
        "title"  => "Cruise Type",
    ),
    array(
        "slug"   => "river-cruise.php",
        "title"  => "River Cruise"
    ),
    array(
        "slug"   => "luxury.php",
        "title"  => "Luxury"
    ),
    array(
        "slug"   => "contact.php",
        "title"  => "Contacts"
    )
);


function drawMenu($items){
    echo "<ul>";
    foreach($items as $item){
        echo "<li><a href='".$item['slug']."'>".$item['title']."</a>";
        if(isset($item['subitems'])){
            echo "<ul>";
            drawMenu($item['subitems']);
            echo "</ul>";
        }
        echo "</li>";
    }
    echo "</ul>";
}

drawMenu($navItems);
Community
  • 1
  • 1
Ezenhis
  • 997
  • 9
  • 14
  • Yes Ezenhis that exactly what i did. My brain just stuck before and just need the idea a clue on how to continue. I appreciate your answer – DopeAt Apr 12 '17 at 16:36
1

You'll need to restructure your array to include sub items. You can use the Short Array Syntax which I prefer when nesting a lot.

$navItems = 
[ 
    [
        'title' => 'First Option'
        'slug' => 'first-option'
        'sub' => [
                     'title' => 'First Option Sub'
                     'slug' => 'first-option-sub'
                 ],
                 [
                     'title' => 'First Option Sub 2'
                     'slug' => 'first-option-sub-2'
                 ]
    ],
    [

        'title' => 'First Option'
        'slug' => 'first-option'
        'sub' => [
                     'title' => 'First Option Sub'
                     'slug' => 'first-option-sub'
                 ]
    ]
]

When it comes to actually displaying the sub items, you'll need to loop through the $navItem array and check for the existence of 'sub'. If it exists, simply loop through it in the same manner.

I found it difficult to understand your HTML, so this may not be exactly the same structure, but it should give you the idea.

<?php foreach ($navItems as $item) { ?>

    <li class="menuitem  submenu-icon-only toplevel-item">
        <a class="active" href="/<?= $item['slug'] ?>">
            <?= $item['title'] ?>
        </a>
    </li>
    <?php if (isset($item['sub']) { ?>

          <?php foreach($item['sub'] as $subItem) { ?>

              <li class="sub-item>
                  <a href="/<? $subItem['slug'] ?>">
                      <?= $subItem['title'] ?>
                  </a>
              </li>

          <?php } ?>           
    <?php } ?>
<?php } ?>