2010-03-29 6 views
0

Comme une des étapes vers une nouvelle conception de site Web, je mets la majorité du contenu de notre site Web dans des fichiers html à utiliser comme inclus. J'ai l'intention de passer une variable à la page de modèle de PHP par l'URL pour appeler l'inclusion appropriée.PHP Menu Question

Notre site Web a de nombreux programmes qui ont chacun besoin d'une page d'index ainsi que d'environ 5 sous-pages. Ces pages de programme auront besoin d'un système de menu pour naviguer entre les différentes pages. Je nomme les pages pagex_1, pagex_2, pagex_3, etc. où "pagex" est descriptif du contenu de la page.

Ma question est, quelle serait la meilleure façon de gérer ce système de menu? Y at-il un moyen de modifier la variable initiale utilisée pour arriver à la page d'index pour créer des liens dans le menu pour arriver aux autres pages?

Merci pour toute aide!

Répondre

0

Je stocker la structure de menu dans un tableau PHP associatif comme ceci:

$menu = array(
    'index'=>array(
    'title'=>'Homepage', 
    'include'=>'home.html', 
    'subitems'=>array() 
), 
    'products' => array(
    'title'=>'Products', 
    'include'=>'products.html', 
    'subitems'=>array(
     'product1'=>array(
      ... 
     ), 
     'product2'=>array(
      ... 
     ), 
     'product3'=>array(
      ... 
     ) 
    ) 
) 
); 

Faire ce tableau au script de modèle ainsi (par exemple par include/require). Ensuite, utilisez délimiteurs dans la variable pour identifier l'élément de menu (comme un système de fichiers fait avec les dossiers et fichiers) et donc la page qui à inclure:

  • « index » identifierait la page d'index
  • produits » 'serait identitée les produits commencent à la page
  • « produits/product1 » identifierait le produit 1 sous-page dans la page des produits

... et ainsi de suite.

0
// Menu Array multidimensional 
$menu = array(
    'index' => array(
     'title' => 'Homepage', 
     'include' => 'home.html', 
     'subitems' => array() 
    ), 
    'products' => array(
     'title' => 'Products', 
     'include' => 'products.html', 
     'subitems' => array(
      'product1' => array(
       'title' => 'product1', 
       'include' => 'product1.html', 
       'subitems' => array(
        'product1.2' => array(
         'title' => 'product1.2', 
         'include' => 'product1.2.html', 
         'subitems' => array() 
        ) 
       ) 
      ), 
      'product2' => array(
       'title' => 'product2', 
       'include' => 'product2.html', 
       'subitems' => array() 
      ), 
      'product3' => array(
       'title' => 'product3', 
       'include' => 'product31.html', 
       'subitems' => array() 
      ), 
      'product4' => array(
       'title' => 'product4', 
       'include' => 'product4.html', 
       'subitems' => array() 
      ) 
     ) 
    ) 
); 

// Make menu 
function makeMenu($menu_array,$is_sub = false,$list=['ul','li']){ 
    $attr = (!$is_sub) ? ' class="menu"' : ' class="submenu"'; 
    $child = NULL; 
    $menu = "<{$list[0]}{$attr}>"; 
    foreach($menu_array as $id => $items){ 
     foreach($items as $key => $val){ 
      if(is_array($val)) { 
       if (!empty($val)) $child = makeMenu($val,true,$list); 
      } else { 
       $$key = $val; 
      } 
     }//foreach 
     $menu .= "<{$list[1]}>"; 
      $menu .= '<a href="'.$include.'">'.$title.'</a>'; 
      $menu .= $child; // Sub Menu 
     $menu .= "</{$list[1]}>"; 
     unset($url, $text, $sub); 
    }//foreach 
    $menu .= "</{$list[0]}>"; 
    return $menu; 
} 

// retrieve the desired page with the shaft 
function makeSubMenu($menu, $key) { 
    return makeMenu(array($menu[$key])); 
} 
// chain Article 
function chainItem(array $array, $unset = ''){ 
    $ds = array(); 
    if (is_array($array)) 
     foreach((array)$unset as $arr) unset($array[$arr]); 
     foreach($array as $key=>$value) 
      if (!is_array($value)) $ds[$key] = $value; 
    return $ds; 
} 
// Build walk recursive -> single array insert database MySql 
function walkRecursive($array, $ordId = true, $unset=[], $children = 'children', $i = 1, $parent = 0, &$res = []) { 
    if (!is_array($array)) return array(); 
    foreach(array_values($array) as $key=>$arr) { 
     $das = array( 
      'id' => $id = $ordId ? $arr['id'] : $i++, 
      'parent' => $parent 
     ); 
     $res[] = array_merge($das,chainItem($arr,$unset)); 
     if(isset($arr[$children])) { 
      walkRecursive($arr[$children], $ordId, $unset, $children, $i, $id, $res); 
     } 
    } 
    return $res; 
} 

echo makeMenu($menu); 

// Result of the print 
<ul class="menu"> 
    <li><a href="home.html">Homepage</a></li> 
    <li><a href="products.html">Products</a> 
     <ul class="submenu"> 
      <li><a href="product1.html">product1</a> 
       <ul class="submenu"> 
        <li><a href="product1.2.html">product1.2</a></li> 
       </ul> 
      </li> 
      <li><a href="product2.html">product2</a> 
       <ul class="submenu"> 
        <li><a href="product1.2.html">product1.2</a></li> 
       </ul> 
      </li> 
      <li><a href="product31.html">product3</a> 
       <ul class="submenu"> 
        <li><a href="product1.2.html">product1.2</a></li> 
       </ul> 
      </li> 
      <li><a href="product4.html">product4</a> 
       <ul class="submenu"> 
        <li><a href="product1.2.html">product1.2</a></li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 



// Build walk recursive -> single array insert database MySql 
header("Content-type: text/plain"); 
print_r(walkRecursive($menu,false,['parent','id'],'subitems')); 
// Print array -> Result: 

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [parent] => 0 
      [title] => Homepage 
      [include] => home.html 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [parent] => 0 
      [title] => Products 
      [include] => products.html 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [parent] => 2 
      [title] => product1 
      [include] => product1.html 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [parent] => 3 
      [title] => product1.2 
      [include] => product1.2.html 
     ) 

    [4] => Array 
     (
      [id] => 4 
      [parent] => 2 
      [title] => product2 
      [include] => product2.html 
     ) 

    [5] => Array 
     (
      [id] => 5 
      [parent] => 2 
      [title] => product3 
      [include] => product31.html 
     ) 

    [6] => Array 
     (
      [id] => 6 
      [parent] => 2 
      [title] => product4 
      [include] => product4.html 
     ) 

) 
+0

Veuillez ajouter quelques détails supplémentaires à votre réponse en dehors du code. Merci! – maxshuty

+0

un petit changement pour supprimer le tableau: unset ($ url, $ text, $ sub) pour -> unset ($ child); – Clary