次のテーブル構造を考慮してください。
+----+-----------+--------+
| 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= ' - ';
for($j = 1; $j <= $i; $j++) { $indentString = ' '.$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++;
}
}
誰かが私を正しい方向に向けることができますか? 長い一日だったので、おそらく非常に明白な何かを見逃しています。