首页数据 完善根据分类查询数据 orderType:排序条件,可选值:recommend(推荐)、latest()
(pageIndex, pageSize int, orderType BookOrder, lang string, cid int, fields ...string)
| 395 | //完善根据分类查询数据 |
| 396 | //orderType:排序条件,可选值:recommend(推荐)、latest() |
| 397 | func (m *Book) HomeData(pageIndex, pageSize int, orderType BookOrder, lang string, cid int, fields ...string) (books []Book, totalCount int, err error) { |
| 398 | if cid > 0 { //针对cid>0 |
| 399 | return m.homeData(pageIndex, pageSize, orderType, lang, cid, fields...) |
| 400 | } |
| 401 | o := orm.NewOrm() |
| 402 | order := "pin desc" //排序 |
| 403 | condStr := "" //查询条件 |
| 404 | cond := []string{"privately_owned=0", "order_index>=0"} |
| 405 | if len(fields) == 0 { |
| 406 | fields = append(fields, "book_id", "book_name", "identify", "cover", "order_index", "pin") |
| 407 | } else { |
| 408 | fields = append(fields, "pin") |
| 409 | } |
| 410 | switch orderType { |
| 411 | case OrderRecommend: //推荐 |
| 412 | cond = append(cond, "order_index>0") |
| 413 | order = "pin desc,order_index desc" |
| 414 | case OrderLatestRecommend: //最新推荐 |
| 415 | cond = append(cond, "order_index>0") |
| 416 | order = "release_time desc" |
| 417 | case OrderPopular: //受欢迎 |
| 418 | order = "pin desc,star desc,vcnt desc" |
| 419 | case OrderLatest, OrderNew: //最新发布 |
| 420 | order = "pin desc,release_time desc" |
| 421 | case OrderScore: //评分 |
| 422 | order = "pin desc,score desc" |
| 423 | case OrderComment: //评论 |
| 424 | order = "pin desc,cnt_comment desc" |
| 425 | case OrderStar: //收藏 |
| 426 | order = "pin desc,star desc" |
| 427 | case OrderView: //收藏 |
| 428 | order = "pin desc,vcnt desc" |
| 429 | } |
| 430 | if len(cond) > 0 { |
| 431 | condStr = " where " + strings.Join(cond, " and ") |
| 432 | } |
| 433 | |
| 434 | lang = strings.ToLower(lang) |
| 435 | switch lang { |
| 436 | case "zh", "en", "other": |
| 437 | default: |
| 438 | lang = "" |
| 439 | } |
| 440 | if strings.TrimSpace(lang) != "" { |
| 441 | condStr = condStr + " and `lang` = '" + lang + "'" |
| 442 | } |
| 443 | sqlFmt := "select %v from md_books " + condStr |
| 444 | fieldStr := strings.Join(fields, ",") |
| 445 | sql := fmt.Sprintf(sqlFmt, fieldStr) + " order by " + order + fmt.Sprintf(" limit %v offset %v", pageSize, (pageIndex-1)*pageSize) |
| 446 | sqlCount := fmt.Sprintf(sqlFmt, "count(book_id) cnt") |
| 447 | var params []orm.Params |
| 448 | if _, err := o.Raw(sqlCount).Values(¶ms); err == nil { |
| 449 | if len(params) > 0 { |
| 450 | totalCount, _ = strconv.Atoi(params[0]["cnt"].(string)) |
| 451 | } |
| 452 | } |
| 453 | if totalCount > 0 { |
| 454 | _, err = o.Raw(sql).QueryRows(&books) |