Мне нужна помощь с PHP. У меня многоуровневое css-меню, которое отлично работает, но теперь я хочу сгенерировать в соответствии с записями из базы данных.
Меню Код:
<div id="page-wrap"> <ul class="dropdown"> <li><a href="#">Link 1</a> </li> <li><a href="#">Link 2</a> </li> <li><a href="#">Link 3</a> </li> <li><a href="#">Link 4</a> <ul class="sub_menu"> <li><a href="#">Link 4 - 1</a></li> <li><a href="#">Link 4 - 2</a></li> <li><a href="#">Link 4 - 3</a></li> </ul> </li> <li><a href="#">Link 5</a></li> <li><a href="#">Link 6</a> </li> </ul> </div>
В базе данных каждая запись имеет поле main_manu, которое делает его главной ссылкой, если значением этого поля является « Да» , а если значение « Нет», то в нем есть другое поле ( sub_menu ), в котором указано родительское меню, в котором эта ссылка должна быть размещены.! Смотрите скриншот. Поля БД
Итак, теперь я не знаю, как сделать часть php, которая получит записи, и если значение main_menu будет да, оно создаст меню верхнего уровня, и если значение main_menu не будет, оно создаст под-уровневое меню в соответствии со значением поля sub_menu .
большое спасибо
ОБНОВИТЬ
Это код, который у меня есть до сих пор, и он работает. Было бы неплохо, если бы я мог использовать один запрос вместо нескольких вложенных запросов.
<div id='page-wrap'> <ul class='dropdown'> <? $sql_menu = "SELECT * FROM content WHERE visible = '1' and main_menu='yes' "; $result_menu = mysql_query($sql_menu); while($row = mysql_fetch_assoc($result_menu)) { $id=$row['id']; $menu_top=$row['menu_name']; $menu_url=$row['menu_url']; print "<li><a href='$menu_url'>$menu_top</a>"; $sql_sub = "SELECT * FROM content WHERE sub_menu = '$menu_url' "; $result_sub = mysql_query($sql_sub); $num_rows = mysql_num_rows($result_sub); while($row = mysql_fetch_assoc($result_sub)) { $id=$row['id']; $menu_sub=$row['menu_name']; $sub_url=$row['menu_url']; If ($num_rows != 0) { print "<ul class='sub_menu'> <li><a href='$sub_url'>$menu_sub</a></li> </ul>"; } } print "</li>"; } ?> </ul> </div>
Код для этого будет примерно следующим: (Это нужно будет изменить так, как вы взаимодействуете с базой данных и т. Д.):
// Here we do a query to get all the rows from the table $db_result = db_execute_query('SELECT * FROM `menu_table` ORDER BY `order_no`'); // Here we take the rows and put it into a structured array $items = array(); $hierarchy = array('' => array()); while ($row = db_fetch_row($db_result)) { $items[$row['menu_name']] = $row['menu_name_en']; if ($row['main_menu'] == 'yes') { $hierarchy[''][] = $row['menu_name']; } else { if (!isset($hierarchy[$row['sub_menu']]) { $hierarchy[$row['sub_menu']] = array(); } $hierarchy[$row['sub_menu']][] = $row['menu_name']; } } // Here we define a recursive function to run through our $hierarchy array; function show_menu($name = '') { if (isset($hierarchy[$name])) { if ($name == '') { echo '<ul class="dropdown">'; } else { echo '<ul class="sub_menu">'; } foreach ($hierarchy[$name] as $sub) { echo '<li><a href="#">' . $items[$sub] . '</a>'; show_menu($sub); echo '</li>'; } echo '</ul>'; } } // Here we execute the recursive function on the main menu show_menu('');
Попытайтесь понять, что я здесь делаю, вместо того, чтобы просто реализовать его дословно. Когда вы познакомитесь с рекурсивными функциями, вам откроется совершенно новый мир.
Также обратите внимание, что ваша таблица db может быть изменена, чтобы сделать этот код более простым
Я думаю, что эта связь поможет вам. если нет, пожалуйста, дайте мне знать, я дам вам код