情诗网 >情感文章 > 正文

耳朵(八)文章详情的评论及收藏

来源:情诗网    2020-11-24    分类:情感文章

tags: 耳朵_android


最终效果图:


之前已经登录成功, 并将cookie保存至本地, 今天的内容有点多, 需要完成文章的评论、收藏以及分享功能。

如果你的后台已经能给你提供满足上述功能的所有接口, 那自行跳过这一段. 目前 http://ear.life 采用的是WordPress搭建的网站, 评论的接口是有的, 但收藏并没有提供, 我们可以配合着WP Favorite Posts来使用.

先进后台去添加并配置WP Favorite Posts,


简单配置后可以在web端看到收藏的按钮了:

可是它并没有为我们提供供APP调用的API, 那我们就自己写一个:
先查一下数据库, 看看WP Favorite Posts保存数据的位置在哪:

后面的meta_value里的176、172、178这些其实就是我们文章的post_id了,
OK, 知道了它的位置, 我们自己写一个接口放出来:

下面代码为PHP:

public function get_favorite(){ 
        global $json_api;

        //首先对cookie进行验证
        if (!$json_api->query->cookie) {

            $json_api->error("You must include a 'cookie' var in your request. Use the `generate_auth_cookie` Auth API method.");

        }
        
        $user_id = wp_validate_auth_cookie($json_api->query->cookie, 'logged_in');

        if (!$user_id) {
            $json_api->error("Invalid authentication cookie. Use the `generate_auth_cookie` method.");
        }
        
        //接着查找收藏的所有postid
        $post_ids = array();
        if($result = mysql_query(" SELECT `meta_value` FROM `wp_usermeta` WHERE `meta_key` = 'wpfp_favorites' AND `user_id` = " .$user_id)){
 
            while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
                $str = substr($row[0], 4);
                $str = explode(";",$str);
                foreach ($str as $key => $value) {
                    if(strstr($value, "s:3:")){
                        $temp = strtr($value, array("s:3:" => "", '"' => ""));
                        $post_ids[count($post_ids)] = $temp;
                    }
                }
            }
            $str_ids = "";
            foreach ($post_ids as $id) {
                $str_ids = $str_ids.",".$id;
            }
            $str_ids = substr($str_ids, 1);

            //最后查询所有postid的信息并返回
            if($result = mysql_query("SELECT `ID`, `post_date`, `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_password` = '' AND `ID` IN (".$str_ids.") ")){
                $results = array();
                while ($row = mysql_fetch_assoc($result)) {
                    $results[] = $row;
                }

                return array(
                    'status' => 'ok',
                    'msg' => "",
                    'list' => $results
                );
            }

            // 关闭连接
            mysql_free_result($result);

        }else{
            echo mysql_error();
        }
    }

OK, 如果没出意外的话可以看到接口列表处已经多了一个get_favorite,



现在我们请求了看一看, 为了节省资源我这里只返回了id、data和title, 并且没有对分页加载做处理, 后面可以根据需求再来修改.



正常的查询出来了... 呃, 我怎么感觉不像在做APP反而像写接口了... 后面还要加上收藏和取消收藏的接口, 这里直接上图, 步骤略过, 不然观众都没兴趣了.

花了点时间, 为WordPress增加了get_favorite、get_favorite_ids和post_favorite三个接口, 现在我们来尽情的使用它吧.

回到ArticleDetailActivity, 首先是评论, 评论需要判断是否登录, 否则的话跳至登录界面:

    tv_comment.onClick {
        if (!App.checkCookie(this)) {
            return@onClick
        }
        showComment("", "请输入评论内容")
    }

其次是刚刚添加的收藏功能:

    iv_collect.onClick {
        if (!App.checkCookie(this)) {
            return@onClick
        }

        val params = App.createParams
        params.put("json", "user/post_favorite")
        params.put("post_id", article!!.id!!)
        params.put("doAction", true)
        showLoading()

        HMRequest.go<FavoriteModel>(params = params, activity = this) {
            cancelLoading()
            iv_collect.setImageResource(if (it!!.after) R.drawable.icon_collected else R.drawable.icon_collect)
        }
    }

OK, 最后在onResume事件中记得查一查收藏的状态, 避免跳转登录后没有及时刷新:

override fun onResume() {
    super.onResume()
    webView?.onResume()

    //先查查当前是否已经收藏过
    if (App.cookie != null && article != null) {
        val params = App.createParams
        params.put("json", "user/post_favorite")
        params.put("post_id", article!!.id!!)

        HMRequest.go<FavoriteModel>(params = params) {
            iv_collect.setImageResource(if (it!!.before) R.drawable.icon_collected else R.drawable.icon_collect)
        }
    }
}

好了, 跑起来看一看,效果已经实现了.


github: https://github.com/bxcx/ear
本节分支: https://github.com/bxcx/ear/tree/comment

热门文章