ネストされた順序付けられていないhtmlリストを生成するクラスがあります。
class cTree {
function cTree(){
}
public function getTree($id = NULL ){
}
private function addSubNode($iParentId, $iLevel){
}
addSubnode は、ネストを正しく行うための再帰関数です。
今、私は自分のウェブサイトに 2 つのナビゲーション メニューを用意したいと考えています。どちらも順不同のリストですが、マークアップが異なります。
私が見たように、3つのオプションがあります:
getTree() と addSubNode() に追加の変数を渡し、if/else 構造を使用します。メンテナンスができないので、私はそれが好きではありません。
クラスに 2 つの関数を追加します。たとえば、getTopTree()/ getFooterTree と addTopSubNode()/ addFooterSubNode(); を作成します。
2 つの新しいクラスを作成し (class cTopMenu extends cTree / class cFooterMenu extends cTree )、好みに合わせて getTree/addSubNode を編集します。
前述のとおり、1 番目のオプションは好きではありませんが、2 番目と 3 番目のオプションについてはわかりません。最適なデザインの選択は何でしょうか?
状況をより明確にするための追加の例。上記と同じではありませんが、間違いなく比較できます。ナビゲートするためのツリーがあります:
<ul>
<li><a href="/x">Item 1 </a></li>
<li><a href="/x">Item 2 </a></li>
<li><a href="/x">Item 3 </a></li>
</ul>
次に、管理オプションを備えた別のものがあります。
<form method="post">
<ul>
<li>
<input type="text" value="Item 1" />
<input type="checkbox" value="1" id="visible_1" name="visible[]">
<label for="visible_1"> visible</label>
</li>
<li>
<input type="text" value="Item 2" />
<input type="checkbox" value="1" id="visible_2" name="visible[]">
<label for="visible_2"> visible</label>
</li>
<li>
<input type="text" value="Item 3" />
<input type="checkbox" value="1" id="visible_3" name="visible[]">
<label for="visible_3"> visible</label>
</li>
</ul>
</form>
基本的に同じ木です。今のところ、getTree() 関数と addSubNode() 関数を置き換えて、基本的なツリー クラスを拡張しました。