通过EasySwoole + Crontab已经成功的将每个栏目的前1000条数据写入到文件中.当栏目id为0的时候默认是查所有的数据.如

if (!empty($condition['cat_id'])) {
    $this->db->where('cat_id', $condition['cat_id']);
}

  当然也可以设置成,如果是0就默认没有数据.就在首页展示不同栏目的数据也行.因为静态化API是我们首页的第二套方案.修改获取数据的接口.在App\HttpController\Api\Index.php中的list重命名为listOne.
创建第二套获取首页数据的方法

/*
 * 第二套获取首页方案
 * 通过读取生成好的json文件
 * */
public function listTwo()
{
    // 获取请求参数cat_id.有的话进行整形转化.没有默认0
    $catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
    $videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
    $videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
    $data = !empty($videoData) ? json_decode($videoData, true) : [];
    return $this->writeJson(Status::CODE_OK, 'ok', $data);
}

  这里注意一下.在之前讲解过.怕有些人不按顺序看可能会看不太懂$this->params['cat_id']在哪设置的.重申.因为我的AppHttpControllerApiIndex.php继承了同目录下的Base.php.而在Base.php对数据进行了处理,如下

/*获取参数值*/
public function getParmas()
{
    $params = $this->request()->getRequestParam();
    $params['page'] = !empty($params['page']) ? intval($params['page']) : \Yaconf::get('video_page.default_page');
    $params['size'] = !empty($params['size']) ? intval($params['size']) : \Yaconf::get('video_page.default_size');
    $this->params = $params;
}

所以我们就可以直接用了.之前也说过因为我们查出来的都是1000条数据.所以我们需要做分页,直接用php的方式.在App\HttpController\Api\Base.php创建获取分页参数方法

/*获取分页*/
public function getPagingDatas($count, $data)
{
    $totalPage = ceil($count / $this->params['size']);
    $data = $data ?: [];
    return [
        'total_page' => $totalPage,
        'page_size' => $this->params['size'],
        'count' => $count,
        'lists' => $data
    ];
}

因为分页用到的是截取数组函数array_slice()我们还需要知道从哪里开始截取.就相当于分页的当前页数据的算法一样.修改Base.php.增加获取from参数

/*获取参数值*/
public function getParmas()
{
    $params = $this->request()->getRequestParam();
    print_r($params);
    $params['page'] = !empty($params['page']) ? intval($params['page']) : intval(\Yaconf::get('video_page.default_page'));
    $params['size'] = !empty($params['size']) ? intval($params['size']) : intval(\Yaconf::get('video_page.default_size'));
    $params['from'] = ($params['page'] - 1) * $params['size'];
    $this->params = $params;
}

第二套方案方法

/*
 * 第二套获取首页方案
 * 通过读取生成好的json文件
 * */
public function listTwo()
{
    // 获取请求参数cat_id.有的话进行整形转化.没有默认0
    $catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
    $videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
    $videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
    $videoData = !empty($videoData) ? json_decode($videoData, true) : [];
    $count = count($videoData);
    $videoData = array_slice($videoData,$this->params['from'],$this->params['size']);
    $data = $this->getPagingDatas($count,$videoData);
    return $this->writeJson(Status::CODE_OK, 'ok', $data);
}

当然也可以把数组切割放到Base.php

/*获取分页*/
public function getPagingDatas($count, $data)
{
    $totalPage = ceil($count / $this->params['size']);
    $data = $data ?: [];
    $data = array_slice($data,$this->params['from'],$this->params['size']);
    return [
        'total_page' => $totalPage,
        'page_size' => $this->params['size'],
        'count' => $count,
        'lists' => $data
    ];
}

控制器

/*
* 第二套获取首页方案
* 通过读取生成好的json文件
* */
public function listTwo()
{
    // 获取请求参数cat_id.有的话进行整形转化.没有默认0
    $catId = !empty($this->params['cat_id']) ? intval($this->params['cat_id']) : 0;
    $videoFile = EASYSWOOLE_ROOT . '/website/video/json/video_' . $catId . '.json';
    $videoData = is_file($videoFile) ? file_get_contents($videoFile) : [];
    $videoData = !empty($videoData) ? json_decode($videoData, true) : [];
    $count = count($videoData);
    $data = $this->getPagingDatas($count,$videoData);
    return $this->writeJson(Status::CODE_OK, 'ok', $data);
    }
}

测试成功第二套方案通过EasySwoole + Crontab测试成功
26.jpg

Last modification:February 18th, 2020 at 10:30 pm