def validate(self): super(BlogPost, self).validate() if not self.blog_intro: content = get_html_content_based_on_type(self, 'content', self.content_type) self.blog_intro = content[:200] self.blog_intro = strip_html_tags(self.blog_intro) if self.blog_intro: self.blog_intro = self.blog_intro[:200] if not self.meta_title: self.meta_title = self.title[:60] else: self.meta_title = self.meta_title[:60] if not self.meta_description: self.meta_description = self.blog_intro[:140] else: self.meta_description = self.meta_description[:140] if self.published and not self.published_on: self.published_on = today() if self.featured: if not self.meta_image: frappe.throw(_("A featured post must have a cover image")) self.reset_featured_for_other_blogs() self.set_read_time()
def get_context(self, context): context.main_section = get_html_content_based_on_type( self, 'main_section', self.content_type) context.source_content_type = self.content_type self.render_dynamic(context) # if static page, get static content if context.slideshow: context.update(get_slideshow(self)) if self.enable_comments: context.comment_list = get_comment_list(self.doctype, self.name) context.update({ "style": self.css or "", "script": self.javascript or "", "header": self.header, "title": self.title, "text_align": self.text_align, }) if not self.show_title: context["no_header"] = 1 self.set_metatags(context) self.set_breadcrumbs(context) self.set_title_and_header(context) self.set_page_blocks(context) return context
def get_context(self, context): # this is for double precaution. usually it wont reach this code if not published if not cint(self.published): raise Exception("This blog has not been published yet!") # temp fields context.full_name = get_fullname(self.owner) context.updated = global_date_format(self.published_on) if self.blogger: context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict() context.author = self.blogger context.content = get_html_content_based_on_type(self, 'content', self.content_type) context.description = self.blog_intro or strip_html_tags(context.content[:140]) context.metatags = { "name": self.title, "description": context.description, } image = find_first_image(context.content) if image: context.metatags["image"] = image self.load_comments(context) context.category = frappe.db.get_value("Blog Category", context.doc.blog_category, ["title", "route"], as_dict=1) context.parents = [{"name": _("Home"), "route":"/"}, {"name": "Blog", "route": "/blog"}, {"label": context.category.title, "route":context.category.route}]
def get_context(self, context): # this is for double precaution. usually it wont reach this code if not published if not cint(self.published): raise Exception("This blog has not been published yet!") context.no_breadcrumbs = True # temp fields context.full_name = get_fullname(self.owner) context.updated = global_date_format(self.published_on) context.social_links = self.fetch_social_links_info() context.cta = self.fetch_cta() context.enable_cta = not self.hide_cta and frappe.db.get_single_value( "Blog Settings", "show_cta_in_blog", cache=True) if self.blogger: context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict() context.author = self.blogger context.content = get_html_content_based_on_type( self, 'content', self.content_type) #if meta description is not present, then blog intro or first 140 characters of the blog will be set as description context.description = self.meta_description or self.blog_intro or strip_html_tags( context.content[:140]) context.metatags = { "name": self.meta_title, "description": context.description, } #if meta image is not present, then first image inside the blog will be set as the meta image image = find_first_image(context.content) context.metatags["image"] = self.meta_image or image or None self.load_comments(context) self.load_feedback(context) context.category = frappe.db.get_value("Blog Category", context.doc.blog_category, ["title", "route"], as_dict=1) context.parents = [{ "name": _("Home"), "route": "/" }, { "name": "Blog", "route": "/blog" }, { "label": context.category.title, "route": context.category.route }] context.guest_allowed = True
def validate(self): super(BlogPost, self).validate() if not self.blog_intro: content = get_html_content_based_on_type(self, 'content', self.content_type) self.blog_intro = content[:140] self.blog_intro = strip_html_tags(self.blog_intro) if self.blog_intro: self.blog_intro = self.blog_intro[:140] if self.published and not self.published_on: self.published_on = today() # update posts frappe.db.sql("""UPDATE `tabBlogger` SET `posts`=(SELECT COUNT(*) FROM `tabBlog Post` WHERE IFNULL(`blogger`,'')=`tabBlogger`.`name`) WHERE `name`=%s""", (self.blogger,))
def get_context(self, context): context.main_section = get_html_content_based_on_type( self, 'main_section', self.content_type) context.source_content_type = self.content_type context.title = self.title if self.context_script: _locals = dict(context=frappe._dict()) safe_exec(self.context_script, None, _locals) context.update(_locals['context']) self.render_dynamic(context) # if static page, get static content if context.slideshow: context.update(get_slideshow(self)) if self.enable_comments: context.comment_list = get_comment_list(self.doctype, self.name) context.guest_allowed = True context.update({ "style": self.css or "", "script": self.javascript or "", "header": self.header, "text_align": self.text_align, }) if not self.show_title: context["no_header"] = 1 self.set_metatags(context) self.set_breadcrumbs(context) self.set_title_and_header(context) self.set_page_blocks(context) return context
def get_blog_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None): conditions = [] category = filters.blog_category or frappe.utils.escape_html( frappe.local.form_dict.blog_category or frappe.local.form_dict.category) if filters: if filters.blogger: conditions.append('t1.blogger=%s' % frappe.db.escape(filters.blogger)) if category: conditions.append('t1.blog_category=%s' % frappe.db.escape(category)) if txt: conditions.append('(t1.content like {0} or t1.title like {0}")'.format( frappe.db.escape('%' + txt + '%'))) if conditions: frappe.local.no_cache = 1 query = """\ select t1.title, t1.name, t1.blog_category, t1.route, t1.published_on, t1.read_time, t1.published_on as creation, t1.read_time as read_time, t1.featured as featured, t1.meta_image as cover_image, t1.content as content, t1.content_type as content_type, t1.content_html as content_html, t1.content_md as content_md, ifnull(t1.blog_intro, t1.content) as intro, t2.full_name, t2.avatar, t1.blogger, (select count(name) from `tabComment` where comment_type='Comment' and reference_doctype='Blog Post' and reference_name=t1.name) as comments from `tabBlog Post` t1, `tabBlogger` t2 where ifnull(t1.published,0)=1 and t1.blogger = t2.name %(condition)s order by featured desc, published_on desc, name asc limit %(page_len)s OFFSET %(start)s""" % { "start": limit_start, "page_len": limit_page_length, "condition": (" and " + " and ".join(conditions)) if conditions else "" } posts = frappe.db.sql(query, as_dict=1) for post in posts: post.content = get_html_content_based_on_type(post, 'content', post.content_type) if not post.cover_image: post.cover_image = find_first_image(post.content) post.published = global_date_format(post.creation) post.content = strip_html_tags(post.content) if not post.comments: post.comment_text = _('No comments yet') elif post.comments == 1: post.comment_text = _('1 comment') else: post.comment_text = _('{0} comments').format(str(post.comments)) post.avatar = post.avatar or "" post.category = frappe.db.get_value('Blog Category', post.blog_category, ['name', 'route', 'title'], as_dict=True) if post.avatar and (not "http:" in post.avatar and not "https:" in post.avatar ) and not post.avatar.startswith("/"): post.avatar = "/" + post.avatar return posts