Browse Source

Blog category fixes

Vova Tkach 5 years ago
parent
commit
98727067d4
2 changed files with 164 additions and 7 deletions
  1. 150 6
      engine/fetdata/blog.go
  2. 14 1
      engine/fetdata/blog_post.go

+ 150 - 6
engine/fetdata/blog.go

@@ -52,6 +52,7 @@ func (this *Blog) load() *Blog {
 			blog_posts.user,
 			blog_posts.user,
 			blog_posts.name,
 			blog_posts.name,
 			blog_posts.alias,
 			blog_posts.alias,
+			blog_posts.category,
 			blog_posts.briefly,
 			blog_posts.briefly,
 			blog_posts.content,
 			blog_posts.content,
 			UNIX_TIMESTAMP(blog_posts.datetime) as datetime,
 			UNIX_TIMESTAMP(blog_posts.datetime) as datetime,
@@ -61,10 +62,75 @@ func (this *Blog) load() *Blog {
 			users.last_name,
 			users.last_name,
 			users.email,
 			users.email,
 			users.admin,
 			users.admin,
-			users.active
+			users.active,
+			cats.id,
+			cats.user,
+			cats.name,
+			cats.alias,
+			cats.lft,
+			cats.rgt,
+			cats.depth,
+			cats.parent_id
 		FROM
 		FROM
 			blog_posts
 			blog_posts
 			LEFT JOIN users ON users.id = blog_posts.user
 			LEFT JOIN users ON users.id = blog_posts.user
+			LEFT JOIN (
+				SELECT
+					main.id,
+					main.user,
+					main.name,
+					main.alias,
+					main.lft,
+					main.rgt,
+					main.depth,
+					parent.id AS parent_id
+				FROM
+					(
+						SELECT
+							node.id,
+							node.user,
+							node.name,
+							node.alias,
+							node.lft,
+							node.rgt,
+							(COUNT(parent.id) - 1) AS depth
+						FROM
+							blog_cats AS node,
+							blog_cats AS parent
+						WHERE
+							node.lft BETWEEN parent.lft AND parent.rgt
+						GROUP BY
+							node.id
+						ORDER BY
+							node.lft ASC
+					) AS main
+					LEFT JOIN (
+						SELECT
+							node.id,
+							node.user,
+							node.name,
+							node.alias,
+							node.lft,
+							node.rgt,
+							(COUNT(parent.id) - 0) AS depth
+						FROM
+							blog_cats AS node,
+							blog_cats AS parent
+						WHERE
+							node.lft BETWEEN parent.lft AND parent.rgt
+						GROUP BY
+							node.id
+						ORDER BY
+							node.lft ASC
+					) AS parent ON
+					parent.depth = main.depth AND
+					main.lft > parent.lft AND
+					main.rgt < parent.rgt
+				WHERE
+					main.id > 1
+				ORDER BY
+					main.lft ASC
+			) AS cats ON cats.id = blog_posts.category
 		WHERE
 		WHERE
 			blog_posts.active = 1
 			blog_posts.active = 1
 		ORDER BY
 		ORDER BY
@@ -124,6 +190,7 @@ func (this *Blog) load() *Blog {
 				blog_posts.user,
 				blog_posts.user,
 				blog_posts.name,
 				blog_posts.name,
 				blog_posts.alias,
 				blog_posts.alias,
+				blog_posts.category,
 				blog_posts.briefly,
 				blog_posts.briefly,
 				blog_posts.content,
 				blog_posts.content,
 				UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
 				UNIX_TIMESTAMP(blog_posts.datetime) AS datetime,
@@ -133,16 +200,82 @@ func (this *Blog) load() *Blog {
 				users.last_name,
 				users.last_name,
 				users.email,
 				users.email,
 				users.admin,
 				users.admin,
-				users.active
+				users.active,
+				cats.id,
+				cats.user,
+				cats.name,
+				cats.alias,
+				cats.lft,
+				cats.rgt,
+				cats.depth,
+				cats.parent_id
 			FROM
 			FROM
 				blog_posts
 				blog_posts
 				LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
 				LEFT JOIN blog_cat_post_rel ON blog_cat_post_rel.post_id = blog_posts.id
 				LEFT JOIN users ON users.id = blog_posts.user
 				LEFT JOIN users ON users.id = blog_posts.user
+				LEFT JOIN (
+					SELECT
+						main.id,
+						main.user,
+						main.name,
+						main.alias,
+						main.lft,
+						main.rgt,
+						main.depth,
+						parent.id AS parent_id
+					FROM
+						(
+							SELECT
+								node.id,
+								node.user,
+								node.name,
+								node.alias,
+								node.lft,
+								node.rgt,
+								(COUNT(parent.id) - 1) AS depth
+							FROM
+								blog_cats AS node,
+								blog_cats AS parent
+							WHERE
+								node.lft BETWEEN parent.lft AND parent.rgt
+							GROUP BY
+								node.id
+							ORDER BY
+								node.lft ASC
+						) AS main
+						LEFT JOIN (
+							SELECT
+								node.id,
+								node.user,
+								node.name,
+								node.alias,
+								node.lft,
+								node.rgt,
+								(COUNT(parent.id) - 0) AS depth
+							FROM
+								blog_cats AS node,
+								blog_cats AS parent
+							WHERE
+								node.lft BETWEEN parent.lft AND parent.rgt
+							GROUP BY
+								node.id
+							ORDER BY
+								node.lft ASC
+						) AS parent ON
+						parent.depth = main.depth AND
+						main.lft > parent.lft AND
+						main.rgt < parent.rgt
+					WHERE
+						main.id > 1
+					ORDER BY
+						main.lft ASC
+				) AS cats ON cats.id = blog_posts.category
 			WHERE
 			WHERE
 				blog_posts.active = 1 AND
 				blog_posts.active = 1 AND
 				blog_cat_post_rel.category_id IN (` + strings.Join(cat_ids, ", ") + `)
 				blog_cat_post_rel.category_id IN (` + strings.Join(cat_ids, ", ") + `)
 			GROUP BY
 			GROUP BY
-				blog_posts.id
+				blog_posts.id,
+				cats.parent_id
 			ORDER BY
 			ORDER BY
 				blog_posts.id DESC
 				blog_posts.id DESC
 			LIMIT ?, ?;
 			LIMIT ?, ?;
@@ -163,11 +296,13 @@ func (this *Blog) load() *Blog {
 			for rows.Next() {
 			for rows.Next() {
 				rp := utils.MySql_blog_post{}
 				rp := utils.MySql_blog_post{}
 				ru := utils.MySql_user{}
 				ru := utils.MySql_user{}
+				ro := utils.MySql_blog_category{}
 				if err := rows.Scan(
 				if err := rows.Scan(
 					&rp.A_id,
 					&rp.A_id,
 					&rp.A_user,
 					&rp.A_user,
 					&rp.A_name,
 					&rp.A_name,
 					&rp.A_alias,
 					&rp.A_alias,
+					&rp.A_category,
 					&rp.A_briefly,
 					&rp.A_briefly,
 					&rp.A_content,
 					&rp.A_content,
 					&rp.A_datetime,
 					&rp.A_datetime,
@@ -178,11 +313,20 @@ func (this *Blog) load() *Blog {
 					&ru.A_email,
 					&ru.A_email,
 					&ru.A_admin,
 					&ru.A_admin,
 					&ru.A_active,
 					&ru.A_active,
+					&ro.A_id,
+					&ro.A_user,
+					&ro.A_name,
+					&ro.A_alias,
+					&ro.A_lft,
+					&ro.A_rgt,
+					&ro.A_depth,
+					&ro.A_parent,
 				); err == nil {
 				); err == nil {
 					this.posts = append(this.posts, &BlogPost{
 					this.posts = append(this.posts, &BlogPost{
-						wrap:   this.wrap,
-						object: &rp,
-						user:   &User{wrap: this.wrap, object: &ru},
+						wrap:     this.wrap,
+						object:   &rp,
+						user:     &User{wrap: this.wrap, object: &ru},
+						category: &BlogCategory{wrap: this.wrap, object: &ro},
 					})
 					})
 				}
 				}
 			}
 			}

+ 14 - 1
engine/fetdata/blog_post.go

@@ -12,7 +12,8 @@ type BlogPost struct {
 	wrap   *wrapper.Wrapper
 	wrap   *wrapper.Wrapper
 	object *utils.MySql_blog_post
 	object *utils.MySql_blog_post
 
 
-	user *User
+	user     *User
+	category *BlogCategory
 }
 }
 
 
 func (this *BlogPost) load() *BlogPost {
 func (this *BlogPost) load() *BlogPost {
@@ -52,6 +53,18 @@ func (this *BlogPost) Alias() string {
 	return this.object.A_alias
 	return this.object.A_alias
 }
 }
 
 
+func (this *BlogPost) Category() *BlogCategory {
+	if this == nil {
+		return nil
+	}
+	if this.category != nil {
+		return this.category
+	}
+	this.category = (&BlogCategory{wrap: this.wrap}).load(nil)
+	this.category.loadById(this.object.A_category)
+	return this.category
+}
+
 func (this *BlogPost) Briefly() template.HTML {
 func (this *BlogPost) Briefly() template.HTML {
 	if this == nil {
 	if this == nil {
 		return template.HTML("")
 		return template.HTML("")