выпадающее меню codeigniter из представления - метод запуска из представления

1

Привет, я новичок в системе codeigniter, и мне нужна помощь. У меня есть форма (в организации таблицы), которая должна быть заполнена всеми видами данных. Одно поле (первая строка, второй столбец) должно быть заполнено сбрасываемым меню (с данными из таблицы из базы данных) (выберите опцию меню), и мне это удается,

Изображение 174551

Но это то, что я сделал для этого:

когда пользователь нажимает ссылку (T - Insert Labwork)

Изображение 174551

на самом деле он вызывает метод контроллера (my_courses()) и этот метод:

1 - принимает имя пользователя из сеанса

2 - загружает модель.

3 - затем он передает имя пользователя загруженной модели

4 - если модель возвращает false, мы вернем сообщение пользователю

5 - иначе, если модель возвращает true, мы вернем результаты

Метод CONTROLLERS выглядит следующим образом:

function my_courses(){

$username = $this->session->userdata('username'); //1 username from session 

$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table

$result =$this->model_professor->professors_classes($username); //3 so we send username to that model 

if($result == false){ 
    echo "Professor has no courses ";
}else{ //4 model will return results collected from table 
    $query = $this->model_professor->professors_classes($username);
    $data['main_content'] = 'professor/t_professor_insert_labwork_2';
    $data['another_content'] = 'professor/professor_view_links';
    $data['records'] = $query;
    $this->load->view('includes/template',$data);
    }       
}

Метод MODEL выглядит следующим образом:

function professors_classes($username){

    $this->db->where("username", $username); 

    $query = $this->db->get("table_teach_a_course");  

    if($query->result()){
        return $query->result();
    }else{
        return false;
    }           
}

И, наконец, мой VIEW (более короткая версия, без всех строк из изображения) t_professor_insert_labwork_2 выглядит так:

 <?php
    echo form_open("controller_professor/insert_labwork");
?>
<table>
    <tr>
        <td>Course name:</td>
        <td>
            <?php if(isset($records)) { ?>
                        <select>
                            <?php foreach ($records as $row){ ?>
                                <option value=""> <?php echo $row->course_code; ?> </option>
                            <?php } ?>
                        </select>
                     <?php
                    }else { 
                        echo"<h6>No records were returned!</h6>";
                    } ?> 
        </td>
    </tr>


    <tr> <td colspan="2"> <hr/> </td></tr>

    <tr>
        <td><input type="reset" value="Clear form"></td>
        <td></td>
        <td><input type="submit" value="Save"></td>
    </tr>
</table>
<?php
    echo form_close();
?>
    <?php
        echo validation_errors('<p style="color:red"></p>');
    ?>

Но когда я нажимаю ссылку, например (домашняя страница) Изображение 174551

он также загружает эту точку зрения и некоторые другие, а также когда он загружает мое представление t_professor_insert_labwork_2, проблемы возникают.

Это то, что вызывает связь с главной страницей HOME PAGE:

$this->load->view('professor/t_professor_insert_labwork_2');

Но это просто загружает вид, который пуст, и не имеет заполненного выпадающего меню, и я понимаю, почему, потому что нечего запускать мой метод для заполнения этого меню. Но это то, что вызывает проблемы для меня, я просто не знаю, как вызвать из моего представления какой-то метод, который вернет данные в это поле.

И мой вопрос в том, как я могу назвать свое мнение, которое автоматически вызовет некоторый метод, который вернет данные, чтобы заполнить это раскрывающееся поле?

Спасибо всем, кто хочет мне помочь !!!!

  • 0
    Действительно ли БД возвращает результаты по вашему запросу? в противном случае я предлагаю вам добавить метод резервирования в вашу модель, т.е. if ($ query-> num_rows ()!> 0) {// получить другие результаты}. или, альтернативно, заполните ваш вид некоторыми опциями по умолчанию, чтобы отображение массива было пустым.
  • 0
    Нет, я действительно заполняю свое выпадающее меню фактическими данными из базы данных, так что это не проблема, потому что мой метод работает в этом смысле отлично. Единственная проблема заключается в том, что в настоящее время мне нужно спровоцировать мой метод таким образом, что мне нужно нажать на ссылку, чтобы вернуть данные в мое представление. Но я хочу сделать это автоматически, а не так, как я уже описал. Просто не знаю, как автоматически звонить из вида
Показать ещё 4 комментария
Теги:
codeigniter
drop-down-menu
menu
populate

1 ответ

0

Вам необходимо изменить свой метод DEFAULT для контроллеров (тот, который вызывается, когда вы переходите на www.mysite.com/mycontroller), который обычно называется именем вашего контроллера или называется индексом. Я приведу пример, используя код, который вы предоставили в предположении что этот метод является вашим методом по умолчанию. Глядя на этот код, возможны два случая.

CASE 1 - У вас нет переменной сеанса пользователя при начальной загрузке.

function my_courses(){
  
$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table

//set a default for username
 $username = 'mydefaultusername';
//check if a username has been provided and update $username variable
if(isset($this->session->userdata('username')) && !empty($this->session->userdata('username'))){
  $username = $this->session->userdata('username'); //1 username from session 
}

$result =$this->model_professor->professors_classes($username); //3 so we send username to that model 
  
if($result == false){ 
    echo "Professor has no courses ";
}else{ //4 model will return results collected from table 
    $query = $this->model_professor->professors_classes($username);
    $data['main_content'] = 'professor/t_professor_insert_labwork_2';
    $data['another_content'] = 'professor/professor_view_links';
    $data['records'] = $query;
    $this->load->view('includes/template',$data);
    }       
}

CASE 2 - У вас есть переменная сеанса имени пользователя, но требуется набор результатов по умолчанию, если их нет.

function my_courses(){

$username = $this->session->userdata('username'); //1 username from session 

$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table

$result = $this->model_professor->professors_classes($username); //3 so we send username to that model 

//check if you need to set a default
if(count($result) !> 0){
  $result = //your method to get your default results.  
}
if($result == false){ 
    echo "Professor has no courses ";
}else{ //4 model will return results collected from table 
    $query = $this->model_professor->professors_classes($username);
    $data['main_content'] = 'professor/t_professor_insert_labwork_2';
    $data['another_content'] = 'professor/professor_view_links';
    $data['records'] = $query;
    $this->load->view('includes/template',$data);
    }       
}

Во втором случае вам нужно будет установить сеанс или другую переменную при начальной загрузке контроллера, чтобы убедиться, что вы не вернете результаты по умолчанию, когда вы должны вернуть "none found", т.е.

    //check if you need to set a default
    if(count($result) !> 0 && !isset($_SESSION['init']) or $_SESSION['init'] == FALSE){
      $_SESSION['init'] = 1;
      $result = //your method to get your default results.  
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню