123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package fetdata
- import (
- "math"
- "strconv"
- "strings"
- "golang-fave/engine/sqlw"
- "golang-fave/utils"
- )
- func (this *FERData) postsGetCount(buf string, cat int) (int, int) {
- if cat == 0 {
- var num int
- if err := this.wrap.DB.QueryRow(`
- SELECT
- COUNT(*)
- FROM
- blog_posts
- WHERE
- active = 1
- ;
- `).Scan(&num); err == nil {
- pear_page := 2
- max_pages := int(math.Ceil(float64(num) / float64(pear_page)))
- curr_page := 1
- p := this.wrap.R.URL.Query().Get("p")
- if p != "" {
- pi, err := strconv.Atoi(p)
- if err != nil {
- curr_page = 1
- } else {
- if pi < 1 {
- curr_page = 1
- } else if pi > max_pages {
- curr_page = max_pages
- } else {
- curr_page = pi
- }
- }
- }
- limit_offset := curr_page*pear_page - pear_page
- return limit_offset, pear_page
- }
- } else {
- var num int
- if err := this.wrap.DB.QueryRow(`
- SELECT
- COUNT(blog_posts.id)
- FROM
- blog_posts
- LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
- WHERE
- blog_posts.active = 1 AND
- blog_cat_post_rel.category_id = ?
- ;
- `, cat).Scan(&num); err == nil {
- pear_page := 2
- max_pages := int(math.Ceil(float64(num) / float64(pear_page)))
- curr_page := 1
- p := this.wrap.R.URL.Query().Get("p")
- if p != "" {
- pi, err := strconv.Atoi(p)
- if err != nil {
- curr_page = 1
- } else {
- if pi < 1 {
- curr_page = 1
- } else if pi > max_pages {
- curr_page = max_pages
- } else {
- curr_page = pi
- }
- }
- }
- limit_offset := curr_page*pear_page - pear_page
- return limit_offset, pear_page
- }
- }
- return 0, 0
- }
- func (this *FERData) postsToBuffer(buf string, cat int, order string) {
- if this.bufferPosts == nil {
- this.bufferPosts = map[string][]*BlogPost{}
- }
- if _, ok := this.bufferPosts[buf]; !ok {
- var posts []*BlogPost
- limit_offset, pear_page := this.postsGetCount(buf, cat)
- var rows *sqlw.Rows
- var err error
- if cat == 0 {
- rows, err = this.wrap.DB.Query(`
- SELECT
- blog_posts.id,
- blog_posts.user,
- blog_posts.name,
- blog_posts.alias,
- blog_posts.content,
- UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
- blog_posts.active
- FROM
- blog_posts
- WHERE
- blog_posts.active = 1
- ORDER BY
- blog_posts.id `+order+`
- LIMIT ?, ?;
- `, limit_offset, pear_page)
- } else {
- rows, err = this.wrap.DB.Query(`
- SELECT
- blog_posts.id,
- blog_posts.user,
- blog_posts.name,
- blog_posts.alias,
- blog_posts.content,
- UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
- blog_posts.active
- FROM
- blog_posts
- LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
- WHERE
- blog_posts.active = 1 AND
- blog_cat_post_rel.category_id = ?
- ORDER BY
- blog_posts.id `+order+`
- LIMIT ?, ?;
- `, cat, limit_offset, pear_page)
- }
- if err == nil {
- var f_id int
- var f_user int
- var f_name string
- var f_alias string
- var f_content string
- var f_datetime int
- var f_active int
- for rows.Next() {
- err = rows.Scan(&f_id, &f_user, &f_name, &f_alias, &f_content, &f_datetime, &f_active)
- if err == nil {
- posts = append(posts, &BlogPost{
- id: f_id,
- user: f_user,
- name: f_name,
- alias: f_alias,
- content: f_content,
- datetime: f_datetime,
- active: f_active,
- })
- }
- }
- rows.Close()
- }
- this.bufferPosts[buf] = posts
- }
- }
- func (this *FERData) BlogPosts() []*BlogPost {
- return this.BlogPostsOrder("DESC")
- }
- func (this *FERData) BlogPostsOrder(order string) []*BlogPost {
- posts_order := "DESC"
- if strings.ToLower(order) == "asc" {
- posts_order = "ASC"
- }
- buf := "posts_" + posts_order
- this.postsToBuffer(buf, 0, posts_order)
- return this.bufferPosts[buf]
- }
- func (this *FERData) BlogPostsOfCat(cat int) []*BlogPost {
- return this.BlogPostsOfCatOrder(cat, "DESC")
- }
- func (this *FERData) BlogPostsOfCatOrder(cat int, order string) []*BlogPost {
- posts_order := "DESC"
- if strings.ToLower(order) == "asc" {
- posts_order = "ASC"
- }
- buf := "posts_" + posts_order + "_" + utils.IntToStr(cat)
- this.postsToBuffer(buf, cat, posts_order)
- return this.bufferPosts[buf]
- }
|