my $url="$config{url}/".htmlpage($page);
- my $template=template("rsspage.tmpl", blind_cache => 1);
+ my $template=template("rsspage.tmpl", blind_cache => 1,
+ die_on_bad_params => 0);
my @items;
foreach my $p (@pages) {
itemurl => "$config{url}/$renderedfiles{$p}",
itempubdate => date_822($pagectime{$p}),
itemcontent => absolute_urls(get_inline_content($p, $page), $url),
+ page => $p, # used by category adding code in tag plugin
} if exists $renderedfiles{$p};
}
items => \@items,
);
+ foreach my $id (keys %{$hooks{pagetemplate}}) {
+ $hooks{pagetemplate}{$id}{call}->(
+ page => $page,
+ destpage => $page,
+ template => $template,
+ );
+ }
+
return $template->output;
} #}}}
GetOptions("tagbase=s" => \$IkiWiki::config{tagbase});
} #}}}
+sub tagpage ($) { #{{{
+ my $tag=shift;
+
+ if (exists $IkiWiki::config{tagbase} &&
+ defined $IkiWiki::config{tagbase}) {
+ $tag=$IkiWiki::config{tagbase}."/".$tag;
+ }
+
+ return $tag;
+} #}}}
+
sub preprocess (@) { #{{{
if (! @_) {
return "";
$tags{$page} = [];
foreach my $tag (keys %params) {
- if (exists $IkiWiki::config{tagbase} &&
- defined $IkiWiki::config{tagbase}) {
- $tag=$IkiWiki::config{tagbase}."/".$tag;
- }
push @{$tags{$page}}, $tag;
# hidden WikiLink
- push @{$IkiWiki::links{$page}}, $tag;
+ push @{$IkiWiki::links{$page}}, tagpage($tag);
}
return "";
my $template=$params{template};
$template->param(tags => [
- map { link => IkiWiki::htmllink($page, $destpage, $_) },
- @{$tags{$page}}
+ map {
+ link => IkiWiki::htmllink($page, $destpage, tagpage($_))
+ }, @{$tags{$page}}
]) if exists $tags{$page} && @{$tags{$page}} && $template->query(name => "tags");
+
+ if ($template->query(name => "items")) {
+ # It's an rss template. Modify each item in the feed,
+ # adding any categories based on the page for that item.
+ foreach my $item (@{$template->param("items")}) {
+ my $p=$item->{page};
+ if (exists $tags{$p} && @{$tags{$p}}) {
+ $item->{categories}=[];
+ foreach my $tag (@{$tags{$p}}) {
+ push @{$item->{categories}}, {
+ category => $tag,
+ };
+ }
+ }
+ }
+ }
} # }}}
1
* Add getopt hook type, this allows plugins to add new command-line options.
* Add --tagbase option to tag plugin.
* Add exclude option in setup files, works same as --exclude.
+ * Put categories in rss feeds for tagged items.
- -- Joey Hess <joeyh@debian.org> Fri, 28 Jul 2006 13:47:34 -0400
+ -- Joey Hess <joeyh@debian.org> Sat, 29 Jul 2006 02:58:23 -0400
ikiwiki (1.11) unstable; urgency=low
* [[tags]]
- You can tag pages and use these tags in various ways.
+ You can tag pages and use these tags in various ways. Tags will show
+ up in the ways you'd expect, like at the bottom of pages, in blogs, and
+ in rss feeds.
* Fast compiler
The tags work the same as if you had put a (hidden) [[WikiLink]] on the page
for each tag, so you can use a [[GlobList]] to link to all pages that are
-tagged with a given tag, for example.
+tagged with a given tag, for example. The tags will also show up on blog
+entries and at the bottom of the tagged pages, as well as in rss feeds.
This plugin has a configuration option. Set --tagbase=tag and all tags will
-be located inside a "tag" subdirectory, so in the above example, the tags
-are really set to tag/tech, tag/life, and tag/linux. This is a useful way
-to avoid having to write the full path to tags, if you want to keep them
-grouped together out of the way.
+be located inside a "tag" subdirectory, This is a useful way to avoid having
+to write the full path to tags, if you want to keep them grouped together out
+of the way.
This plugin is included in ikiwiki, but is not enabled by default. If it is
enabled, you'll see a note below that this page is tagged with the "tags"
IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
-Each time a page is rendered, a [[template|templates]] is filled out.
-This hook allows modifying that template. The function is passed named
-parameters. The "page" and "destpage" parameters are the same as for a
-preprocess hook. The "template" parameter is a `HTML::Template` object that
-is the template that will be used to generate the page. The function
-can manipulate that template object.
+Each time a page (or part of a blog page, or an rss feed) is rendered, a
+[[template|templates]] is filled out. This hook allows modifying that
+template. The function is passed named parameters. The "page" and
+"destpage" parameters are the same as for a preprocess hook. The "template"
+parameter is a `HTML::Template` object that is the template that will be
+used to generate the page. The function can manipulate that template
+object.
The most common thing to do is probably to call $template->param() to add
a new custom parameter to the template. Note that in order to be robust,
Stuff still needing to be done with tags:
-* Move the pages they link to into an automatic tag/ namespace?
-* Include tag info in the RSS feed.
-* Technorati tag support?
+* It's unfortunate that the rss category (tag) support doesn't include
+ a domain="" attribute in the category elements. That would let readers
+ know how to follow back to the tag page in the wiki. However, the domain
+ attribute is specified to be the base url, to which the category is just
+ appended. So there's no way to add ".html", so the url won't be right.
+
+ This is one good argument for changing ikiwiki so that pages are all
+ dir/index.html, then a link to just "dir" works.
<TMPL_LOOP NAME="ITEMS">
<item>
<title><TMPL_VAR ITEMTITLE ESCAPE=HTML></title>
- <TMPL_IF NAME="ITEMGUID">
- <guid isPermaLink="false"><TMPL_VAR ITEMGUID></guid>
- <TMPL_ELSE>
<guid><TMPL_VAR ITEMURL></guid>
- </TMPL_IF>
<link><TMPL_VAR ITEMURL></link>
+ <TMPL_IF NAME="CATEGORIES">
+ <TMPL_LOOP NAME="CATEGORIES">
+ <category><TMPL_VAR NAME=CATEGORY></category>
+ </TMPL_LOOP>
+ </TMPL_IF>
<pubDate><TMPL_VAR ITEMPUBDATE></pubDate>
<description><![CDATA[<TMPL_VAR ITEMCONTENT>]]></description>
</item>