aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Riebenbauer <davrieb@liegesta.at>2010-01-30 18:22:32 +0100
committerDavid Riebenbauer <davrieb@liegesta.at>2010-02-02 14:04:28 +0100
commitf35d35abe36166893f68061a1fcb2a26bc056fbc (patch)
treee2bf13e16461bfca83edb209cd19fb5d9c8882e0
parentf3abeac919c4736429bd3362af6edf51ede8e7fe (diff)
downloadikiwiki-f35d35abe36166893f68061a1fcb2a26bc056fbc.tar
ikiwiki-f35d35abe36166893f68061a1fcb2a26bc056fbc.tar.gz
Automatically create tag pages,
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.
-rw-r--r--IkiWiki/Plugin/tag.pm26
-rw-r--r--templates/autotag.tmpl3
2 files changed, 29 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm
index cdcfaf536..6c43a053d 100644
--- a/IkiWiki/Plugin/tag.pm
+++ b/IkiWiki/Plugin/tag.pm
@@ -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
index 000000000..754e0b35b
--- /dev/null
+++ b/templates/autotag.tmpl
@@ -0,0 +1,3 @@
+## Pagest tagged <TMPL_VAR TAG> ##
+
+[[!inline pages="tagged(<TMPL_VAR TAG>)" actions="no" archive="yes"]]