[英]Menu Submenu with PHP Classes and Objects
我需要制作一个带有子菜单的菜单。 菜单“id”=>“parent1”=子菜单“parent”=>“parent1”。 如果父项没有子项,则仅回显父项。 如果父项有子项,则将所有子项插入父项中。 也许尝试使用 for 循环或其他解决方案?
如果存在子菜单,则每个子菜单子菜单都应按 id 插入其父菜单中。 如何?
代码示例应回显:
<div class="menu" href="myurl">Parent 1
<div class="submenu" href="myurl">Child 1</div>
<div class="submenu" href="myurl">Child 2</div>
</div>
<div class="menu" href="myurl">Parent 2
<div class="submenu" href="myurl">Child 3</div>
</div>
class menu {
public $id;
public $parent;
public $name;
public $url;
public function add_node($args) {
echo '
<div class="menu" href="' . $args['url'] . '">' . $args['name'] . '
<div class="submenu" href="' . $args['url'] . '">' . $args['name'] . '</div>
</div>';
}
}
if (class_exists('menu')){
global $menu;
$menu = new menu();
}
function menu_parent_child(){
$args = array(
'id' => 'parent1',
'name' => 'Parent 1',
'url' => 'myurl'
);
$args = array(
'parent' => 'parent1',
'name' => 'Child 1',
'url' => 'myurl'
);
$args = array(
'parent' => 'parent1',
'name' => 'Child 2',
'url' => 'myurl'
);
$args = array(
'id' => 'parent2',
'name' => 'Parent 2',
'url' => 'myurl'
);
$args = array(
'parent' => 'parent2',
'name' => 'Child 3',
'url' => 'myurl'
);
}
您的代码有一些问题。 以下是一些建议:
下面是一些示例代码,演示了如何使用这些更改来实现菜单:
<?php
class Menu {
private $elements = [];
public function add_node($args) {
$element = new stdClass();
$element->id = $args['id'];
$element->parent = $args['parent'] ?? null;
$element->name = $args['name'];
$element->url = $args['url'];
$element->children = [];
$this->elements[$element->id] = $element;
if ($element->parent) {
$this->elements[$element->parent]->children[] = $element;
}
}
public function get_html() {
$html = '';
foreach ($this->elements as $element) {
if (!$element->parent) {
$html .= $this->get_element_html($element);
}
}
return $html;
}
private function get_element_html($element) {
$html = '<div class="menu" href="' . $element->url . '">' . $element->name;
if (count($element->children) > 0) {
$html .= '<div class="submenu">';
foreach ($element->children as $child) {
$html .= $this->get_element_html($child);
}
$html .= '</div>';
}
$html .= '</div>';
return $html;
}
}
if (class_exists('Menu')) {
$menu = new Menu();
}
function menu_parent_child() {
global $menu;
$menu->add_node([
'id' => 'parent1',
'name' => 'Parent 1',
'url' => 'myurl',
]);
$menu->add_node([
'id' => 'child1',
'parent' => 'parent1',
'name' => 'Child 1',
'url' => 'myurl',
]);
$menu->add_node([
'id' => 'child2',
'parent' => 'parent1',
'name' => 'Child 2',
'url' => 'myurl',
]);
$menu->add_node([
'id' => 'parent2',
'name' => 'Parent 2',
'url' => 'myurl',
]);
$menu->add_node([
'id' => 'child1',
'parent' => 'parent2',
'name' => 'Child 1',
'url' => 'myurl',
]);
$menu->add_node([
'id' => 'child2',
'parent' => 'parent2',
'name' => 'Child 2',
'url' => 'myurl',
]);
}
menu_parent_child();
$html = $menu->get_html();
echo $html;`enter code here`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.