0

我正在尝试使用 Codeigniter 建立一个论坛。

到目前为止,我已经根据创建动态新闻教程显示了论坛本身和线程。

但那是 2 个不同的页面,我显然需要将它们显示在一个页面中,如下所示:

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

现在是最后一个,我想要这样的东西:

<?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 回答