package controllers_pages import ( "main/mvc/models" "main/mvc/models/models_pages" "net/http" "path" "strconv" ) // Обработчик странички со списком постов func PostsPageHandler(app *models.App) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { link := r.URL.Path cacheKey := link ajax := r.URL.Query().Get("ajax") == "true" if ajax { cacheKey += "?ajax=true" } if pageData, ok := app.PagesCache.Get(cacheKey); ok { sendPostsPage(w, pageData) return } postsList := app.PostsMap.PostsList() pageNumber, _ := strconv.Atoi(path.Base(link)) page := models_pages.CreatePostsPage(postsList, pageNumber, app.Cfg.PostsMaxCountOnPage) var ( pageData []byte err error ) pageData, err = page.RenderPostsPage(app.Templates, app.Version, ajax) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } app.PagesCache.Set(cacheKey, pageData) sendPostsPage(w, pageData) } } // Отправляет страницу func sendPostsPage(w http.ResponseWriter, data []byte) { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.WriteHeader(http.StatusOK) w.Write(data) }