@Tomberg

Как написать форму для добавления пункта меню на страницу, на php?

Я только начал изучать php и не знаю с какой стороны подступиться к задаче...
На html странице у меня имеется двухуровневый список, первый уровень это категория, второй это ссылки.
<ul class="categories">
	<li><a href="#">Категория 1</a>
		<ul>
			<li><a href="#">Ссылка 1</a></li>
			<li><a href="#">Ссылка 2</a></li>
		</ul>
	</li>
</ul>

Мне нужно создать форму ввода, добавляющую ссылку в этот список.
Получается мне нужна форма, в которой будет как минимум три поля - выбор категории из списка, ввод ссылки, ввод названия.
Т.е. допустим я выбираю в форме категорию 1, ввожу ссылку "toster.ru" и название "Тостер", и в хтмл страницы, в списке соответствующем категории, добавится
<li><a href="toster.ru">Тостер</a></li>
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 2
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Не самая простая задача для новичка, давай разберем по порядку что тебе надо сделать.
1) тебе надо как-то хранить список категорий и их ссылок
2) тебе надо получить структуру меню в переменную
3) тебе надо построить само меню

Я исхожу из того, что хранить информацию о меню ты будешь в базе.

Пусть в базе будет две таблицы:
menu_category
~~~~~~~
id
name
order

menu_items
~~~~~~~~~~~
id
menu_category_id
name
url
order

дальше, ты примерно вот таким запросом получаешь все пункты меню
SELECT 
	`c`.`id` as `id`,
	`c`.`name` as `name`,
	`i`.`id` as `item_id`,
	`i`.`name` as `item_name`,	
	`i`.`url` as `item_url`
FROM `menu_category` as `c` 
LEFT JOIN `menu_items` as `i` ON `i`.`menu_category_id`=`c`.`id` 
ORDER BY `c`.`order`, `i`.`order`

теперь группируем результаты по id категории тем самым получая удобную структуру для формирования меню
$menu = [];
foreach ($results as $res) {
	$menu[$res['id']]['name'] = $res['name'];
	$menu[$res['id']]['items'][] = [
		'name' => $res['item_name'],
		'url' => $res['item_url'],
	]
}

в результате имеем массив с такой структурой:
[1]=>[
	'name' => 'Категория 1',
	'items' => [
		['name'=>'Ссылка 11', 'url'=>'http://site11.ru'],
		['name'=>'Ссылка 12', 'url'=>'http://site12.ru'],	
	]
],
[2]=>[
	'name' => 'Категория 2',
	'items' => [
		['name'=>'Ссылка 21', 'url'=>'http://site21.ru'],
		['name'=>'Ссылка 22', 'url'=>'http://site22.ru'],	
	]
],

теперь осталось все это вывести, используем такой код
echo '<ul>';
foreach($menu as $catId=>$cat) {
	echo '<li>'.$cat['name'];
	if (isset($cat['items'])) {
		echo '<ul>';
		foreach($cat['items'] as $item) {
			echo '<li><a href="'.$item['url'].'">'.$item['name'].'</a></li>';
		}
		echo '</ul>';
	}
	echo '</li>';
}
echo '</ul>';


вот и всё, осталось написать формы для добавления данных в соответствующие таблицы бд
Ответ написан
dima9595
@dima9595
Junior PHP
Если меню находится в БД и генерируются ссылки, то используйте MySQL/MySQLi запросы. Если у вас меню только как HTML код, то только через Java Scripts (можно и jQuery, если вы новичёк). Но второй способ я считаю непригодным на хороших сайтах, т.к. толком некуда сохранять данные меню. Если конечно кэши и т.п., то они временные...желательно использовать БД.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы