+ request.website.get_template(page)
+ except ValueError, e:
+ # page not found
+ if request.context['editable']:
+ page = 'website.page_404'
+ else:
+ return request.registry['ir.http']._handle_exception(e, 404)
+
+ return request.render(page, values)
+
+ @http.route(['/robots.txt'], type='http', auth="public")
+ def robots(self):
+ return request.render('website.robots', {'url_root': request.httprequest.url_root}, mimetype='text/plain')
+
+ @http.route('/sitemap.xml', type='http', auth="public", website=True)
+ def sitemap_xml_index(self):
+ return request.not_found() # Temporary disable sitemap
+ pages = list(request.website.enumerate_pages())
+ if len(pages)<=LOC_PER_SITEMAP:
+ return self.__sitemap_xml(pages, 0)
+ # Sitemaps must be split in several smaller files with a sitemap index
+ values = {
+ 'pages': range(len(pages)/LOC_PER_SITEMAP+1),
+ 'url_root': request.httprequest.url_root
+ }
+ headers = {
+ 'Content-Type': 'application/xml;charset=utf-8',
+ }
+ return request.render('website.sitemap_index_xml', values, headers=headers)
+
+ @http.route('/sitemap-<int:page>.xml', type='http', auth="public", website=True)
+ def sitemap_xml(self, page):
+ pages = list(request.website.enumerate_pages())
+ return self.__sitemap_xml(pages, page)
+
+ def __sitemap_xml(self, pages, index=0):
+ values = {
+ 'pages': pages[index*LOC_PER_SITEMAP:(index+1)*LOC_PER_SITEMAP],
+ 'url_root': request.httprequest.url_root.rstrip('/')
+ }
+ headers = {
+ 'Content-Type': 'application/xml;charset=utf-8',
+ }
+ return request.render('website.sitemap_xml', values, headers=headers)
+
+ #------------------------------------------------------
+ # Edit
+ #------------------------------------------------------
+ @http.route('/website/add/<path:path>', type='http', auth="user", website=True)
+ def pagenew(self, path, noredirect=False, add_menu=None):
+ xml_id = request.registry['website'].new_page(request.cr, request.uid, path, context=request.context)
+ if add_menu:
+ model, id = request.registry["ir.model.data"].get_object_reference(request.cr, request.uid, 'website', 'main_menu')
+ request.registry['website.menu'].create(request.cr, request.uid, {
+ 'name': path,
+ 'url': "/page/" + xml_id,
+ 'parent_id': id,
+ }, context=request.context)
+ # Reverse action in order to allow shortcut for /page/<website_xml_id>
+ url = "/page/" + re.sub(r"^website\.", '', xml_id)
+
+ if noredirect: