我只使用控制器和视图。
使用下面的代码,我显示职位和职位有答复。
我使用了下面的控制器和视图来显示帖子和回复。
通过使用查询1,我从帖子表中选择帖子的主题ID(例如,主题ID = 34),并使用此查询获得帖子ID 30和31。
通过使用查询2,我从回复表中为每个帖子ID选择回复。
比如具有回复ID1的帖子ID30
具有回复ID2的帖子ID31。
通过使用第二个for循环,我正在选择是否有任何回复使用来自回复表的parent_id列的另一个回复。(使用递归调用showreply()函数)
我陷入了如何在视图中传递递归函数showreply()的结果的问题。
通过使用我的代码显示:
30后
- --第一次回复30后
31号员额 - --回复31号帖子
但我想表现得像。
30后 - --第一次回复30后
- --对第一次答复的答复
31号员额 - --第一次回复帖子31
- --对第一次答复的答复
我已经使用递归函数调用来获取reply,以使用父ID进行reply,但我不知道如何将其传递给view。
- 控制器:**
<?php
public function viewpost()
{
//Query 1
$topicid = trim($this->input->get('topicid'));
$q =$this->db->select(array(
'fp.id as id',
'fp.postdata',
'fp.topicid'))
->from('forum_post AS fp')
->where('fp.topicid',$topicid)
->order_by('fp.id DESC')->limit(0,10)->get();
$resultq1 = $q->result_array();
$data['resultq1'] = $resultq1;
//$data['resultq1'] = $res;
$resultq2 = array();
foreach ($resultq1 as $rec)
{
//Query 2
$postid = $rec['id'];
$q1 =$this->db->select(array(
'fr.id as id',
'fr.reply_data'))
->from('forum_reply AS fr')
->where('fr.postid',$postid)
->order_by('fr.id ')->get();
$resultq2[$postid] = $q1->result_array();
$data["resultq2"][$postid] = $resultq2[$postid];
foreach($q1->result_array() as $row1)
{
//second for loop
$reply_id = $row1['id'];
$resultq3[$reply_id] = $this->showreply($reply_id); // call to function
$data["resultq3"] = $resultq3[$reply_id];
}//inner for loop
} //outer for loop
$this->load->view('viewpost',$data);
}
public function showreply($reply_id)
{
$reply_id1 = $reply_id;
$q1 =$this->db->select(array(
'fr.id as id',
'fr.reply_data',
'fr.parent_id'))
->from('forum_reply AS fr')
->where('fr.parent_id',$reply_id1)
->order_by('fr.id ')->get();
//print $this->db->last_query();
$resultq4[$reply_id1] = $q1->result_array();
$data["resultq4"]= $resultq4[$reply_id1];
$i=0;
foreach($q1->result_array() as $row4)
{
print_r($q1->result_array());
echo "id".$id = $row4['id'];
$parent_id = $row4['parent_id'];
if($parent_id!=0)
{
//$data['nested'][$i] = $q1->result_array();
$this->showreply($id); //recursive call to function
$i++;
}
}
return $resultq4;
}
?>
- 表格回复表格的结构:**
Rep_id rep_text post_id Parent_ID
-------------------------------------------------------------------------
1 Reply for post 30 30 null
2 Reply for post 31 31 null
3 reply to Rep_id 1 null 1
4 Rep_id 3 have Rep_id 4 null 3
5 Reply for post 31 null 2
6 Reply for Rep_id 5 null 5
----------------------------------------------------------------------------
- 员额表:**
post_id topic id post_title post_desc
-----------------------------------------
30 34 xyz sssss
31 34 pqr tyyyu
----------------------------------------
视图:
<div>
<?php foreach($resultq1 as $row)
{ ?>
<ul>
<li></li> // used to display post
</ul>
<?php foreach($resultq2 as $rows)
{
foreach($rows as $row1)
{
if($row['id']==$row1['postid'])
{ ?>
<ul>
<li></li> // used to display reyly for post
</ul>
<?php foreach($resultq3 as $rows)
{
foreach($rows as $row2)
{
if($row1['id']==$row2['parent_id'])
{ ?>
<ul>
<li></li> // used to display reply for reply
</ul>
<?php
}//if
} //inner for $row2
} // outr for $resultq3
} //if
} //inner for of $row1
}//outer for $resultq2
} ?>
</div>
2条答案
按热度按时间rpppsulh1#
这是我的回答:
考虑使用MVC方法,将数据库查询分离到应用程序的模型部分。
您应该始终检查查询是否有结果。这样可以防止在查询没有结果而您试图访问它们时代码发生致命错误。注意:
我假设你会显示你的第一级答复在相同的第二级答复(而不是嵌套):
员额
员额
到目前为止,这是我的答案,我希望这对你也有帮助。
iqxoj9l92#
我很抱歉,但这是一个非常糟糕的代码:(。我建议重写整个事情。
范例
桌柱:
这就是我的建议,
所有员额应在一个表中
列类型(枚举字段[post,comment])
parent_id列,用于指定其在树中的位置。
和一个post_id表,将它们粘合在一起。
现在你要做的就是
现在$post将包含您所有的帖子及其评论和子评论等。
在单个数据库查询中,您现在所要做就是将它们组织到一个assoc数组中
现在你有了所有的评论和评论inisde $comment var,非常容易循环和主帖子里面$main_post:)一个简单的视图将是
我希望这个简单的代码能帮助你解决你的问题,这是一个简单而有效的方法,我相信你可以使用一些调试try_catch来代替错误时返回false,你也可以添加一些验证,但这不是我们现在的情况。