// Given a request, follow the segments through sitetree to find the page that is being requested. Doesn't // understand actions, so just finds the page. Returns ID of SiteTree_Live record or 0 if it can't find a // matching page. // @todo Understand BaseController actions, or break on the furthest it gets up the tree // @todo cache site tree func findPageToRender(r *http.Request) (int, error) { siteCache := getSiteCache() if siteCache != nil { id, found := siteCache.findPageToRender(r) if found { // fmt.Printf("page cache hit %d\n", id) return id, nil } } s := strings.Trim(r.URL.Path, "/") path := strings.Split(s, "/") if len(path) == 0 || path[0] == "" { // find a home page ID r, e := orm.Query("select \"ID\" from \"SiteTree_Live\" where \"URLSegment\"='home' and \"ParentID\"=0") defer r.Close() if e != nil { return 0, e } if !r.Next() { return 0, nil } var ID int e = r.Scan(&ID) return ID, e } currParentID := 0 for _, p := range path { r, e := orm.Query("select \"ID\",\"ParentID\" from \"SiteTree_Live\" where \"URLSegment\"='" + p + "' and \"ParentID\"=" + strconv.Itoa(currParentID)) defer r.Close() if e != nil { return 0, e } if !r.Next() { return 0, nil } var ID, ParentID int e = r.Scan(&ID, &ParentID) currParentID = ID } // if we get to the end, we've found a matching ID in SiteTree_Live return currParentID, nil }
// Given a request, follow the segments through sitetree to find the page that is being requested. Doesn't // understand actions, so just finds the page. Returns ID of SiteTree_Live record or 0 if it can't find a // matching page. // @todo Understand BaseController actions, or break on the furthest it gets up the tree // @todo cache site tree func (ctx *DBContext) findPageToRender(r *http.Request) (int, error) { s := strings.Trim(r.URL.Path, "/") path := strings.Split(s, "/") if len(path) == 0 || path[0] == "" { // find a home page ID r, e := ctx.Query("select \"ID\" from \"SiteTree_Live\" where \"URLSegment\"='home' and \"ParentID\"=0") if e != nil { return 0, e } if !r.Next() { return 0, nil } var ID int e = r.Scan(&ID) return ID, e } currParentID := 0 for _, p := range path { r, e := ctx.Query("select \"ID\",\"ParentID\" from \"SiteTree_Live\" where \"URLSegment\"='" + p + "' and \"ParentID\"=" + strconv.Itoa(currParentID)) if e != nil { return 0, e } if !r.Next() { return 0, nil } var ID, ParentID int e = r.Scan(&ID, &ParentID) currParentID = ID } // if we get to the end, we've found a matching ID in SiteTree_Live return currParentID, nil }