blog.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package fetdata
  2. import (
  3. "math"
  4. "strconv"
  5. "strings"
  6. "golang-fave/engine/sqlw"
  7. "golang-fave/utils"
  8. )
  9. func (this *FERData) postsGetCount(buf string, cat int) (int, int) {
  10. if cat == 0 {
  11. var num int
  12. if err := this.wrap.DB.QueryRow(`
  13. SELECT
  14. COUNT(*)
  15. FROM
  16. blog_posts
  17. WHERE
  18. active = 1
  19. ;
  20. `).Scan(&num); err == nil {
  21. pear_page := 2
  22. max_pages := int(math.Ceil(float64(num) / float64(pear_page)))
  23. curr_page := 1
  24. p := this.wrap.R.URL.Query().Get("p")
  25. if p != "" {
  26. pi, err := strconv.Atoi(p)
  27. if err != nil {
  28. curr_page = 1
  29. } else {
  30. if pi < 1 {
  31. curr_page = 1
  32. } else if pi > max_pages {
  33. curr_page = max_pages
  34. } else {
  35. curr_page = pi
  36. }
  37. }
  38. }
  39. limit_offset := curr_page*pear_page - pear_page
  40. return limit_offset, pear_page
  41. }
  42. } else {
  43. var num int
  44. if err := this.wrap.DB.QueryRow(`
  45. SELECT
  46. COUNT(blog_posts.id)
  47. FROM
  48. blog_posts
  49. LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
  50. WHERE
  51. blog_posts.active = 1 AND
  52. blog_cat_post_rel.category_id = ?
  53. ;
  54. `, cat).Scan(&num); err == nil {
  55. pear_page := 2
  56. max_pages := int(math.Ceil(float64(num) / float64(pear_page)))
  57. curr_page := 1
  58. p := this.wrap.R.URL.Query().Get("p")
  59. if p != "" {
  60. pi, err := strconv.Atoi(p)
  61. if err != nil {
  62. curr_page = 1
  63. } else {
  64. if pi < 1 {
  65. curr_page = 1
  66. } else if pi > max_pages {
  67. curr_page = max_pages
  68. } else {
  69. curr_page = pi
  70. }
  71. }
  72. }
  73. limit_offset := curr_page*pear_page - pear_page
  74. return limit_offset, pear_page
  75. }
  76. }
  77. return 0, 0
  78. }
  79. func (this *FERData) postsToBuffer(buf string, cat int, order string) {
  80. if this.bufferPosts == nil {
  81. this.bufferPosts = map[string][]*BlogPost{}
  82. }
  83. if _, ok := this.bufferPosts[buf]; !ok {
  84. var posts []*BlogPost
  85. limit_offset, pear_page := this.postsGetCount(buf, cat)
  86. var rows *sqlw.Rows
  87. var err error
  88. if cat == 0 {
  89. rows, err = this.wrap.DB.Query(`
  90. SELECT
  91. blog_posts.id,
  92. blog_posts.user,
  93. blog_posts.name,
  94. blog_posts.alias,
  95. blog_posts.content,
  96. UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
  97. blog_posts.active
  98. FROM
  99. blog_posts
  100. WHERE
  101. blog_posts.active = 1
  102. ORDER BY
  103. blog_posts.id `+order+`
  104. LIMIT ?, ?;
  105. `, limit_offset, pear_page)
  106. } else {
  107. rows, err = this.wrap.DB.Query(`
  108. SELECT
  109. blog_posts.id,
  110. blog_posts.user,
  111. blog_posts.name,
  112. blog_posts.alias,
  113. blog_posts.content,
  114. UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
  115. blog_posts.active
  116. FROM
  117. blog_posts
  118. LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
  119. WHERE
  120. blog_posts.active = 1 AND
  121. blog_cat_post_rel.category_id = ?
  122. ORDER BY
  123. blog_posts.id `+order+`
  124. LIMIT ?, ?;
  125. `, cat, limit_offset, pear_page)
  126. }
  127. if err == nil {
  128. var f_id int
  129. var f_user int
  130. var f_name string
  131. var f_alias string
  132. var f_content string
  133. var f_datetime int
  134. var f_active int
  135. for rows.Next() {
  136. err = rows.Scan(&f_id, &f_user, &f_name, &f_alias, &f_content, &f_datetime, &f_active)
  137. if err == nil {
  138. posts = append(posts, &BlogPost{
  139. id: f_id,
  140. user: f_user,
  141. name: f_name,
  142. alias: f_alias,
  143. content: f_content,
  144. datetime: f_datetime,
  145. active: f_active,
  146. })
  147. }
  148. }
  149. rows.Close()
  150. }
  151. this.bufferPosts[buf] = posts
  152. }
  153. }
  154. func (this *FERData) BlogPosts() []*BlogPost {
  155. return this.BlogPostsOrder("DESC")
  156. }
  157. func (this *FERData) BlogPostsOrder(order string) []*BlogPost {
  158. posts_order := "DESC"
  159. if strings.ToLower(order) == "asc" {
  160. posts_order = "ASC"
  161. }
  162. buf := "posts_" + posts_order
  163. this.postsToBuffer(buf, 0, posts_order)
  164. return this.bufferPosts[buf]
  165. }
  166. func (this *FERData) BlogPostsOfCat(cat int) []*BlogPost {
  167. return this.BlogPostsOfCatOrder(cat, "DESC")
  168. }
  169. func (this *FERData) BlogPostsOfCatOrder(cat int, order string) []*BlogPost {
  170. posts_order := "DESC"
  171. if strings.ToLower(order) == "asc" {
  172. posts_order = "ASC"
  173. }
  174. buf := "posts_" + posts_order + "_" + utils.IntToStr(cat)
  175. this.postsToBuffer(buf, cat, posts_order)
  176. return this.bufferPosts[buf]
  177. }