3 It would be great if I could tell ikiwiki to automatically instantiate pages for each [[tag|directive/tag]], according to a template, especially when `$tagbase` is set.
5 Tags are mainly specific to the object to which they’re stuck. However, I often use them the other way around, too: as concepts. And sometimes I’d 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 I’d really love to see Ikiwiki do so by default for all tags.
7 Also see: <http://madduck.net/blog/2008.01.06:new-blog/> and <http://users.itk.ppke.hu/~cstamas/code/ikiwiki/autocreatetagpage/>
11 I would love to see this as well. -- dato
15 I have create a patch to [[tag.pm|plugins/tag]] for add the option for auto create tag pages.
16 A new setting is used to enable or disable auto-create tag pages, `tag_autocreate`.
17 The new tag file is created during the preprocess phase.
18 The new tag file is then complied during the change phase.
20 _tag.pm from version 3.01_
23 --- tag.pm 2009-02-06 10:26:03.000000000 -0700
24 +++ tag_new.pm 2009-02-06 12:17:19.000000000 -0700
26 hook(type => "preprocess", id => "tag", call => \&preprocess_tag, scan => 1);
27 hook(type => "preprocess", id => "taglink", call => \&preprocess_taglink, scan => 1);
28 hook(type => "pagetemplate", id => "tag", call => \&pagetemplate);
29 + hook(type => "change", id => "tag", call => \&change);
40 + description => "Auto-create the new tag pages, uses autotagpage.tmpl ",
46 +my $autocreated_page = 0;
48 +sub gen_tag_page($) {
51 + my $tag_file=$tag.'.'.$config{default_pageext};
52 + return if (-f $config{srcdir}.$tag_file);
54 + my $template=template("autotagpage.tmpl");
55 + $template->param(tag => $tag);
56 + writefile($tag_file, $config{srcdir}, $template->output);
57 + $autocreated_page = 1;
60 + IkiWiki::disable_commit_hook();
61 + IkiWiki::rcs_add($tag_file);
62 + IkiWiki::rcs_commit_staged(
63 + gettext("Automatic tag page generation"),
65 + IkiWiki::enable_commit_hook();
71 $tag=~y#/#/#s; # squash dups
74 + if (defined $config{tag_autocreate} && $config{tag_autocreate} ) {
86 + return unless($autocreated_page);
87 + $autocreated_page = 0;
89 + # This refresh/saveindex is to complie the autocreated tag pages
91 + IkiWiki::saveindex();
93 + # This refresh/saveindex is to fix the Tags link
94 + # With out this additional refresh/saveindex the tag link displays ?tag
96 + IkiWiki::saveindex();
101 This uses a template called `autotagpage.tmpl`, here is my template file:
103 \[[!inline pages="link(<TMPL_VAR TAG>)" archive="yes"]]
106 A quirk I have not figured out is during the `sub change`, see my comments in the code.
107 I am not sure if that is the best way to handle it.
110 -- Jeremy Schultz <jeremy.schultz@uleth.ca>