CodeIgniter: передача данных массива базы данных в файл шаблона

В моем приложении я пытаюсь заполнить список меню боковой панели строками из таблицы базы данных. В частности, я пытаюсь получить имя команды, где у тренера тот же user_id, что и у пользователя, который вошел в систему. Я хочу перечислить команды тренера, вошедшие в систему, в меню.

В моей модели я использую Active Record для получения желаемых результатов запроса:

public function get_team()
{
    $this->db->select('teamname')->from('teams')->where('coaches', $this->session->userdata('user_id'));
    $this->db->order_by('teamname', 'asc');
    $query = $this->db->get();

    if($query->num_rows() > 0)
    {
        foreach($query->result_array() as $row)
        {
            $data[] = $row;
        }
        return $data;
    }   
}

В контроллере я не уверен, как это сделать, чтобы передать данные массива в мое представление. В моей индексной функции я делаю это:

public function index()
{
    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else 
        {
            $data['title'] = 'Team';
            $data['main_content'] = 'team_v';
            $data['username'] = $this->tank_auth->get_username();
            $data['coach'] = $this->tank_auth->is_admin();
            $this->load->vars($data);
            $this->load->view('includes/template');
        }
}

И в соответствующей функции контроллера я пытаюсь отправить данные непосредственно в представление боковой панели (которое включено в ранее загруженный файл шаблона):

public function get_team()
{
    $data = array(
    'result' => $this->team_m->get_team());

    $this->load->view('includes/sidebar', $data);
}

Код представления выполняет стандартный foreach и выглядит следующим образом:

    <li>Teams</li>
        <ul>
            <?php /* if (empty($result)): */ ?>
            <li>Create a team</li>
            <?php /* else: */ ?>
            <?php foreach ($result as $row): ?>
            <li><?php echo $row['teamname'];?></li>  
            <?php endforeach; ?>
            <?php /* endif; */ ?>
        </ul>
    
    <li>Messages</li>
    <li>My profile</li>
    <li><a href="<?php echo base_url('index.php/auth/logout'); ?>">Logout</a></li>
    

Отправка массива $data на боковую панель таким образом не работает. Я также пытался вручную загрузить все представления в шаблоне и передать данные представлениям, но безрезультатно. Независимо от того, как я его передаю, он дает мне ошибку «Недопустимый аргумент, указанный для foreach ()», что, на мой взгляд, означает, что данные не возвращаются в массиве.

Однако, если я сделаю это в функции контроллера:

public function get_team()
{
    $data = array(
    'result' => $this->team_m->get_team());

    $this->load->view('get_team_v', $data);
}

и создайте представление get_team_v с точно таким же кодом, что и в представлении боковой панели выше, тогда желаемый результат будет указан идеально. Я также выполнил тест затронутых_рядов и подтвердил, что часть запроса хороша. Что мне нужно сделать, чтобы данные массива также отображались в шаблонном представлении боковой панели?


person sundfjord    schedule 28.10.2013    source источник
comment
Попробуйте использовать $row->teamname;   -  person Albzi    schedule 28.10.2013
comment
Кстати, вам не нужно зацикливаться на $query-›result_array(), возвращая это напрямую, вы получаете тот же массив.   -  person xiankai    schedule 29.10.2013
comment
К сожалению, $row-›teamname; не сделал трюк. Вы правы, xiankai, я просто добавил _array, чтобы посмотреть, работает ли он, и забыл его удалить.   -  person sundfjord    schedule 30.10.2013


Ответы (1)


Решено, для тех, кто просматривает.

Передача массивов в методе index контроллера, как показано ниже, сделала это для меня.

$data['result'] = $this->team_m->get_team_by_coach();

$this->load->vars($data);

И в боковом представлении так:

<ul id="menu" class="nav nav-pills nav-stacked">
<li><a href="<?php echo base_url(); ?>"><span class="glyphicon glyphicon-list"></span>My Teams</a></li>
    <ul id="submenu" class="nav">
        <?php foreach ($result as $row): ?>
        <?php echo '<li><a href="http://localhost/master/index.php/team/' . $row['id'] . '">' . $row['teamname'] . '</a></li>';?> 
        <?php endforeach; 
            if(count($result) <= 2) 
            {
                echo '<li><a data-toggle="modal" id="create_team" data-backdrop="true" href="#create_team_modal" href="base_url(index.php/team/create_team)"><span class="glyphicon glyphicon-plus"></span>Create a team</a></li>';
            }
         ?>
    </ul>
<li><a href="<?php echo base_url(); ?>index.php/message"><span class="glyphicon glyphicon-envelope"></span>Messages</a></li>
<li><a href="<?php echo base_url(); ?>index.php/profile"><span class="glyphicon glyphicon-user"></span></i>My Profile</a></li>
<li><a href="<?php echo base_url(); ?>index.php/auth/logout"><span class="glyphicon glyphicon-log-out"></span>Logout</a></li>

person sundfjord    schedule 03.01.2014