zoukankan      html  css  js  c++  java
  • 怎么实现类似"今日头条"app

    一个app分为三个部分:前端、后端、数据库。前端负责构筑页面,后端负责向前端传递数据,数据库负责构建数据。
    第一步:构建数据库
    我直接使用phpstudy的可视化数据构建工具。
    这里写图片描述
    点击mysql管理器,选择Mysql-front,进入数据库操作界面。
    这里写图片描述
    至于数据库的具体构建方式可参见我写的php部分的博客。这里不再详细叙述。


    第二步:后端代码实现
    后端代码主要用来从数据库中取出数据。

    <?php 
       //设置页面显示的文字编码
       header("Content-Type:text/html;charset=utf-8");
       //设置默认显示新闻的条数
       $number = 20;
       //从GET参数判断是否需要对显示新闻条数进行修改
       if (count($_GET)>0) {
          $number = $_GET('number');
    
       }
       //连接数据库
       $con = mysql_connect("localhost","root","root");
       //设置数据库的编码方式,一定要与数据库的编码方式相同
       mysql_query("set names utf8");
       //json格式的字符串
       echo 'var json = [';
       if ($con) {
           //选择要使用的数据库
           mysql_select_db("news",$con);
           //数据库查询语句
           $query = "SELECT * FROM news_List,news_Neirong WHERE news_List.id = news_Neirong.id ORDER BY news_List.id";
           //通过参数设置查询数据的条目
           // $query = $query."LIMIT".(string)$number;
           $result = mysql_query($query);//执行查询操作
           $i = 0;
           //$row = mysql_fetch_array($result);
           while ($row = mysql_fetch_array($result)) {//mysql_fetch_array从结果集中取得一行作为关联数组或者数字数组。
               if ($i!=0) {
                 echo ",";
               } else {
                $i = 1;
               } 
               echo '{"';
               echo 'title":';
               echo '"';
               echo $row['title'];
               echo '",';
    
               echo '"';
               echo 'zuozhe":';
               echo '"';
               echo $row['zuozhe'];
               echo '",';
    
               echo '"';
               echo 'date":';
               echo '"';
               echo $row['date'];
               echo '",';
    
               echo '"';
               echo 'content":';
               echo '"';
               echo $row['content'];
               echo '"}';
           }
       } else {
        echo "服务器失败了";
       }
       echo ']';
       mysql_close();
    
    
     ?>

    最终输出php的echo输出结果(浏览器效果):

    var json = [{"title":"孙悟空1","zuozhe":"孙悟空1","date":"2000-05-01","content":"我是孙悟空"},{"title":"孙悟空2","zuozhe":"孙悟空2","date":"2000-05-02","content":"我是孙悟空"},{"title":"孙悟空3","zuozhe":"孙悟空3","date":"2000-05-03","content":"我是孙悟空"},{"title":"孙悟空4","zuozhe":"孙悟空4","date":"2000-05-04","content":"我是孙悟空"},{"title":"孙悟空5","zuozhe":"孙悟空5","date":"2000-05-05","content":"我是孙悟空"},{"title":"孙悟空6","zuozhe":"孙悟空6","date":"2000-05-06","content":"我是孙悟空"},{"title":"孙悟空7","zuozhe":"孙悟空7","date":"2000-05-07","content":"我是孙悟空"},

    这个数据结果会被前端获取、


    第三步:前端
    怎么样获取后端的数据?

    <script type="text/javascript" src="http://127.0.0.1/jinritoutiao.php"></script>

    这样我们直接获取了后端输出的数据。传递过来的数据相当于一个名称为json的js数组,可以通过中括号直接访问。
    前端代码构建
    第一步:构建目录页面

    这里应用到数据库title。动态向页面添加目录

    <div class="main-rec" id="list">
             <header> 
                 <h1 onclick="show_news()">phoneGap新闻</h1>
             </header>
             <div class="content">
                 <script type="text/javascript">
                 alert
                    for (var i = 0; i < json.length; i++) {
                        str="";
                        str = str + '<div class="';
                        str = str + 'list_rec"';
                        str = str + ' οnclick=';
                        str = str + '"show_new(';
                        str = str + i;
                        str = str + ');">';
                        str = str + '<div class="';
                        str = str + 'list_title">';
                        str = str + json[i].title;
                        str = str + '</div></div>';
                        document.write(str);
                    }
                 </script>
             </div>
        </div>

    效果如下图:
    这里写图片描述
    第二步:内容页面构建
    这里我们先写一个静态页面,建立一个大致的框架模式。

    <div class="main_rec" id="news" style="display: none;">
             <header>
                 <div id="back" onclick="show_list()">返回</div>
                 <h1>phoneGap新闻</h1>
             </header>
             <div class="content">
                 <h1 id="new_title">新闻题目</h1>
                 <h4 id="new_info">作者:猫爷&nbsp;&nbsp;发表日期:2014-4-7</h4>
                 <div id="line"></div>
                 <div id="neirong">正文内容</div>
             </div>
    
        </div>

    效果如下图:
    这里写图片描述
    写出这个页面后,我们动态替换该页面中的作者名、日期和内容。

    function show(i) {
              document.getElementById("new_title").innerHTML = json[i].title;
              document.getElementById("neirong").innerHTML = json[i].content;
              var info = "作者:"+json[i].zuozhe+ "&nbsp;&nbsp;发表日期:" + json[i].date;
              document.getElementById("new_info").innerHTML = info;
           }

    整体前端代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="msapplication-tap-highlight" content="no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
        <!-- This is a wide open CSP declaration. To lock this down for production, see below. -->
        <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *" />
        <script src="http://localhost/jinritoutiao/jinritutiao.php">
        </script> 
        <title>今日头条</title>
        <style type="text/css">
             * {
                margin: 0;
             }
             body {
                background: #0C9;
             }
             .main_rec {
                width: 100%;
                min-height: 100px;
                background-color: #0c9;
                overflow: auto;
             }
             header {
                width: 100%;
                height: 40px;
                background-color: #006;
                position: fixed;
                top: 0px;
             }
             header h1 {
                width: 100%;
                height: 40px;
                text-align: center;
                color: #FFF;
                font-size: 24px;
                line-height: 40px;
                font-weight: bold;
             }
             #back {
                width: 48px;
                height: 24px;
                background-color: #f00;
                position: fixed;
                top: 8px;
                left: 16px;
                z-index: 1000;
                font-size: 18px;
                color: #FFF;
                text-align: center;
                line-height: 24px;
             }
             .content {
                width: 100%;
                min-height: 60px;
                margin-top: 40px;
                position: relative;
                float: left;
                overflow: inherit;
             }
    
             .content h1 {
                width: 100%;
                height: 60px;
                text-align: center;
                color: #000;
                font-size: 36px;
                line-height: 60px;
                float: left;
             }
             .content h4 {
                width: 100%;
                height: 25px;
                color: #000;
                font-size: 12px;
                text-align: center;
                float: left;
             }
             #line {
                width: 94%;
                height: 1px;
                border: solid 1px #FFFFFF;
                float: left;
                margin-left: 3%;
             }
             #neirong {
                width: 92%;
                float: left;
                overflow: inherit;
                margin: 9px 3%;
                color: #000;
                font-size: 16px;
                line-height: 24px;
                text-indent: 20px;
             }
             .list_rec {
                width: 96%;
                height: 36px;
                margin:2px 2%;
                background-color: #063;
                float: left;
             }
             .list_title {
                width: 98%;
                height: 36px;
                float: left;
                margin-left: 2%;
                color: #000;
                text-align:left;
                line-height: 36px;
                font-size: 24px;
             }
    
    
        </style>
    
    </head>
    <body>
        <!-- 新闻内容 -->
        <div class="main_rec" id="news" style="display: none;">
             <header>
                 <div id="back" onclick="show_list()">返回</div>
                 <h1>phoneGap新闻</h1>
             </header>
             <div class="content">
                 <h1 id="new_title">新闻题目</h1>
                 <h4 id="new_info">作者:猫爷&nbsp;&nbsp;发表日期:2014-4-7</h4>
                 <div id="line"></div>
                 <div id="neirong">正文内容</div>
             </div>
    
        </div>
    
        <!-- 新闻列表 -->
        <div class="main-rec" id="list">
             <header> 
                 <h1 onclick="show_news()">phoneGap新闻</h1>
             </header>
             <div class="content">
                 <script type="text/javascript">
                 alert
                    for (var i = 0; i < json.length; i++) {
                        str="";
                        str = str + '<div class="';
                        str = str + 'list_rec"';
                        str = str + ' οnclick=';
                        str = str + '"show_new(';
                        str = str + i;
                        str = str + ');">';
                        str = str + '<div class="';
                        str = str + 'list_title">';
                        str = str + json[i].title;
                        str = str + '</div></div>';
                        document.write(str);
                    }
                 </script>
             </div>
        </div>
    
       <script type="text/javascript">
    
           //从新闻内容界面返回
           function show_list() {
              //获取两个界面中的元素
              var list = document.getElementById('list');
              var news = document.getElementById('news');
              //对于两界面中的元素进行显示和隐藏的设置
              news.style.display = "none";
              list.style.display = "block";
           }
           function show_news() {
              //获取两个界面中的元素
              var list = document.getElementById('list');
              var news = document.getElementById('news');
              //对于两界面中的元素进行显示和隐藏的设置
              news.style.display = "block";
              list.style.display = "none"; 
           }
           function show_new(i){
               show_news();
               show(i);
    
           }
           function show(i) {
              document.getElementById("new_title").innerHTML = json[i].title;
              document.getElementById("neirong").innerHTML = json[i].content;
              var info = "作者:"+json[i].zuozhe+ "&nbsp;&nbsp;发表日期:" + json[i].date;
              document.getElementById("new_info").innerHTML = info;
           }
    
    
       </script>
    
    
    
    
    </body>
    
    </html>

    全部后端代码:

    <?php 
       //设置页面显示的文字编码
       header("Content-Type:text/html;charset=utf-8");
       //设置默认显示新闻的条数
       $number = 20;
       //从GET参数判断是否需要对显示新闻条数进行修改
       if (count($_GET)>0) {
          $number = $_GET('number');
    
       }
       //连接数据库
       $con = mysql_connect("localhost","root","root");
       //设置数据库的编码方式,一定要与数据库的编码方式相同
       mysql_query("set names utf8");
       //json格式的字符串
       echo 'var json = [';
       if ($con) {
           //选择要使用的数据库
           mysql_select_db("news",$con);
           //数据库查询语句
           $query = "SELECT * FROM news_List,news_Neirong WHERE news_List.id = news_Neirong.id ORDER BY news_List.id";
           //通过参数设置查询数据的条目
           // $query = $query."LIMIT".(string)$number;
           $result = mysql_query($query);//执行查询操作
           $i = 0;
           //$row = mysql_fetch_array($result);
           while ($row = mysql_fetch_array($result)) {//mysql_fetch_array从结果集中取得一行作为关联数组或者数字数组。
               if ($i!=0) {
                 echo ",";
               } else {
                $i = 1;
               } 
               echo '{"';
               echo 'title":';
               echo '"';
               echo $row['title'];
               echo '",';
    
               echo '"';
               echo 'zuozhe":';
               echo '"';
               echo $row['zuozhe'];
               echo '",';
    
               echo '"';
               echo 'date":';
               echo '"';
               echo $row['date'];
               echo '",';
    
               echo '"';
               echo 'content":';
               echo '"';
               echo $row['content'];
               echo '"}';
           }
       } else {
        echo "服务器失败了";
       }
       echo ']';
       mysql_close();
    
    
     ?>

    难点问题:
    1、前端页面的构建
    2、后端传递数据
    后端输出的数据前端js无法解析,这个问题耗费了比较长的时间,最后发现问题出现在数据库,重新填了一下数据,然后就可以了。还是没有找出具体的原因。

  • 相关阅读:
    b_lc_数组的最大公因数排序(并查集+质因数分解优化)
    Coggle 30 Days of ML:结构化赛题:天池二手车交易价格预测(二)
    Coggle 30 Days of ML:结构化赛题:天池二手车交易价格预测(一)
    漫谈
    漫谈
    漫谈
    漫谈
    漫谈
    漫谈
    漫谈
  • 原文地址:https://www.cnblogs.com/jiandanshishu/p/12953276.html
Copyright © 2011-2022 走看看