#php #javascript #mysql #html #menu
#php #javascript #mysql #HTML #меню
Вопрос:
Есть несколько идей для создания выпадающего меню из данных, заполненных из xml или json. Но как я могу сделать это чисто с помощью php? Возможным методом является создание многоуровневого массива. Но каков наилучший способ создать его из данных mysql (с родительским идентификатором для подменю) и как эффективно считывать массив (через цикл foreach?)?
Ответ №1:
на стороне php предположим, что вы извлекаете с помощью этого запроса то, что находится в таблице в массиве формата:
$menu = array(
'page/1' => 'about',
'page/2' => 'photos',
'menu-title' => array('page/4' => 'sub-menu-1','page/5' => 'sub-menu-2')
);
echo '<ul>';
foreach($menu as $key => $value){
if(is_string($value)){
echo '<li><a href="'.$key.'">'.$value.'</a></li>';
}
if(is_array($value)){
echo '<ul>';
echo '<li><a href="#">'.key($value).'</a></li>';
foreach($value as $sub_key => $sub_value){
echo '<li><a href="'.$sub_key .'">'.$sub_value.'</a></li>';
}
echo '</ul>';
}
}
echo '</ul>';
для базы данных mysql, имейте столбец «parent_id», если он равен нулю, тогда это будет корневой уровень, кроме этого, там будет подзаголовок, еще один столбец «path» и «title, вы также можете добавить столбец «weight», чтобы упорядочить их.
ПРИМЕЧАНИЕ: это непроверенный код
Комментарии:
1. Я протестировал его, и он идеален. Спасибо!
Ответ №2:
Мне нравится перебирать строки, извлеченные из mysql, и создавать массив, где ключ — это значение для ввода, а значение — текст. Итак, если вы хотите создать выпадающий список, например:
<input value="UT">Utah</input>
<input value="VT">Vermont</input>
<input value="NV">Nevada</input>
<input value="CA">California</input>
Я бы создал массив, который выглядел бы так:
array(
"UT" => "Utah",
"VT" => "Vermont",
"NV" => "Nevada",
"CA" => "California",
)
Очень легко перевести массив в html с помощью foreach .
Комментарии:
1. Вы рассматривали его как выпадающую форму, но я имею в виду список меню как <ul><li><ul> ….. и проблема в том, как перечислить дочерние элементы.
2. это не приведет к созданию выпадающего списка, для которого вам нужно использовать select.