【发布时间】:2012-12-07 10:08:52
【问题描述】:
我正在尝试使用 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 语句......
有什么建议吗?
谢谢
【问题讨论】:
-
在 forum_model 的第 16 行显示您的代码。
-
该行是:$thread_query=$this->get_threads($forum_item->forumid, 50, 0);
-
我认为问题是另一个函数的调用,可能是不正确的。不管怎么说,多谢拉。这个问题现在已经解决了。
-
在几乎每个论坛中,我能想到的唯一一个您需要访问论坛视图的主题就是最后发布的帖子,您为什么要尝试返回所有论坛及其所有线程在一起?对我来说似乎违反直觉。标准论坛的布局是这样的。主页、主论坛(有时列出其子论坛)和最新发布的主题。论坛页面,列出子论坛及其最新发布的主题。子论坛页面、列表线程和上次发帖时间/用户
-
嘿,谢谢,我同意你的看法。我最终只会显示最新的线程,甚至可能不会显示。但是,仍然需要“双重查询”。一个多级数组,包含论坛和最新线程。所以在我看来,功能还是一样的,你不觉得吗?
标签: codeigniter