2013-10-28 80 views
0

在我的应用程序中,我试图用数据库表中的行填充边栏菜单列表。更具体地说,我尝试在教练与登录用户具有相同user_id的情况下检索队名。我想列出菜单中列出的已登录教练队伍。CodeIgniter:将数据库数组数据传递给模板文件

在我的模型,我使用的活动记录,以获得所需的查询结果:

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测试并确认查询部分是好的。我应该怎样才能让阵列数据也列在模板侧栏视图中?

+0

尝试使用'$按行> teamname;' – Albzi

+0

顺便说一句,你不必遍历$查询 - > result_array(),直接返回给你相同的数组。 – xiankai

+0

不幸的是$ row-> teamname;没有做到这一点。你是对的,我刚刚添加了“_array”,看它是否工作并忘记删除它。 – sundfjord

回答

0

解决,为任何人浏览。

像下面那样在控制器的索引方法中传递数组对我来说是这样的。

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