coleslaw/plugins/sitemap.lisp

31 lines
1 KiB
Common Lisp
Raw Normal View History

2013-04-28 10:11:38 -04:00
(defpackage :coleslaw-sitemap
2013-04-27 02:16:22 +08:00
(:use :cl)
2014-04-28 12:31:22 -04:00
(:import-from :coleslaw #:*config*
2014-05-08 11:37:10 -04:00
#:index
2014-04-28 12:31:22 -04:00
#:page-url
#:find-all
#:publish
2014-04-28 12:31:22 -04:00
#:theme-fn
#:add-document
2014-05-08 11:37:10 -04:00
#:write-document)
2014-04-28 12:31:22 -04:00
(:import-from :alexandria #:hash-table-values)
2013-04-27 02:16:22 +08:00
(:export #:enable))
2013-04-28 10:11:38 -04:00
(in-package :coleslaw-sitemap)
2013-04-27 02:16:22 +08:00
(defclass sitemap ()
2014-05-08 11:37:10 -04:00
((urls :initarg :urls :reader urls)))
(defmethod page-url ((object sitemap)) "sitemap.xml")
;; We do 'discovery' in the publish method here because we can't ensure the
;; sitemap discover method is called last. Need all other content to be
;; discovered/in the DB.
(defmethod publish ((doc-type (eql (find-class 'sitemap))))
(let* ((base-urls '("" "sitemap.xml"))
(urls (mapcar #'page-url (hash-table-values coleslaw::*site*)))
(sitemap (make-instance 'sitemap :urls (append base-urls urls))))
2014-05-08 11:37:10 -04:00
(write-document sitemap (theme-fn 'sitemap "sitemap"))))
2013-04-27 02:16:22 +08:00
(defun enable ())