Load(); require_once 'response.php'; header('Content-Type: application/json; charset=utf-8'); header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; } $type = strtolower(trim($_GET['type'] ?? 'recipe')); $sort = strtolower(trim($_GET['sort'] ?? 'view')); $limit = min((int) ($_GET['limit'] ?? 20), 100); $limit = max(1, $limit); $cateId = isset($_GET['cate_id']) ? (int) $_GET['cate_id'] : 0; $result = array(); switch ($type) { case 'recipe': $result = get_recipe_hot($sort, $limit, $cateId); break; case 'ingredient': $result = get_ingredient_hot($sort, $limit); break; case 'all': $result = array( 'code' => 200, 'message' => 'success', 'data' => array( 'recipe_view' => get_recipe_list('view', $limit, $cateId), 'recipe_like' => get_recipe_list('like', $limit, $cateId), 'ingredient_view' => get_ingredient_list('view', $limit) ) ); break; default: $result = array( 'code' => 400, 'message' => '无效的type参数,可选: recipe/ingredient/all', 'data' => null ); } $result['_query_time'] = round((microtime(true) - $startTime) * 1000, 2) . 'ms'; $format = ApiResponse::getFormat(); ApiResponse::output($result, $format); exit; /** * 获取热门菜谱 */ function get_recipe_hot($sort, $limit, $cateId) { global $zbp; $tablePost = $zbp->db->dbpre . 'post'; $tablePostStat = $zbp->db->dbpre . 'post_stat'; $tableCategory = $zbp->db->dbpre . 'category'; $whereClauses = array("p.log_Type = 0", "p.log_Status = 0"); if ($cateId > 0) { $whereClauses[] = "p.log_CateID = $cateId"; } $whereSql = implode(' AND ', $whereClauses); switch ($sort) { case 'like': $orderBy = 'COALESCE(s.like_nums, 0) DESC'; break; case 'rate': $orderBy = 'COALESCE(s.rate_score, 0) DESC'; break; default: $orderBy = 'p.log_ViewNums DESC'; } $sql = "SELECT p.log_ID as id, p.log_Title as title, p.log_Intro as intro, p.log_CateID as category_id, c.cate_Name as category_name, p.log_ViewNums as view_count, COALESCE(s.like_nums, 0) as like_count, COALESCE(s.rate_nums, 0) as rate_count, COALESCE(s.rate_score, 0) as rate_score FROM $tablePost p LEFT JOIN $tablePostStat s ON p.log_ID = s.log_id LEFT JOIN $tableCategory c ON p.log_CateID = c.cate_ID WHERE $whereSql ORDER BY $orderBy LIMIT $limit"; $rows = $zbp->db->Query($sql); $list = array(); foreach ($rows as $row) { $list[] = array( 'id' => (int) $row['id'], 'title' => $row['title'], 'intro' => mb_substr(strip_tags($row['intro']), 0, 100), 'category_id' => (int) $row['category_id'], 'category_name' => $row['category_name'], 'view_count' => (int) $row['view_count'], 'like_count' => (int) $row['like_count'], 'rate_count' => (int) $row['rate_count'], 'rate_score' => (float) $row['rate_score'], 'rating' => ApiResponse::getRatingSummary( (float) $row['rate_score'], (int) $row['rate_count'] ), 'url' => "?act=detail&id=" . $row['id'] ); } return array( 'code' => 200, 'message' => 'success', 'data' => array( 'type' => 'recipe', 'sort' => $sort, 'category_id' => $cateId, 'list' => $list, 'total' => count($list) ) ); } /** * 获取热门食材 */ function get_ingredient_hot($sort, $limit) { global $zbp; $tableIngredient = $zbp->db->dbpre . 'ingredient_detail'; $tableIngredientStat = $zbp->db->dbpre . 'ingredient_stat'; $tableCategory = $zbp->db->dbpre . 'category'; switch ($sort) { case 'like': $orderBy = 'COALESCE(s.like_nums, 0) DESC'; break; case 'rate': $orderBy = 'COALESCE(s.rate_score, 0) DESC'; break; default: $orderBy = 'i.view_count DESC'; } $sql = "SELECT i.ingredient_id as id, i.name, i.cate_ID as category_id, c.cate_Name as category_name, i.view_count, COALESCE(s.like_nums, 0) as like_count, COALESCE(s.rate_nums, 0) as rate_count, COALESCE(s.rate_score, 0) as rate_score FROM $tableIngredient i LEFT JOIN $tableIngredientStat s ON i.ingredient_id = s.ingredient_id LEFT JOIN $tableCategory c ON i.cate_ID = c.cate_ID ORDER BY $orderBy LIMIT $limit"; $rows = $zbp->db->Query($sql); $list = array(); foreach ($rows as $row) { $list[] = array( 'id' => (int) $row['id'], 'name' => $row['name'], 'category_id' => (int) $row['category_id'], 'category_name' => $row['category_name'], 'view_count' => (int) $row['view_count'], 'like_count' => (int) $row['like_count'], 'rate_count' => (int) $row['rate_count'], 'rate_score' => (float) $row['rate_score'], 'rating' => ApiResponse::getRatingSummary( (float) $row['rate_score'], (int) $row['rate_count'] ), 'url' => "?act=ingredient_detail&id=" . $row['id'] ); } return array( 'code' => 200, 'message' => 'success', 'data' => array( 'type' => 'ingredient', 'sort' => $sort, 'list' => $list, 'total' => count($list) ) ); } /** * 获取菜谱列表(用于all类型) */ function get_recipe_list($sort, $limit, $cateId) { $result = get_recipe_hot($sort, $limit, $cateId); return $result['data']['list']; } /** * 获取食材列表(用于all类型) */ function get_ingredient_list($sort, $limit) { $result = get_ingredient_hot($sort, $limit); return $result['data']['list']; }