2012-01-09 2 views
2

그래서 기본적으로 데이터베이스에서 카테고리 목록을 검색하여 $ data [ 'categories'] 변수에 저장합니다.CodeIgniter는 뷰 내의 컨트롤러에서 특정 데이터를 검색합니다.

보기에서 나는 단순히 foreach() 문을 사용하여이를 나열합니다. 여태까지는 그런대로 잘됐다. 하지만 일부 카테고리에는 하위 카테고리가 있습니다 (전부는 아님). 이제, 카테고리에 하위 카테고리가 있는지 여부를 표시하는 'is_direct'(하위 카테고리가 있거나 없음)라는 데이터베이스 행을 추가했습니다.

이제 해당 하위 범주가있는 경우 해당 하위 범주를 나열하고 싶습니다.

여기서 헤더 (카테고리 및 하위 카테고리가 나열 될 곳)를 표시하는 방법 (개인 정보는 신경 쓰지 않아도됩니다.)

private function show_header($template='default',$page_name='default') 
{ 
    // Get the categories. 
    $data['categories']  = $this->CI->ws_category->get_categories(); 

    // Display the header. 
    $this->CI->load->view("templates/".$template."/template/header",$data); 
} 

이 메소드는 아래 get_categories() 메소드를 호출합니다 (간단한 활성 레코드).

public function get_categories() 
{ 
    // Prepare the SQL query. 
    $this->db->select('*'); 
    $this->db->from(APP_PREFIX.'categories'); 
    $this->db->order_by('name_clean'); 

    // Execute the query. 
    $query = $this->db->get(); 

    // Get the results from the query. 
    $result = $query->result_array(); 

    // Return the array with data. 
    return $result; 
} 

보기 아래에서 하위 메뉴의 위치를 ​​볼 수 있습니다.

<?php 

    // Loop through all the categories. 
    foreach ($categories as $item): 

?> 
<li class='nav_link <?php ($item['is_direct'] == '1' ? 'nav_subcats' : ''); ?>'> 
    <a href='<?php echo base_url().'category/'.$item['category_id'].'-'.$item['name_clean'].'.html';?>' class='nav_main_link'><?php echo $item['name']; ?></a> 
    <?php 

     // In case subcategories are present. 
     if ($item['is_direct'] != '1') 
     { 
    ?> 
    <div class='nav_submenu'> 
     <ul> 
      <li><a href='#' class='nav_sub_link'>submenu item</a></li> 
     </ul> 
    </div> 
    <?php 
     } 
    ?> 
</li> 
<?php 
    // End the loop. 
    endforeach; 

?> 

누군가 나를 도울 수 있습니까? 감사합니다.

답변

3

내가 취하는 접근법은 모델 (또는 컨트롤러)에서보다 완벽한 데이터를 작성하여 (현재 수행중인 것처럼)보기에서 루프 할 수 있도록하는 것입니다. 아래는 가능한 해결책을 작성한 것입니다. get_categories() 메서드를 수정하여 하위 범주도 쿼리합니다. 그런 다음보기에서 카테고리에 하위 카테고리가 있는지 확인하고 필요한 경우 하위 카테고리를 출력합니다. 그런 다음보기에서

public function get_categories_and_subcategories() 
{ 
    // Prepare the SQL query. 
    $this->db->select('*'); 
    $this->db->from(APP_PREFIX.'categories'); 
    $this->db->order_by('name_clean'); 

    // Execute the query. 
    $query = $this->db->get(); 

    // Get the results from the query. 
    $result = $query->result_array(); 

    // Get subcategories 
    for ($i = 0; $i < count($result); $i++) { 

     // Check if subcategory 
     if ($result[$i]['is_direct']) { 

      // Query for subcategories - made up for demonstrational purposes 
      $query = $this->db->query("SELECT * FROM subcategories WHERE parent_id='".$result[$i]['id']."'"); 

      // Add subcategories to category item 
      $result[$i]['subcategories'] = $query->result_array(); 

     } else { 

      $result[$i]['subcategories'] = array(); 

     } 

    } 

    // Return the array with data. 
    return $result; 
} 

:

<li class='nav_link <?php ($item['is_direct'] == '1' ? 'nav_subcats' : ''); ?>'> 
    <a href='<?php echo base_url().'category/'.$item['category_id'].' '.$item['name_clean'].'.html';?>' class='nav_main_link'><?php echo $item['name']; ?></a> 

    <?php if (count($item['subcategories']) > 0): ?> 
    <div class='nav_submenu'> 
     <ul> 
      <foreach ($item['subcategories'] as $subcategory): ?> 
      <li><a href='<?php echo $subcategory['url']; ?>' class='nav_sub_link'><?php echo $subcategory['name']; ?></a></li> 
      <?php endforeach; ?> 
     </ul> 
    </div> 
    <?php endif; ?> 
</li> 

가이 코드를 테스트하지 않았습니다 명심하지만 당신은 응용 프로그램에 일반 아이디어를 채택 할 수 있어야한다.

+0

나는 그런 식으로 가고 있었지만 하위 카테고리에 문제가 발생했습니다. 이것은 사소한 비틀기와 완벽하게 작동합니다. 도움 주셔서 대단히 감사합니다. – Roel

+0

비슷한 논리를 찾고있었습니다. 조건에 사소한 변화와 함께 나는 그것을 얻었다. 고맙습니다. @Roel and birderic –

관련 문제