CodeIgniter:将数据库数组数据传递给模板文件

时间:2013-10-28 15:18:25

标签: php arrays codeigniter activerecord templating

在我的应用程序中,我尝试使用数据库表中的行填充侧边栏菜单列表。更具体地说,我尝试检索团队名称,其中教练具有与登录用户相同的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;
    }   
}

在Controller中,我不知道如何将数组数据传递给我的视图。在我的索引函数中,我这样做:

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()提供的无效参数”错误,AFAIK意味着数组中没有返回任何数据。

但是,如果我在控制器功能中执行此操作:

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

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

并使用上面侧边栏视图中完全相同的代码创建get_team_v视图,然后完美列出所需的结果。我还执行了affected_rows测试并确认查询部分是好的。我该怎么做才能在模板化的侧边栏视图中列出数组数据?

1 个答案:

答案 0 :(得分:1)

解决了,对于任何浏览者。

在控制器的索引方法中传递数组如下所示。

$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>