my $page=shift;
my $glob=shift;
- # turn glob into safe regexp
- $glob=quotemeta($glob);
- $glob=~s/\\\*/.*/g;
- $glob=~s/\\\?/./g;
- $glob=~s!\\/!/!g;
-
- $page=~/^$glob$/i;
+ if ($glob =~ /^link\((.+)\)$/) {
+ my $rev = $links{$page} or return undef;
+ foreach my $p (@$rev) {
+ return 1 if lc $p eq $1;
+ }
+ return 0;
+ } elsif ($glob =~ /^backlink\((.+)\)$/) {
+ my $rev = $links{$1} or return undef;
+ foreach my $p (@$rev) {
+ return 1 if lc $p eq $page;
+ }
+ return 0;
+ } else {
+ # turn glob into safe regexp
+ $glob=quotemeta($glob);
+ $glob=~s/\\\*/.*/g;
+ $glob=~s/\\\?/./g;
+ $glob=~s!\\/!/!g;
+
+ return $page=~/^$glob$/i;
+ }
} #}}}
sub globlist_match ($$) { #{{{
You can turn any page on this wiki into a weblog by inserting a
[[PreProcessorDirective]]. Like this:
-\\[[inline pages="blog/* !*/Discussion" show="10" rootpage="blog"]]
+ \\[[inline pages="blog/* !*/Discussion" show="10" rootpage="blog"]]
Any pages that match the specified [[GlobList]] (in the example, any
[[SubPage]] of "blog") will be part of the blog, and the newest 10
If you want your blog to have an archive page listing every post ever made
to it, you can accomplish that like this:
-\\[[inline pages="blog/* !*/Discussion" archive="yes"]]
+ \\[[inline pages="blog/* !*/Discussion" archive="yes"]]
You can even create an automatically generated list of all the pages on the
wiki, with the most recently added at the top, like this:
-\\[[inline pages="* !*/Discussion" archive="yes"]]
+ \\[[inline pages="* !*/Discussion" archive="yes"]]
+
+If you want to be able to add pages to a given blog feed by tagging them,
+you can do that too. To tag a page, just make it link to a page or pages
+that represent its tags. Then use the special link() [[GlobList]] to match
+all pages that have a given tag:
+
+ \\[[inline pages="link(life)"]]
+
+Or include some tags and exclude others:
+
+ \\[[inline pages="link(debian) !link(social)"]]
Discussion pages and the SandBox:
* !SandBox !*/Discussion
+
+It's also possible to match pages that link to a given page, by writing
+"link(page)" in a globlist. Or, match pages that a given page links to, by
+writing "backlink(page)".
Note that as a side effect, dates will now be displayed using the local
timezone, not as GMT.
* More security review.
-
- -- Joey Hess <joeyh@debian.org> Thu, 1 Jun 2006 15:12:29 -0400
+ * Patch from Dr. Zini to add link() and backlink() to globlists. This allows
+ for some handy stuff like:
+ - Using links as a kind of tag; creating blog pages that list all pages
+ containing a given tag/link or not containing some other tag.
+ - Subscribing to mail notifications whenever a change is made to a page
+ that is a backlink of page foo. Ie, "Please notify me of changes in all
+ pages that link to my home page in the wiki"
+ - Locking any pages that are linked to from a particular page, so that
+ lists of locks can be exposed in the wiki.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 1 Jun 2006 20:56:58 -0400
ikiwiki (1.4) unstable; urgency=low
* [[blog]]s
- You can turn any page in the wiki into a [[blog]]. Pages with names
- matching a specified [[GlobList]] will be displayed as a weblog within
- the blog page. And an RSS feed can be generated to follow the blog.
+ You can turn any page in the wiki into a [[blog]]. Pages matching a
+ specified [[GlobList]] will be displayed as a weblog within the blog
+ page. And an RSS feed can be generated to follow the blog.
- Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples of some of
- the flexible ways that this can be used.
+ Ikiwiki's own [[TODO]], [[news]], and [[plugins]] pages are good examples
+ of some of the flexible ways that this can be used.
+
+ Note that this also includes support for tag-based blogging.
* Fast compiler