2016-10-20 2 views
1

сначала я попытаюсь объяснить свою проблему. Я очень новичок в codeigniter, и я пытаюсь сделать выпадающее меню в codeigniter, получая результаты из базы данных. Я уже делал некоторые впечатления, но не работал так, как должен.Выпадающее меню Codeigniter с базой данных

первой моя модель:

public function get_continents() { 
    $this->db->select('*'); 
    $this->db->from('continents'); 
    $this->db->order_by("continent_name", "asc"); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 
     return $query->result(); 
    } 
    else { 
     return FALSE; 
    } 
} 

public function get_contries() { 
    $this->db->select('*'); 
    $this->db->from('countries'); 
    $this->db->join('continents', 'country_continent_id = continent_id', 'left'); 
    $this->db->where('continent_id', $id); 
    $this->db->order_by('country_name', 'asc'); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 
     return $query->result(); 
    } 
    else { 
     return FALSE; 
    } 
} 

теперь контроллер:

public function index() { 
    $dados['title'] = 'Places to Visit'; 
    $dados['page'] = 'home'; 

    // lista dos continentes 
    $this->load->model('option_model'); 
    $dados['continent'] = $this->option_model->get_continents(); 

    // lista os paises 
    $dados['country'] = $this->option_model->get_contries(); 

    // chamar a vista -> view 
    $this->load->view('home', $dados); 
} 

и вид:

<nav> 
      <ul> 
       <li><a href="" id="home">Homepage</a></li> 
       <?php foreach ($continent as $row) {; ?> 
        <li> 
         <a href="" id="<?php echo $row->continent_id; ?>"><?php echo $row->continent_name; ?></a> 
         <ul> 
          <?php foreach($country as $row2) {; ?> 
           <li><a href="" id="<?php echo $row2->country_id; ?>"><?php echo $row2->country_name; ?></a></li> 
          <?php }; ?> 
         </ul> 
        </li> 
       <?php } ?> 
       <li><a href="" id="pt">Portugal</a></li> 
      </ul> 
     </nav> 

Что я хочу сделать это меню континентов и каждый континент имеет падение со странами, такими как:

> continent 1 
    - country 1 
    - country 2 
    - ... 
> continent 2 
    - country 1 
    - country 2 
    - ... 
> ... 

Как я могу это сделать? Спасибо заранее!

ответ

1

Вам необходимо обновить функцию get_continents() так что добавьте страну для каждого континента.

Как это сделать?

В get_continents()

public function get_continents() { 
    $this->db->select('*'); 
    $this->db->from('continents'); 
    $this->db->order_by("continent_name", "asc"); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 

     // Get Countries list for each continent 
     foreach ($query->result() as $row) { 

      $this->db->select('*'); 
      $this->db->from('countries'); 
      $this->db->where('country_continent_id', $row->continent_id); 
      $this->db->order_by('country_name', 'asc'); 
      $country = $this->db->get()->result(); 

      // append country to the continent object 
      $row->country = $country; 

     } 

     return $query->result(); 

    } 
    else { 
     return FALSE; 
    } 
} 

В Вид:

<nav> 
      <ul> 
       <li><a href="" id="home">Homepage</a></li> 
       <?php foreach ($continent as $row) {; ?> 
        <li> 
         <a href="" id="<?php echo $row->continent_id; ?>"><?php echo $row->continent_name; ?></a> 
         <ul> 
          <?php foreach($row->country as $row2) {; ?> 
           <li><a href="" id="<?php echo $row2->country_id; ?>"><?php echo $row2->country_name; ?></a></li> 
          <?php }; ?> 
         </ul> 
        </li> 
       <?php } ?> 
       <li><a href="" id="pt">Portugal</a></li> 
      </ul> 
     </nav> 

Что мы делаем следующее:

  1. В get_continents мы добавляем страны объекта к каждому из континент объект.
  2. в поле зрения, мы заменим $country в вложенном цикле Еогеасп с $row->country
+0

THANK YOU =) собирался для этого, но все же нуждается в некоторой помощи. tku, tku, tku ... – eskimopest

0

Ваша ошибка, скорее всего, из функции get_contries() у вас есть одна линия, которая имеет $this->db->where('continent_id', $id);

удалить эту линию, и вы должны быть в порядке.

+0

ТКС за ответ, но для того, чтобы знать страны континента не должен я иметь переменную для этого? это одна из моих проблем. если я удалю эту линию, у меня нет способа узнать, какая страна принадлежит континенту. – eskimopest

+0

На самом деле эта строка вообще не работает, потому что у вас нет имени переменной '$ id', поэтому она испортит ваш запрос, если вы хотите построить его с помощью json. –

+0

Я знаю, что он не работает. я должен передать значение этой переменной, но не знаю, как это сделать. моя первая догадка состоит в том, чтобы присоединиться к двум функциям, но, как я уже сказал, я новичок в кодегнигере. – eskimopest

Смежные вопросы