再帰によってサイトのナビゲーションを構築する方法を使用していますが、スタイルの追加に問題があります。私のメソッドの構築方法では、親を親クラスにし、子を子クラスにする方法がわからないので、CSS で 2 つのスタイルを設定できます。理解しやすくするために、私のデータベースの例を次に示します。
私が達成しようとしている出力の例を次に示します。
<ul>
<li class="parent">Parent
<ul>
<li class="child">Child 1</li>
<li class="child">Child 2</li>
<li class="child">Child 3</li>
<li class="child">Child 4</li>
</ul>
</li>
</ul>
現在のコードは、 のすべてのインスタンスに child を配置します<li>
。私はさまざまなことを試しましたが、これは私を殺しています。コードは次のとおりです。
/* i'm using pdo to pull all the categories out of MySQL, NULL means it will be a parent category */
$array = $categoryVIEW->fetchAll(PDO::FETCH_ASSOC);
$this->buildSide($array,NULL)
private function buildSide($items,$parent)
{
$hasChildren = false;
$outputHtml = '<ul>%s</ul>';
$childrenHtml = '';
foreach($items as $item)
{
if ($item['parent'] == $parent)
{
$hasChildren = true;
$childrenHtml .= '<li><a href="?c='.$item['category_id'].'">'.$item['category_name'];
$childrenHtml .= $this->buildSide($items,$item['category_id']);
$childrenHtml .= '</a></li>';
}
}
if (!$hasChildren)
{
$outputHtml = '';
}
return sprintf($outputHtml,$childrenHtml);
}
簡単なことだと思いますが、行き詰まっています:(
ご覧いただきありがとうございます。
アップデート
私は自分のコードで遊んでいて、存在をチェックする条件を追加し$parent
、そうNULL
であれば$class
親を作り、そうでなければ$class
子を作りました。私が抱えている問題は<ul></ul>
、すべての子供の後に望まないものを手に入れていることですか? 奇妙なのは、変更$child = false;
すると誤っ<ul></ul>
た が削除されますが、すべてが親になります。
private function buildSide($array,$parent)
{
$child = ($parent === NULL)?false:true;
$html = '';
$tag = '<ul>%s</ul>';
$class = ($child)?'child':'parent';
foreach($array as $item)
{
if($item['parent'] === $parent)
{
$child = true;
$html .= '<li class="'.$class.'">'.$item['category_name'];
$html .= $this->buildSide($array,$item['category_id']);
$html .= "</li>\n";
}
}
if(!$child)
{
$tag = '';
}
return sprintf($tag,$html);
}