PHP を使用してメガ メニューを作成しようとしていますが、構造を正しく出力するのに問題があります。すべてをテストするために Mega Menu をハードコーディングしましたが、問題なく動作しますが、明らかに、それを作成するには PHP が必要です。
私が作成しようとしているものを誰もが見ることができるように、メガ メニューをハードコードした例があります。
http://www.libertyeaglearms.com/dev
または、コードは次のとおりです。
望ましい出力:
<div id="wrapper">
<ul class="mega-menu">
<li class="mega-menu-drop">
<a href="#">Firearms</a>
<div class="mega-menu-content">
<div class="column">
<h4>Rifles</h4>
<ul>
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
<li><a href="#">Five</a></li>
</ul>
</div>
<div class="column">
<h4>Handguns</h4>
<ul>
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
<li><a href="#">Five</a></li>
</ul>
</div>
<div class="column">
<h4>Shotguns</h4>
<ul>
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
<li><a href="#">Five</a></li>
</ul>
</div>
</div>
</li>
<li class="mega-menu-drop">
<a href="#">Archery</a>
<div class="mega-menu-content">
<div class="column">
<h4>Bows</h4>
<ul>
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
<li><a href="#">Five</a></li>
</ul>
</div>
<div class="column">
<h4>Arrows</h4>
<ul>
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
<li><a href="#">Five</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
現在の出力: (非常にめちゃくちゃです。注意してください、笑)
<div id="wrapper">
<ul class="mega-menu">
<li class="mega-menu-drop">
<a href="#">archery</a>
<div class="mega-menu-content">
<div class="column">
<h4>compound</h4>
<ul>
<h4>bows</h4>
<ul>
</div>
</li>
<li class="mega-menu-drop">
<a href="#">firearms</a>
<div class="mega-menu-content">
<div class="column">
<h4>rifle ammunition</h4>
<ul>
<h4>ammunition</h4>
<ul>
</div>
</li>
</ul>
</div>
ここに私のPHP:
$json = json_decode($category->buildDepartments(NULL),true);
function buildDepartments($array,$parent)
{
$html = '';
foreach($array as $category)
{
if($category['parent'] == $parent)
{
if($category['parent'] == NULL)
{
$html .= '<li class="mega-menu-drop">' . "\n\t\t\t\t";
$html .= '<a href="#">'.$category['category_name'].'</a>' . "\n\t\t\t\t";
$html .= '<div class="mega-menu-content">' . "\n\t\t\t\t\t";
$html .= '<div class="column">' . "\n\t\t\t\t\t\t";
$html .= buildDepartments($array,$category['category_id']);
$html .= '</div>' . "\n\t\t\t";
$html .= '</li>' . "\n\t\t\t";
}
else
{
$html .= buildDepartments($array,$category['category_id']);
$html .= '<h4>'.$category['category_name'].'</h4>' . "\n\t\t\t\t\t\t";
$html .= '<ul>' . "\n\t\t\t\t";
}
}
}
return $html;
}
print(buildDepartments($json,NULL));
ここに私のデータベースがあります:
バウンティ後に編集
icktoofay が提案したことから構築すると、foreach()
ループを理解できないようです。私が得ている問題は、カテゴリとサブカテゴリを表示する必要があるときに、メガメニュー内に部門名を取得することです。問題は、すべての子を取得するために特定の親 ID でループを実行する必要があることだと思いますが、それが問題かどうかはよくわかりません。コードは次のとおりです。
<div id="wrapper">
<ul class="mega-menu">
<?php $json = json_decode($category->buildDepartments(NULL)); ?>
<?php foreach($json as $category): ?>
<li class="mega-menu-drop">
<a href="#"><?php if($category->parent === NULL){echo $category->category_name;} ?></a>
<div class="mega-menu-content">
<?php foreach($category as $subcategory): ?>
<div class="column">
<?php if($category->category_id === $category->parent){echo '<h4>' . $category->category_name . '</h4>';}?>
<ul>
<?php foreach($category as $subcategory)
{
echo '<li>' . $category->category_name . '</li>';
}
?>
</ul>
</div>
<?php endforeach; ?>
</div>
</li>
<?php endforeach; ?>
</ul>
</div>