【问题标题】:CodeIgniter: Passing database array data to a template fileCodeIgniter:将数据库数组数据传递给模板文件
【发布时间】:2013-10-28 15:18:24
【问题描述】:

在我的应用程序中,我试图用数据库表中的行填充侧边栏菜单列表。更具体地说,我尝试检索与登录用户具有相同 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 视图,然后完美列出所需的结果。我还执行了affected_rows 测试并确认查询部分是好的。我应该怎么做才能让数组数据也列在模板化侧边栏视图中?

    【问题讨论】:

    • 尝试使用$row-&gt;teamname;
    • 顺便说一句,您不必遍历 $query->result_array(),直接返回相同的数组。
    • 不幸的是 $row->teamname;没有成功。你说得对,先开,我只是加了“_array”看看有没有用,忘记去掉了。

    标签: php arrays codeigniter activerecord templating


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2011-06-09
      • 2018-08-29
      相关资源
      最近更新 更多