MCPcopy Index your code
hub / github.com/TruthHun/BookStack / HomeData

Method HomeData

models/book.go:397–457  ·  view source on GitHub ↗

首页数据 完善根据分类查询数据 orderType:排序条件,可选值:recommend(推荐)、latest()

(pageIndex, pageSize int, orderType BookOrder, lang string, cid int, fields ...string)

Source from the content-addressed store, hash-verified

395//完善根据分类查询数据
396//orderType:排序条件,可选值:recommend(推荐)、latest()
397func (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(&params); 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)

Callers 4

BookListsMethod · 0.95
BookListsByCidsMethod · 0.95
IndexMethod · 0.80
ListMethod · 0.80

Calls 2

homeDataMethod · 0.95
appendFunction · 0.50

Tested by

no test coverage detected