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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容