The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.
The blog generator uses CXML, Elephant, CL-FAD, Local-Time, and Stefil for testing. I am using clbuild to obtain these.
For Emacs, I use nXML mode.
A configuration switching method is included in the package, but it's use is optional, and as is usual for lisp, configuration is through special variables.
For an example of using the configuration environments, look at the config.lisp
file loaded by the my-blog.asd
system. This defines the three environments that I use, :test
, :development
, and :production
. Configurations are defined using SET-ENVIRONMENT
and activated with CONFIGURE
.
The first configuration required is the choice of file system locations for the published posts (*PUBLISHED-PATH*
), the generated web pages(*SITE-PATH*
) and the page templates (*TEMPLATE-PATH*
). Drafts can exist anywhere, and are not tracked by the generator.
Next, the web paths need to be configured. The path of the blog's index file relative to the site root is required (*BLOG-ROOT-PATH*
), as is the domain of the site (*BLOG-DOMAIN*
), in order for it to be used in the Atom feed.
Finally, the database connection expression is required (*BLOG-DB-SPEC*
). Please refer to the Elephant documentation for your choices here. I use postgres, but it should work with the BDB backend as well.
The site requires three templates in *TEMPLATE-PATH*
; for the index file (index.html
), for the posts (post.xhtml
) and for the Atom feed (atom.xml
). The templates are very simple - each div or span with a recognised id has content injected into it. The recoginised id's are:
posts
- replaced with the current post synopses, and links to the postspost
- replaced with the current post's contentpost-title
- replaced with the current post's titlepost-when
- replaced with the current post's published datepost-update
- replaced with the current post's updated dateFor the Atom feed, the updated
element is filled out correctly, and the posts are automatically inserted, ie. there are no special id's.