Basically any lisp function could be used withing a blog template as long as
they are known when exporting. Meanwhile some of them are specifically made
to be used withing templates. These functions are prefixed by ob:.
Descriptions are taken from function docstrings.
Function: (ob:get-posts &optional PREDICATE COUNT SORTFUNC COLLECT)
Return posts (from POSTS as defined in org-publish-blog) matching
PREDICATE. Limit to COUNT results if defined and sorted using
SORTFUNC.
PREDICATE is a function run for each post with the post itself as
argument. If PREDICATE is nil, no filter would be done on posts.
SORTFUNC is used a sort PREDICATE.
If COLLECT is defined, only returns the COLLECT field of a
ob:post structure.
Examples:
Getting last 10 posts:
(ob:get-posts nil 10)
Getting post from January 2012:
(ob:get-posts
(lambda (x)
(and (= 2012 (ob:post-year x))
(= 1 (ob:post-month x)))))
Getting all categories:
(ob:get-posts nil nil nil 'category)
Template usages
For archive navigation:
<nav id="archives"> <h1>Archives</h1> <ul> <lisp> (loop for p in (ob:get-posts nil 10) do (insert (format "<li><a href=\"%s/%s\">%s</a></li> " (ob:path-to-root) (ob:post-htmlfile p) (ob:post-title p)))) </lisp> </ul> </nav>
Function: (ob:get-post-by-id ID)
Return post which id is ID.
Template usages
Posts navigation:
<nav class="articles-nav"> <ul> <lisp> (progn ;; Get previous post (let ((ppost (ob:get-post-by-id (1+ (ob:post-id POST))))) (if ppost (insert (format "<li class=\"prev\"><a href=\"%s/%s\">%s</a></li>" (ob:path-to-root) (ob:post-htmlfile ppost) (ob:post-title ppost))) (insert "<li> </li>"))) ;; Get next post (let ((npost (ob:get-post-by-id (1- (ob:post-id POST))))) (if npost (insert (format "<li class=\"next\"><a href=\"%s/%s\">%s</a></li>" (ob:path-to-root) (ob:post-htmlfile npost) (ob:post-title npost))) (insert "<li> </li>")))) </lisp> </ul> </nav>
Function: (ob:get-snippet NAME)
Get first snippet matching NAME.
Template usages
Insert the About section in page footer:
<h1>About</h1> <address> <lisp>(ob:post-content-html (ob:get-snippet "About"))</lisp> </address>
Function: (ob:get-header HEADER &optional ALL)
Get HEADER from blog buffer as defined in BLOG global context variable.
Returns only fist match except if ALL is defined.
Template usages
Get the last updated header for rss export:
<updated><lisp>(ob:format-date (ob:get-header "DATE"))</lisp></updated>
Function: (ob:insert-template TEMPLATE)
Insert TEMPLATE in current buffer.
Template usages
Insert html header:
<lisp>(ob:insert-template "page_header.html")</lisp>
Function: (ob:format-date DATE &optional FORMAT LOCALE)
Format DATE using FORMAT and LOCALE.
DATE can heither be string suitable for parse-time-string or a list of
interger using current-time format.
FORMAT is a format-time-string compatible definition. If not
set ISO8601 %Y-%m-%dT%TZ format would be used.
Template usages
Add a human readable timestamp for a post:
Posted on <time datetime="<lisp> (ob:format-date (ob:post-timestamp POST)) </lisp>"> <lisp> (ob:format-date (ob:post-timestamp POST) "%A %B, %d %Y at %H:%M:%S") </lisp> </time>.