2013-05-31 6 views
0

Только на этот вопрос У меня есть крошечные базы данных продуктов, которые являются три слоя глубиной:динамический PHP меню уль

название:
Аксессуары/Air Грили/AG7030
Аксессуары/Air Грили/AG7031
воздуха Клапаны/воздушный клапан Louver Тип/AV4000
воздуха Клапаны/воздушный клапан Louver Тип/AV4001
воздуха Клапаны/воздушный клапан тарельчатого типа - High Flow/AV4031

Я хочу вытащить эти заголовки из базы данных и использовать php explode, чтобы превратить их в массив и использовать эти элементы массива для меню навигации ul. Конечный результат должен быть:

<ul> 
    <li> 
     <a>Accessories</a> 
     <ul> 
      <li> 
       <a>Air Grills</a> 
       <ul> 
        <li>AG7030</li> 
        <li>AG7031</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <a>Air Valves</a> 
     <ul> 
      <li> 
       <a>Air Valve Louver Type</a> 
       <ul> 
        <li>AV4000</li> 
        <li>AV4001</li> 
       </ul> 
      </li> 
      <li> 
       <a>Air Valve Poppet Type - High Flow</a> 
       <ul> 
        <li>AV4031</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

-Пожалуйста, обратите внимание, что человек должен быть в состоянии бросить в новой категории в любое время

Есть ли кто-нибудь, что даст мне совет относительно того, что я должен делать и как Я должен начать?

+0

Записи в базе данных буквально являются строками типа 'Аксессуары/Воздушные грили/AG7030'? Если это так, я бы рекомендовал переработать базу данных для разделения продуктов и категорий на разные таблицы. См. Http://www.sitepoint.com/hierarchical-data-database/. – Justin

+0

Yeh к сожалению. Я использую CMS, где пользователь должен иметь возможность вводить продукт в любое время и динамическое обновление навигации по URL-адресу продукта – mdurchholz

ответ

0

Я использую "\t", "\n" только показать отступы в источнике html

<?php 

$data = array(
    'Accessories/Air Grills/AG7030', 
    'Accessories/Air Grills/AG7031', 
    'Air Valves/Air Valve Louver Type/AV4000', 
    'Air Valves/Air Valve Louver Type/AV4001', 
    'Air Valves/Air Valve Poppet Type - High Flow/AV4031', 
); 


$level0 = ''; 
$level1 = ''; 

echo "<ul>\n"; 

foreach($data as $row) { 

    $split = explode("/", $row); 

    if($split[0] != $level0) { 
     // close previous levels 
     if($level0 != '') echo "\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</li>\n"; 

     // new level0 
     echo "\t<li>\n"; 

     // new title 
     echo "\t\t<a>" . $split[0] . "</a>\n"; 

     // new level1 
     echo "\t\t<ul>\n"; 

     $level0 = $split[0]; 
     $level1 = ''; 
    } 

    if($split[1] != $level1) { 
     // close previous levels 
     if($level1 != '') echo "\t\t\t\t</ul>\n\t\t\t</li>\n"; 

     // new level1 
     echo "\t\t\t<li>\n"; 

     // new title 
     echo "\t\t\t\t<a>" . $split[1] . "</a>\n"; 

     // new level2 
     echo "\t\t\t\t<ul>\n"; 

     $level1 = $split[1]; 
    } 

    // level2 
    echo "\t\t\t\t\t<li>", $split[2], "</li>\n"; 
} 

// close previous levels 
if($level0 != '') echo "\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</li>\n"; 

echo "</ul>\n"; 

?> 
+0

Большое спасибо! – mdurchholz

1

Вот быстрая функция, которая может это сделать .. если вы уже есть набор результатов, что это массив, такие как:

Array(
    parent => array(
     item 1, 
     item 2, 
     item 3 => array(
     child 1, 
     child 2 
    ) 
    ), 
    some other link, 
    some other 
) 

И функции:

<?php 
function drawMenu($items) { 
    $menu = ""; 
    $menu .= "<ul>\n"; 
    foreach($items as $key => $item) { 
    $menu .= "<li>"; 
    if(is_array($item)) { 
     $menu .= $key."\n"; 
     $menu .= drawMenu($item); 
    } else { 
     $menu .= $item; 
    } 
    $menu .= "</li>\n"; 
    } 
    $menu .= "</ul>\n"; 
    return $menu; 
} 

$links = array(
    "parent" => array(
    "child 1", 
    "child 2", 
    "child 3" => array(
     "child child 1", 
     "child child 2" 
    ) 
), 
    "some other parent", 
    "another parent" 
); 

echo drawMenu($links); 
?> 

Это даст выход из:

<ul> 
    <li>parent 
     <ul> 
     <li>child 1</li> 
     <li>child 2</li> 
     <li>child 3 
      <ul> 
      <li>child child 1</li> 
      <li>child child 2</li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li>some other parent</li> 
    <li>another parent</li> 
    </ul> 
Смежные вопросы