データベースには、次のようなネストされたセットモデルを使用して取得しているいくつかのカテゴリがあります(括弧内の数字は深さを表します):
新規(1)
-一般(2) -
コンソール(2)
ゲーム(1)
-pc(2)
--エミュレーター(3)
-ps3(2)
次に、多次元配列を処理し、ナビゲーション メニューを生成する関数があります。
これは、データベースから次の配列を返す
モデルです。
Array (
[0] => Array ( [name] => News [depth] => 1 )
[1] => Array ( [name] => General [depth] => 2 )
[2] => Array ( [name] => Console [depth] => 2 )
[4] => Array ( [name] => Games [depth] => 1 )
[5] => Array ( [name] => PC [depth] => 2 )
[6] => Array ( [name] => emulator [depth] => 3 )
[8] => Array ( [name] => ps3 [depth] => 2 )
)
-- コントローラー
public function index()
{
$navTree = $this->getNavTree(); //gets array from model
$createNavTree = $this->_renderTree($navTree); //pass array to function
$this->load->view('testnavigation.php', $createNavTree);
}
function _renderTree($tree){
$current_depth = 0;
$counter = 0;
$result = '';
foreach($tree as $node){
$node_depth = $node['depth'];
$node_name = $node['name'];
$node_id = $node['categoryid'];
if($node_depth == $current_depth){
if($counter > 0) $result .= '</li>';
}
elseif($node_depth > $current_depth){
$result .= $counter == 0 ? '<ul id="nav">' : '<ul>';
$current_depth = $current_depth + ($node_depth - $current_depth);
}
elseif($node_depth < $current_depth){
$result .= str_repeat('</li></ul>',$current_depth - $node_depth).'</li>';
$current_depth = $current_depth - ($current_depth - $node_depth);
}
$result .= '<li><a href="#">'.$node_name.'</a>';
++$counter;
}
$result .= str_repeat('</li></ul>',$node_depth).'</li>';
$result .= '</ul>';
return $result;
}
- 見る
echo $createNavTree;
リストはインデントされた正しい順序で作成されますが、私が抱えている問題は、各アイテムのリンクを生成することです。たとえば、エミュレーターのリンクは mysite.com/games/pc/emulator にする必要があります
どうすればこれを達成できますか?