0

次のテーブル構造を考慮してください。

+----+-----------+--------+
| id | page_name | parent |
+----+-----------+--------+
|  1 |   Page 1  |   0    |
+----+-----------+--------+
|  2 |   Page 2  |   1    |
+----+-----------+--------+
|  3 |   Page 3  |   2    |
+----+-----------+--------+
|  4 |   Page 4  |   1    |
+----+-----------+--------+

各ページをループして、ツリーを下っていくたびにインデントします。問題は、親のレベルに制限がないことです (つまり、どのページでも子を持つことができます)。<select>次のように要素に出力したい:

Page 1
  Page 2
    Page 3
  Page 4

Page クラスには 2 つの関数があります。1 つはHasChildren()で、もう 1 つは ですFetchChildren()。これが私が考えていたことですが、最初のレベルの子ページのみを出力します:

while($record = $result->fetch_object())
{
    $page = new self($record->id);
    $selected = ($page->id == $selectedVal) ? ' selected="selected"' : '';
    $select.= '<option value="'. $page->id .'"'. $selected .'>'. $page->name .'</option>';

    $i = 1;
    $child = $page;

    while($child->HasChildren($active))
    {
        $indentString= '&nbsp;-&nbsp;';
        for($j = 1; $j <= $i; $j++) { $indentString = '&nbsp;'.$indentString; }

        foreach($child->FetchChildren($active) as $child_child)
        {
        $selected = ($child_child->id == $selectedVal) ? ' selected="selected"' : '';
        $select.= '<option value="'. $child_child->id .'"'. $selected .'>'. $indentString.$child_child->name .'</option>';

        $child = $child_child;
        }
        $i++;
    }
}

誰かが私を正しい方向に向けることができますか? 長い一日だったので、おそらく非常に明白な何かを見逃しています。

4

0 に答える 0