diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2011-03-15 16:01:00 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2011-03-15 16:01:00 +0100 |
commit | ad31dc08c8fa83904cf18c32e8d02c5a6591a5d8 (patch) | |
tree | ed21bebea6770a4c6232efcec5098667c7bbe263 | |
parent | c63989699bbca26908c2efd7968f776800e75b36 (diff) |
Add news feed support.
-rw-r--r-- | mulkcms.lisp | 88 | ||||
-rw-r--r-- | templates/article_feed.xml | 34 |
2 files changed, 95 insertions, 27 deletions
diff --git a/mulkcms.lisp b/mulkcms.lisp index d6f09b4..9294e0d 100644 --- a/mulkcms.lisp +++ b/mulkcms.lisp @@ -374,8 +374,10 @@ (defun find-journal-archive-request-handler (path full-p &optional action characteristics) (declare (ignore action)) - (when (or (string= path "journal") - (string= path "journal/")) + (when (member path '("journal" "journal/" + "feed" "feed/" + "journal/feed" "journal/feed") + :test #'string=) (lambda () (with-db (let* (#+portable-mulkcms @@ -394,31 +396,63 @@ WHERE article = r.article AND alias LIKE 'journal/%')"))) (displayed-revisions (if full-p revisions (subseq revisions 0 10))) - (page-skeleton (template "page_skeleton")) - (page-template (template "journal_page")) - (template-params (list :title *site-name* - :root *base-uri* - :site-name *site-name* - :site-subtitle "" - :link "" - :full-archive-link "" - :full-archive-label "Full archive (slow!)" - :archive-title "Older posts" - :archive-table-caption "Posts by date" - :archive-title-label "Title" - :archive-date-label "Date" - :archive-comments-label "Comments")) - (head (expand-template page-template (list* :head t - :articles displayed-revisions - :minor-articles revisions - template-params))) - (body (expand-template page-template (list* :body t - :articles displayed-revisions - :minor-articles revisions - template-params)))) - (expand-template page-skeleton (list :title *site-name* - :head head - :body body))))))) + ) + (cond + ((member path '("journal" "journal/") :test #'string=) + (let* ((page-skeleton (template "page_skeleton")) + (page-template (template "journal_page")) + (template-params + (list :title *site-name* + :root *base-uri* + :site-name *site-name* + :site-subtitle "" + :link "" + :full-archive-link "" + :full-archive-label "Full archive (slow!)" + :archive-title "Older posts" + :archive-table-caption "Posts by date" + :archive-title-label "Title" + :archive-date-label "Date" + :archive-comments-label "Comments")) + (head (expand-template + page-template + (list* :head t + :articles displayed-revisions + :minor-articles revisions + template-params))) + (body (expand-template + page-template + (list* :body t + :articles displayed-revisions + :minor-articles revisions + template-params)))) + (expand-template page-skeleton (list :title *site-name* + :head head + :body body)))) + ((member path '("feed" "feed/" "journal/feed" "journal/feed/") + :test #'string=) + (let* ((authors + (query "SELECT DISTINCT name + FROM users + JOIN article_revisions + ON author = users.id" + :plist)) + (last-updated + (query "SELECT max(date) + FROM article_revisions + WHERE status = 'syndicated'" + :single)) + (template-params + (list :title *site-name* + :last-updated-date last-updated + :base-uri *base-uri* + :subtitle "" + :global-id *feed-global-id* + :authors authors + :feed-uri (link-to :view-atom-feed) + :articles revisions))) + (expand-template (template "article_feed") + template-params))))))))) (defun paramify-article (revision-data &optional commentary-p comments) (let* () diff --git a/templates/article_feed.xml b/templates/article_feed.xml new file mode 100644 index 0000000..b284f45 --- /dev/null +++ b/templates/article_feed.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <title type="html">{title}</title> + <updated>{last-updated-date|html-iso-date}</updated> + <id>{global-id}</id> + <subtitle> + {subtitle} + </subtitle> + <author> + {.repeated section authors} + <name>{name}</name> + {.end} + </author> + <link rel="alternate" type="text/html" href="{base-uri|html-attr-value}"/> + <link rel="self" type="application/atom+xml" href="{feed-uri|html-attr-value}"/> + {.repeated section articles} + <entry> + <title type="html"> + {title} + </title> + <id>{global-id}</id> + <updated>{last-updated-date|html-iso-date}</updated> + <published>{publishing-date|html-iso-date}</published> + <link rel="alternate" type="text/html" href="{link|html-attr-value}"/> + {.section body} + <content type="xhtml" xml:lang="de" xml:base="{base-uri|html-attr-value}"> + <div xmlns="http://www.w3.org/1999/xhtml"> + {@} + </div> + </content> + {.end} + </entry> + {.end} +</feed> |