Automatically create tag pages,
authorDavid Riebenbauer <davrieb@liegesta.at>
Sat, 30 Jan 2010 17:22:32 +0000 (18:22 +0100)
committerDavid Riebenbauer <davrieb@liegesta.at>
Tue, 2 Feb 2010 13:04:28 +0000 (14:04 +0100)
if "tag_autocreate=1" is set in the configuration. The pages will be created in
tagbase, if and only if they do not exist in the srcdir yet. Tag pages will be create from
"autotag.tmpl".

At this stage a second refresh is needed for the tag pages to be rendered.

Add autotag.tmpl template.

IkiWiki/Plugin/tag.pm
templates/autotag.tmpl [new file with mode: 0644]

index cdcfaf536082825444b3e8d3f27b406bc413cd53..6c43a053d3abde7709bed74b43c5ad47d48a2a0e 100644 (file)
@@ -36,6 +36,13 @@ sub getsetup () {
                        safe => 1,
                        rebuild => 1,
                },
+               tag_autocreate => {
+                       type => "boolean",
+                       example => 0,
+                       description => "Autocreate new tag pages",
+                       safe => 1,
+                       rebuild => 1,
+               },
 }
 
 sub tagpage ($) {
@@ -59,6 +66,21 @@ sub taglink ($$$;@) {
        return htmllink($page, $destpage, tagpage($tag), %opts);
 }
 
+sub gentag ($) {
+       my $tag=shift;
+       if (defined $config{tag_autocreate} && $config{tag_autocreate}) {
+               my $tagfile = newpagefile(tagpage($tag), $config{default_pageext});
+               $tagfile=~s/^\///;
+               return if (srcfile($tagfile,1));
+
+               debug(sprintf(gettext("creating tag page %s"), $tag));
+
+               my $template=template("autotag.tmpl");
+               $template->param(tag => $tag);
+               writefile($tagfile, $config{srcdir}, $template->output);
+       }
+}
+
 sub preprocess_tag (@) {
        if (! @_) {
                return "";
@@ -72,6 +94,10 @@ sub preprocess_tag (@) {
        foreach my $tag (keys %params) {
                $tag=linkpage($tag);
                $tags{$page}{$tag}=1;
+
+               # add tagpage if necessary
+               gentag($tag);
+
                # hidden WikiLink
                add_link($page, tagpage($tag));
        }
diff --git a/templates/autotag.tmpl b/templates/autotag.tmpl
new file mode 100644 (file)
index 0000000..754e0b3
--- /dev/null
@@ -0,0 +1,3 @@
+## Pagest tagged <TMPL_VAR TAG> ##
+
+[[!inline pages="tagged(<TMPL_VAR TAG>)" actions="no" archive="yes"]]