0

Codeigniter でフォーラムを構築しようとしています。

これまでのところ、ダイナミック ニュース チュートリアルの作成に基づいて、フォーラム自体が表示され、スレッドが表示されています。

しかし、それは2つの異なるページです。明らかに、次のように1つのページに表示する必要があります:

Forum 1
- thread 1
- thread 2
- thread 3 
Forum 2
- thread 1
- thread 2 
etc.

そして、次のステップは明らかに、スレッド内のすべての投稿を表示することです。ほとんどの場合、いくつかのページネーションが行われています。しかし、それは後で。

今のところ、フォーラムコントローラー(スリムバージョン)があります:

<?php
class Forum extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('forum_model');
        $this->lang->load('forum');
        $this->lang->load('dutch');
    }

    public function index()
    {
        $data['forums'] = $this->forum_model->get_forums();

        $data['title'] = $this->lang->line('title');
        $data['view'] = $this->lang->line('view');

        $this->load->view('templates/header', $data);
        $this->load->view('forum/index', $data);
        $this->load->view('templates/footer');
    }

    public function view($slug)
    {
        $data['forum_item'] = $this->forum_model->get_forums($slug);

        if (empty($data['forum_item']))
        {
            show_404();
        }

        $data['title'] = $data['forum_item']['title'];

        $this->load->view('templates/header', $data);
        $this->load->view('forum/view', $data);
        $this->load->view('templates/footer');
    }

}
?>

そして、forum_model (こちらもスリム化)

<?php
class Forum_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_forums($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query= $this->db->get('forum');
            return $query->result_array();
        }

        $query = $this->db->get_where('forum', array('slug' => $slug));
        return $query->row_array();
    }

        public function get_threads($forumid, $limit, $offset)
    {
            $query = $this->db->get_where('thread', array('forumid', $forumid), $limit, $offset);
            return $query->result_array();
    }


}
?>

そしてビューファイル

<?php foreach ($forums as $forum_item): ?>

    <h2><?=$forum_item['title']?></h2>
    <div id="main">
        <?=$forum_item['description']?>
    </div>
    <p><a href="forum/<?php echo $forum_item['slug'] ?>"><?=$view?></a></p>

<?php endforeach ?>

最後の1つは、次のようなものにしたいと思います。

<?php foreach ($forums as $forum_item): ?>

    <h2><?=$forum_item['title']?></h2>
    <div id="main">
        <?=$forum_item['description']?>
    </div>
    <?php foreach ($threads as $thread_item): ?>

    <h2><?php echo $thread_item['title'] ?></h2>
    <p><a href="thread/<?php echo $thread_item['slug'] ?>"><?=$view?></a></p>

    <?php endforeach ?>

<?php endforeach ?>

しかし問題は、モデルをダブル クエリのようにビューに返して、フォーラムと各フォーラム内のスレッドの両方を含めるにはどうすればよいかということです。

get_forum 関数で foreach ループを作成しようとしましたが、これを行うと:

public function get_forums($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query= $this->db->get('forum');
            foreach ($query->row_array() as $forum_item)
            {
                $thread_query=$this->get_threads($forum_item->forumid, 50, 0);
            }
            return $query->result_array();
        }

        $query = $this->db->get_where('forum', array('slug' => $slug));
        return $query->row_array();
    }

エラーが発生します

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: models/forum_model.php

Line Number: 16

誰かが良いヒントを持っていることを願っています、ありがとう!

レニー

*編集* **

フィードバックをお寄せいただきありがとうございます。

私は戸惑いましたが、これは今ではうまくいくようです:)

    $query= $this->db->get('forum');
        foreach ($query->result() as $forum_item)
        {
            $forum[$forum_item->forumid]['title']=$forum_item->title;
            $thread_query=$this->db->get_where('thread', array('forumid' => $forum_item->forumid), 20, 0);
            foreach ($thread_query->result() as $thread_item)
            {
                $forum[$forum_item->forumid]['thread'][]=$thread_item->title;
            }
        }
        return $forum;
    }

次は、この多次元配列を foreach ステートメントでビューに表示する方法です....

助言がありますか ?

ありがとう

4

1 に答える 1

0

したがって、エラーを使用しているrow_array()ので、get_forums()を次のように変更します。

 $thread_query=$this->get_threads($forum_item['forumid'], 50, 0);

result_array()しかし、すべてのフォーラムのリストが必要なので、実際に使用する必要があると思います。

于 2012-12-07T10:17:06.030 に答える