在我的应用程序中,我尝试使用数据库表中的行填充侧边栏菜单列表。更具体地说,我尝试检索团队名称,其中教练具有与登录用户相同的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测试并确认查询部分是好的。我该怎么做才能在模板化的侧边栏视图中列出数组数据?
答案 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>