1

Codeigniter で db から階層データを取得するにはどうすればよいですか。私はこれを読みました: http://www.sitepoint.com/hierarchical-data-database/ そして私はそれをうまくやっていますが、モデル、コントローラー、ビューでこのチュートリアルを最適化することはできません

 Default Category
   |----- Sub category
          | ----One more category
               |----- Somthing else  

私は試みますが、サブカテゴリを表示しません:

私のモデル:

   public function fetchChildren($parent, $level) {    
       $this->handler = $this->db->query("SELECT * FROM content_categories WHERE parent_id='".$parent."' ");
          foreach($this->handler->result() as  $row ) {
              $this->data[$row->id] = $row;
              //echo str_repeat('  ',$level).$row['title']."\n"; 
          }

          return $this->data;

}

コントローラー:

  $this->data['node'] = $this->categories_model->fetchChildren(' ',0);

ビュー:

<table class="module_table">
    <thead>
        <tr>
             <th><?php echo lang('categories_table_title'); ?></th>     
        </tr>
    </thead>

    <tbody>
        <?php foreach ($node as $row) : ?>
        <tr>
            <th> <?php echo str_repeat('|----', 0+1). $row->title ?> </th>
        </tr>
        <?php endforeach; ?>
    </tbody>

</table>

出力は次のとおりです。

----Default
----Default
----Test Category 1
----Seccond Test Category 1
----Another Test Category 1 

モデルでこれを行うとすべて正常に動作しますが、コントローラーで呼び出してビューでループしようとすると、上記の例のような結果になります:

これはモデルでのみ機能します:

   public function fetchChildren($parent, $level) {    
       $this->handler = $this->db->query("SELECT * FROM content_categories WHERE parent_id='".$parent."' ");
          foreach($this->handler->result() as  $row ) {
             echo str_repeat('|-----',$level).$row->title."\n"; 
            $this->fetchChildren($row->title, $level+1);
          }

          return $this->data;

}

そして、私が持っている出力のように:

Default
    |----Test Category 1
    |----Seccond Test Category 1
        |----Another Test Category 1 

誰にでも解決策や例があります。

4

1 に答える 1

0

各カテゴリのレベル値を保存してみてください。

あなたのモデルでは:

public function fetchChildren($parent, $level){
    $this->handler = $this->db->query("SELECT * FROM content_categories WHERE parent_id='".$parent."' ");
    foreach($this->handler->result() as  $row ) {
        $row->level = $level;
        $this->data[] = $row; 
        $this->fetchChildren($row->title, $level+1);
    }
    return $this->data;
}

コントローラーで:

$this->data['node'] = $this->categories_model->fetchChildren(' ',0);

あなたの見解では

<table class="module_table">
    <thead>
        <tr>
             <th><?php echo lang('categories_table_title'); ?></th>     
        </tr>
    </thead>
    <tbody>
        <?php foreach ($node as $row) : ?>
        <tr>
            <th><?php echo str_repeat('|----', $row->level). $row->title ?> </th>
        </tr>
        <?php endforeach; ?>
    </tbody>
</table>
于 2013-08-07T05:31:40.307 に答える