2017-06-08 12 views
1

メインカテゴリ内にサブカテゴリを表示したい。私のテーブルはthisのように見えます。しかし、私はprint_r($ cat_id)それはカテゴリの最後のIDだけを返します。これをどうすれば解決できますか?ここに私のコントローラは、次のとおりです。Codeigniterフレームワークのカテゴリ内のサブカテゴリ

$data['categories'] = $this->courses_model->get_all_categories_for_courses(); 

      foreach($data['categories'] as $ct){ 

         $cat_id = $ct['id'];   
       } 



      $data['subcategories'] = $this->courses_model->get_all_subcategories_for_courses($cat_id); 

      $this->load->view('templates/header'); 
      $this->load->view('courses/courses-grid-fullwidth', $data); 
      $this->load->view('templates/footer'); 
     } 

、ここでは私のモデルである:

public function get_all_categories_for_courses() { 
     $query = $this->db->get_where('categories', array('parent_id' => NULL)); 
     return $query->result_array(); 
    } 

    function get_all_subcategories_for_courses($cat_id) { 
     $query = $this->db->get_where('categories', array('parent_id' => $cat_id)); 
     return $query->result_array(); 
    } 

、ここでは、私の見解ページです:事前に

<?php foreach($categories as $cat): ?> 
      <div class="col-md-3 col-sm-6 incat"> 

      <h4> 
       <a href="#" class="catname"><i class="fa <?= $cat['icon']; ?>" aria-hidden="true"></i> 
       <?= $cat['name_rus']; ?></a>    
      </h4> 

      <ul> 
       <?php foreach($subcategories as $subcat): ?> 
       <li><a href="#"><?= $subcat['name_rus']; ?></a></li> 
       <?php endforeach; ?> 
      </ul> 
      </div> 
     <?php endforeach; ?> 

ありがとう!

+0

原因 '$のcat_id'を行うことができますが、常に、次の値に置き換えられます。 – Ukasyah

答えて

0

それとも、ループ内でこの

<?php foreach($categories as $cat): ?> 
      <div class="col-md-3 col-sm-6 incat"> 

      <h4> 
       <a href="<?= site_url('/courses/category/'.$cat['category_slug']); ?>" class="catname"><i class="fa <?= $cat['icon']; ?>" aria-hidden="true"></i> 
       <?= $cat['name_rus']; ?></a>    
      </h4> 

      <ul> 
      <?php 
      $query = $this->db->get_where('categories', array('parent_id' => $cat['id'])); 
      ?> 

       <?php foreach($query->result() as $subcat): ?> 
       <li><a href="<?= site_url('/courses/category/'.$subcat->category_slug); ?>"><?= $subcat->name_rus; ?></a></li> 
       <?php endforeach; ?> 
      </ul> 
      </div> 
     <?php endforeach; ?> 
+0

それは物事を置くためのベストプラクティスは、一般的ですがビューの代わりにコントローラとモデルにデータベースのようなクエリを提供します。それはよりクリーンであるだけでなく、キャッシングにも優れています。 –

+0

@AndrewGouldでも私も試しましたが、正しく動作しませんでした。どうすれば修正できますか? –

1

Ukasyahさんの質問によると、$cat_idの値を上書きすると、カテゴリをループするたびに表示されます。

あなたが行う必要があるのは、配列にIDを設定し、$this->db->where_in()を使用して単一の値ではなく配列に一致させることです。

あなたのコントローラは次のようにもっと検討する必要があります。幸運を祈る

function get_all_subcategories_for_courses($cat_ids) { 
    $query = $this->db->where_in('parent_id', $cat_ids)->get('categories'); 
    return $query->result_array(); 
} 

:あなたはこのように見えるためにあなたのモデル関数を変更する必要がありますが

$data['categories'] = $this->courses_model->get_all_categories_for_courses(); 

$cat_ids = []; 
foreach($data['categories'] as $ct){ 

    $cat_ids[] = $ct['id']; 
} 

$data['subcategories'] = $this->courses_model->get_all_subcategories_for_courses($cat_ids); 

$this->load->view('templates/header'); 
$this->load->view('courses/courses-grid-fullwidth', $data); 
$this->load->view('templates/footer'); 

。それが唯一の最後の値を格納するよう

+0

が動作しませんでした。エラーが発生します。 –

+0

あなたは遭遇したエラーは何ですか? メッセージに注意してください: –

+0

A PHPエラーが は重大度遭遇した非オブジェクトのプロパティを取得しようとすると ファイル名:モデル/ courses_model.php 行番号:34 バックトレース: –

関連する問題