NewPage() moved to models

master
serr 2025-02-02 19:29:59 +03:00
parent 2f81e5b4c3
commit 310ba5a7c7
2 changed files with 19 additions and 20 deletions

View File

@ -10,23 +10,6 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
// Возвращает контекст страницы по списку постов (которые на ней должны быть),
// номеру страницы, метадаты
func PageCtx(c *gin.Context, s *models.Site,
postsSublist models.Posts, pageNumber int, data string) *models.Page {
accessLvl := AccessLvl(c)
return &models.Page{
AccessLvl: accessLvl,
Title: "hikan.ru",
PostsSublist: postsSublist,
Number: pageNumber,
Data: data,
SiteCtx: s,
}
}
// Задает маршруты для страниц вида tmplname/id.html, где необходим список всех постов // Задает маршруты для страниц вида tmplname/id.html, где необходим список всех постов
func PageByName(tmplname string, group *gin.RouterGroup, s *models.Site) { func PageByName(tmplname string, group *gin.RouterGroup, s *models.Site) {
group.GET(fmt.Sprintf("/%s/:id", tmplname), group.GET(fmt.Sprintf("/%s/:id", tmplname),
@ -34,7 +17,7 @@ func PageByName(tmplname string, group *gin.RouterGroup, s *models.Site) {
func(c *gin.Context) { func(c *gin.Context) {
pageNumber, _ := c.Get("pageNumber") pageNumber, _ := c.Get("pageNumber")
pageContext := PageCtx(c, s, s.Posts, pageNumber.(int), "") pageContext := models.NewPage(s, s.Posts, pageNumber.(int), AccessLvl(c), "")
page, err := getPageByName(c, s, tmplname, pageNumber.(int), pageContext) page, err := getPageByName(c, s, tmplname, pageNumber.(int), pageContext)
if err != nil { if err != nil {
@ -109,7 +92,7 @@ func getSearchPage(c *gin.Context, s *models.Site, tmplname string,
if AccessLvl(c) != 0 { // кэширую только странички по тегам if AccessLvl(c) != 0 { // кэширую только странички по тегам
// Для админа - рендер без кэширования // Для админа - рендер без кэширования
posts := s.Posts.GetPostListBySubstring(searchSubstring) // посты, содержащие искомую подстроку posts := s.Posts.GetPostListBySubstring(searchSubstring) // посты, содержащие искомую подстроку
pageContext := PageCtx(c, s, posts, pageNumber, searchSubstring) pageContext := models.NewPage(s, posts, pageNumber, AccessLvl(c), searchSubstring)
page, err = RenderPage(pageContext, tmplname, s) page, err = RenderPage(pageContext, tmplname, s)
} else { } else {
key := fmt.Sprintf("%s%d%s", tmplname, pageNumber, searchSubstring) key := fmt.Sprintf("%s%d%s", tmplname, pageNumber, searchSubstring)
@ -119,7 +102,7 @@ func getSearchPage(c *gin.Context, s *models.Site, tmplname string,
} else { } else {
// Нет в кэше => рендерим // Нет в кэше => рендерим
posts := s.Posts.GetPostListBySubstring(searchSubstring) posts := s.Posts.GetPostListBySubstring(searchSubstring)
pageContext := PageCtx(c, s, posts, pageNumber, searchSubstring) pageContext := models.NewPage(s, posts, pageNumber, AccessLvl(c), searchSubstring)
page, err = RenderPage(pageContext, tmplname, s) page, err = RenderPage(pageContext, tmplname, s)
// если нет ошибки и список постов не пустой, то надо добавить в кэш // если нет ошибки и список постов не пустой, то надо добавить в кэш
if err == nil && len(posts) > 0 { if err == nil && len(posts) > 0 {

View File

@ -9,3 +9,19 @@ type Page struct {
Data string // строка с данными (например искомая строка для поиска) Data string // строка с данными (например искомая строка для поиска)
SiteCtx *Site SiteCtx *Site
} }
// Возвращает контекст страницы по списку постов (которые на ней должны быть),
// номеру страницы, метадаты
func NewPage(s *Site, postsSublist Posts,
pageNumber int, accessLvl int, data string) *Page {
return &Page{
AccessLvl: accessLvl,
Title: "hikan.ru",
PostsSublist: postsSublist,
Number: pageNumber,
Data: data,
SiteCtx: s,
}
}