Facebook喜欢墙贴系统

时间:2012-04-27 13:51:05

标签: php jquery codeigniter

我打算在我的网站上建立一个类似墙贴的系统。我正在研究codeigniter mysql和jQuery。

现在我的问题是:我在用户访问主页时加载所有帖子。我创建了另外2个表,这些表是评论,喜欢这些帖子的评论和评论。

如果我使用jQuery和json加载所有帖子,我将如何加载该特定帖子的所有喜欢和评论?

这是我的代码:

模型

function load_all_activities()
    {
    $this->db->select('*')->from('activity_board');
    $this->db->order_by("created_time", "desc");
    $this->db->limit(20);
    $this->db->join('profile', 'profile.user_id = activity_board.user_id');
    $query = $this->db->get();

    $data=array();
     foreach ($query->result() as $row){     
     $row->createdtime=$this->timeago($row->created_time);
    // $row->age=$this->birthday($row->birthday);
     $data[]=$row;
     }

    return $data;
    //return $query->result(); 
    }

控制器:

function load_activities(){

    $data=$this->users->load_all_activities();


    echo json_encode($data);

    }

查看:

//Jquery load activities posts
function load_activities(){

$.post("<?=base_url()?>home/load_activities", function(data){   

$(data).each(function(index, item) {
    $(item).each(function(index, value) {    
    $("#wallposts").append('<div id="postContainer"> <div id="postPic"><a href=""><img src="'+value.picture_thumb+'"/></a></div> <div id="postMsg"><a href="#"><b>'+value.first_name +'</b></a>&nbsp;' +  value.message+'<br/><br/><a href="#">Like</a> &middot; <a href="#">Comment</a> &middot; '+value.createdtime+'<div id="deleteMsg">X</div> </div></div>');
    });
 });




},"json");  

}

这是我的mysql表

CREATE TABLE `activity_board` (
 `activity_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
 `message` text NOT NULL,
 `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`activity_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;




CREATE TABLE `activity_comments` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
 `comment` text NOT NULL,
 `avtivity_id` int(11) NOT NULL,
 `user_id` int(11) NOT NULL,
 `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

3 个答案:

答案 0 :(得分:0)

您是否考虑过使用DisQus这样的第三方组件,它可以在您的网页上提供评论/活动,而不必实施比自定义HTML元素更多的内容以及包含javascript链接?

答案 1 :(得分:0)

如果您要使用js构建html,则应考虑使用backbone.jsbatman.js之类的内容,这些内容将允许您构建模板并以更加可控的方式工作。他们是客户端MVC js框架,将提供大量的力量..

我的两分钱..否则,我会在帖子ID

之前添加所有id

例如

POST_ID:20

<div class="postContainer" id="20">
  <table class="message" id="message_20></table>
  <table class="likes" id="likes_20></table>
  <table class="comments" id="comments_20></table>
</div>

答案 2 :(得分:0)

你需要做一些事情:

  • 使用基于activity_id
  • 从表中选择行的方法为表创建模型
  • 创建一个PHP脚本,它以viewdetails.php?activity_id=<some id>之类的方式调用,返回那些注释和喜欢的特定活动ID
  • 您的帖子容器div需要有一些方法来识别帖子ID。我通常通过使div的id类似于<div id="post_<post id>">并使用类来设置样式(id应该是唯一的,类在元素之间共享)来实现。
  • 您需要在div中找到类似于<div id="<post id>_post"> ... other stuff ... <a href="#" class="viewCommentLikeButton">View Likes and Comments</a>
  • 的链接
  • 您需要加入$(document).ready()函数$(".viewCommentLikeButton").click( function () { $.post('viewdetails.php?activity_id=' + $(this).parent().attr('id').substr(5), { }, someSuccessHandlerFunction ); });
  • 您的成功处理函数应该解析您的json并将其放在某个div中,其id与原始activity_id相关联(如果您的json放在响应中,那么类似于$("#" + response.activity_id + "_comments").html(response.comments),而response.activity_id的活动ID为它和response.comments有评论的html)

我不知道将html放入json是最佳做法,所以你也可以让你的php脚本只返回有关注释的信息,并使你的javascript解析成可读的东西。