0

私のアプリケーションでは、サイドバー メニュー リストにデータベース テーブルの行を入力しようとしています。より具体的には、コーチがログインしているユーザーと同じ user_id を持つチーム名を取得しようとしています。ログインしているコーチのチームをメニューに一覧表示したいと考えています。

私のモデルでは、アクティブ レコードを使用して目的のクエリ結果を取得しています。

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 テストを実行し、クエリ部分が良好であることを確認しました。テンプレート化されたサイドバー ビューにも配列データが一覧表示されるようにするにはどうすればよいですか?

4

1 に答える 1

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>

于 2014-01-03T15:44:31.060 に答える