ikiwiki/doc/todo/auto-create_tag_pages_accor...

109 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

It would be great if I could tell ikiwiki to automatically instantiate pages for each tag, according to a template, especially when `$tagbase` is set.
Tags are mainly specific to the object to which theyre stuck. However, I often use them the other way around, too: as concepts. And sometimes Id like to see all pages related to a given concept (“tagged with a given tag”). The only way to do this with ikiwiki is to instantiate a page for each tag and slap a map on it. This is quite tedious and Id really love to see Ikiwiki do so by default for all tags.
Also see: <http://madduck.net/blog/2008.01.06:new-blog/> and <http://users.itk.ppke.hu/~cstamas/code/ikiwiki/autocreatetagpage/>
[[!tag wishlist]]
I would love to see this as well. -- dato
---
I have create a patch to tag.pm for add the option for auto create tag pages.
A new setting is used to enable or disable auto-create tag pages, `tag_autocreate`.
The new tag file is created during the preprocess phase.
The new tag file is then complied during the change phase.
_tag.pm from version 3.01_
--- tag.pm 2009-02-06 10:26:03.000000000 -0700
+++ tag_new.pm 2009-02-06 12:17:19.000000000 -0700
@@ -14,6 +14,7 @@
hook(type => "preprocess", id => "tag", call => \&preprocess_tag, scan => 1);
hook(type => "preprocess", id => "taglink", call => \&preprocess_taglink, scan => 1);
hook(type => "pagetemplate", id => "tag", call => \&pagetemplate);
+ hook(type => "change", id => "tag", call => \&change);
}
sub getopt () {
@@ -36,6 +37,36 @@
safe => 1,
rebuild => 1,
},
+ tag_autocreate => {
+ type => "boolean",
+ example => 0,
+ description => "Auto-create the new tag pages, uses autotagpage.tmpl ",
+ safe => 1,
+ rebulid => 1,
+ },
+}
+
+my $autocreated_page = 0;
+
+sub gen_tag_page($) {
+ my $tag=shift;
+
+ my $tag_file=$tag.'.'.$config{default_pageext};
+ return if (-f $config{srcdir}.$tag_file);
+
+ my $template=template("autotagpage.tmpl");
+ $template->param(tag => $tag);
+ writefile($tag_file, $config{srcdir}, $template->output);
+ $autocreated_page = 1;
+
+ if ($config{rcs}) {
+ IkiWiki::disable_commit_hook();
+ IkiWiki::rcs_add($tag_file);
+ IkiWiki::rcs_commit_staged(
+ gettext("Automatic tag page generation"),
+ undef, undef);
+ IkiWiki::enable_commit_hook();
+ }
}
sub tagpage ($) {
@@ -47,6 +78,10 @@
$tag=~y#/#/#s; # squash dups
}
+ if (defined $config{tag_autocreate} && $config{tag_autocreate} ) {
+ gen_tag_page($tag);
+ }
+
return $tag;
}
@@ -125,4 +160,18 @@
}
}
+sub change(@) {
+ return unless($autocreated_page);
+ $autocreated_page = 0;
+
+ # This refresh/saveindex is to complie the autocreated tag pages
+ IkiWiki::refresh();
+ IkiWiki::saveindex();
+
+ # This refresh/saveindex is to fix the Tags link
+ # With out this additional refresh/saveindex the tag link displays ?tag
+ IkiWiki::refresh();
+ IkiWiki::saveindex();
+}
+
This uses a template called `autotagpage.tmpl`, here is my template file:
\[[!inline pages="link(<TMPL_VAR TAG>)" archive="yes"]]
A quirk I have not figured out is during the `sub change`, see my comments in the code.
I am not sure if that is the best way to handle it.
[[!tag patch]]
-- Jeremy Schultz <jeremy.schultz@uleth.ca>