ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php搭建个人博客

2021-03-01 11:30:24  阅读:191  来源: 互联网

标签:category comment parent function 博客 php data id 搭建


这几天不知道该干些什么,就想着完善一下博客。

基本的发表文章功能已经实现了,就估摸着加个评论回复 可以和其他人交流 比较有意思

然后开始百度 php实现评论回复功能 看了下,不想看。。。 就直接打开之前收藏的 实验楼的 php实现留言本看下怎么实现留言回复,评论回复跟留言回复差差不多的样子

先把源码下载了,看数据库设计  

*** 这几天在想实现这个功能的时候 发现 要实现一个功能 就要设计好一个数据表 在设计数据表的过程中 程序的逻辑 和 细节会慢慢在脑海中清晰 这是一个很棒的过程 ***

 

 

 

 

昨天断网了。。。,学校12点断网  蛋疼,今天补上。。。

 

看了下,发现没什么卵用 主要字段 id, nickname, content, createtime 感觉有用, reply,replytime,并没有什么用,别人回复很多条的时候reply怎么存?status 后台管理审核评论时需要,但是我想先把最简单的功能实现了再说,

 

然后开始找 别人的博客,看看怎么写,。。。 翻着目录程序结构都不清不楚, 还是算了,缓一会儿,

去群里问一下,  大神就一句话, 无限分类    ,然而我一脸懵逼,好高大上的词汇啊

继续问大神,大神给我解释了,一个类可以有无限多个子类的子类, 嗯, 一头雾水是吧,我直接百度 搜到了这么一篇文章 php无限分类

http://www.cnblogs.com/php-js/p/php-classify.html

要实现 评论的回复, 关键就在于 无限级分类,一个类有多个子类,它的子类也有多个子类,这样无限循环下去,就是无限级分类 一级、二级、三级、。。。。。。

 

正好,我可以先实现文章分类,趁机学习无限极分类,文章分类花了一个晚上的时间,主要是看其它博客是怎么实现的 我学习了 Startblog ,

开始在开源社区找到这个博客的时候 大喜 都是用ci做的功能简单轻型博客,嘿嘿嘿,省去了好多功夫,我甚至可以对照着Startblog把后面的功能全部完善了,不过这样也不太好,主要目的还是学习,锻炼自己,不能一味的照搬前人。 这样没有任何益处

好了,代码下好,收悉的结构,进入到目录 /application/models/ 下 打开 Category_model.php 嗯,不错,是我想要的类型

(好像有点无耻啊hhhhhh)

继续,把controller 类都打开  一点点看懂, 这里贴出我的版本 

 

在尝试无限级分类的过程中,暂时学不会, 就直接写一级分类了

我的category表:

好low 啊 QAQ ,受不了了,先掐死我自己

感觉没啥东西,就是一个 select * from category,把所有分类都查询出来

还有一个 function 是 根据 category 查询出属于这个分类的blog,就是这么简单

 

Category_model.php

class Category_Model extends CI_Model {public function __construct() {parent::__construct();$this->load->database();}public function getAllCategory() {$sql = "select * from category";$data_tmp = $this->db->query($sql)->result_array();foreach ($data_tmp as $value) {$category_id = $value['id'];$data["$category_id"]['id'] = $value['id'];$data["$category_id"]['category'] = $value['category'];}return $data;}public function getAllBlogs($category_id) {$sql = "select * from blogs where category={$category_id}";$data = $this->db->query($sql)->result_array();return $data;}}

 

 

然后控制类,根据category_model查询到的内容输出 就行了


Categoy.php

 

class Category extends CI_Controller {public function show($id) {$this->load->helper('url');$this->load->model('category_model');$data['data'] = $this->category_model->getAllBlogs($id);$data['cur_category'] = $this->category_model->getCategory($id);$data['all_category'] = $this->category_model->getAllCategory();$this->load->view('templates/header', $data);$this->load->view('pages/category_show', $data);$this->load->view('templates/footer');}}

效果图:

好像没什么效果啊

这么简单的东西,还弄了一天 

 

其实,整个摸索得过程,慢慢理解,花了很长时间,之后再是运用 

分类做完了,发现,无限级分类 没用上。。。QAQ

没事,现在可以开始写评论回复了,先构思个一两天  

嗯,设计数据表,

我参照了 php无限级分类实现评论回复功能 我记得是之前在csdn上看到过,不过都一样的,没关系了,下载好源码,开始探索。。。

我去,原生php,牛逼啊大兄弟,直接不想翻了,它的数据表示这样的:

 

id nickname content create_time,一般就这样, 关键的是 parent_id 靠这个id 查找评论的子级评论,也就是回复

根据我自己的摸索,我设计了一张comments 表

贴上 :

blog_id 用于 标记所属文章,我结合 model来说明

和 category 差不多 传入 blog_id 查询出 对 id 为blog_id 的文章的所有 comment 这是getComment function, 

getTreeComment function是通过递归实现 无限级分类评论回复

$parent 参数传入 comment 的cid 作为 上级id  ,  如果有comment 的 parent 等于上一级的 cid 也就是它是 上一级comment 的回复,就把它存进 $tree

初始 $parent = 0.

Comments_model.php

 

class Comments_Model extends CI_Model {public function __construct() {parent::__construct();$this->load->database();}public function addComment($data) {$this->db->insert('comments', $data);return $this->db->insert_id();}public function getComment($blog_id) {$sql = "select * from comments where blog_id={$blog_id} order by created ASC";$query = $this->db->query($sql)->result_array();return $query;}private function getTreeComments($comments, $parent,) {global $tree;foreach ($comments as $comment) {if ($comment['parent'] == $parent) {$tree[] = $comment;$this->getTreeComments($comments, $comment['cid'],);}}return $tree;}}


但是由于 输出 视图的效果不是我想要的,所以我改了下, 不在controller里实现 tree 而是在输出视图的时候通过 递归 

 

 

等下去上体育课,晚上回来再补上。。。

 

上代码,

comment.php

 

<?phpif (count($comments) > 0) {function ListComments($comments, $parent) {foreach ($comments as $row) {if ($row['parent'] == $parent) {?><div class="col-md-11 col-md-offset-1">            <div class="row">                <div class="col-md-10">                    <p><strong><?php echo $row['nickname'];?></strong> said at <?php echo date('d-m-Y h:i A',strtotime($row['created']));?><br>                    <?php echo $row['content']; ?></p>                </div>                <div class="col-md-2">                    <a class="comment-reply-link" href="#comment-reply" οnclick="commentReply(<?php echo $row['cid'];?>, this)">reply</a>                </div>            </div>            <hr>            <?php                            ListComments($comments, $row['cid']);                            echo '</div>';                        }                    }                }                ListComments($comments, 0);            }?>

好像很乱,。。。。

 

糟糕的代码 

效果图:

 


 

实现阶梯式评论回复视图效果 的关键在于 无限级分类 递归的出口点

选对了出口点 才能实现

还有一个评论框 效果, 直接上图:

点击reply后:

 

然后cancel reply继续恢复到原来的位置, 这个实现 需要js 

comment_reply.js

 

function commentReply(parent, c) {var response = document.getElementById('comment-post');document.getElementById('comment-parent').value = parent;document.getElementById('cancel-reply').style = '';c.parentNode.parentNode.appendChild(response);}function cancelReply() {var commentPlace = document.getElementById('comment-place'),response = document.getElementById('comment-post');document.getElementById('comment-parent').value = 0;document.getElementById('cancel-reply').style = 'display:none';commentPlace.appendChild(response);}

嗯,到此,评论回复 基本完成。

 

标签:category,comment,parent,function,博客,php,data,id,搭建
来源: https://blog.csdn.net/wuyouxiaoli/article/details/114258892

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有