aboutsummaryrefslogtreecommitdiff
path: root/doc/todo/datearchives-plugin.mdwn
blob: 8c3faf9ca82b17e97eff7ff0c0d3fa9ad524570b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
I'll be using IkiWiki primarily as a blog, so I want a way to view entries
by date. A URL of the form `/date/YYYY/MM/DD.html` (or `/date/YYYY/MM/DD/`
when using the `use_dirs` patch) should show posts from that period. ATM, I
have this:

<pre>
Index: IkiWiki/Plugin/datearchives.pm
===================================================================
--- IkiWiki/Plugin/datearchives.pm      (revision 0)
+++ IkiWiki/Plugin/datearchives.pm      (revision 0)
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+
+package IkiWiki::Plugin::datearchives;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub import { #{{{
+    hook(type => "pagetemplate", id => "datearchives", call => \&pagetemplate, scan => 1);
+} # }}}
+
+sub pagetemplate (@) { #{{{
+    my %args = @_;
+    my $dt;
+    eval {
+        use DateTime;
+        $dt = DateTime->from_epoch(epoch => $IkiWiki::pagectime{ $args{page} });
+    };
+    return if $@;
+    my $base = $config{datearchives_base} || 'date';
+    my $link = $base.'/'.$dt->strftime('%Y/%m/%d');
+    push @{$links{$args{page}}}, $link;
+    my $template = $args{template};
+       if ($template->query(name => "ctime")) {
+        $template->param(ctime => htmllink( $args{page}, $args{destpage}, $link, 0, 0,
+                                            $template->param('ctime')));
+       }
+} # }}}
+
+1
</pre>

This works (although accessing `%IkiWiki::pagectime` is not too clever), but it would be far more useful if the date pages were automatically created and populated with the relevant posts. A [[Pagespec]] works perfectly for displaying the relevant content, but we're still left with the issue of actually creating the page. What's the Right Way to do this? We could create them in the RCS working copy and check them in, or create them directly in the output directory... (I'd also like to create an option for the tags plugin to auto-create its targets in the same way). Any opinions? :-)

> Ok, first, I don't understand what your plugin does. Maybe I need to get
> some sleep, but a better explanation might help. :-) It seems to make
> links from pages to the archive pages? But I don't understand why you
> want such links .. wouldn't a sidebar with links to the available archive
> pages work better? Or something else, depending on personal preference.
> 
> Secondly, you're certianly not the first to wat to do data based archive
> pages. So far I have successfully punted the issue of creating these
> pages out of ikiwiki by pointing out that everyone wants them to be
> _different_, and suggesting people set up cron jobs or other machinery to
> generate the kinds of archives that they like. This makes me happy
> because generalizing all the possible ways people might want to do date
> based archives and somehow bolting support for creating them onto the
> size of ikiwiki seems to be a recipe for a mess. 
> 
> A few examples of ikiwiki sites with date archives:
> <http://www.golden-gryphon.com/blog/manoj/> and
> <http://roland.entierement.nu/categories/geek-en.html> --[[Joey]]

>> Yeah, it wasn't much of a description, was it? ;-) It's an attempt to emulate the style of Wordpress and other popular blog platforms, which can link a post's creation date to  YYY/MM/DD archive pages, which then list all the relevant posts. My use-case is on a blog page which in-lines (via pagespecs) recent blog posts. 

>> I agree with not adding this kind of functionality to the core. :-) I simply didn't want to have break links when I convert to IkiWiki. I guess I'll just play around with the page-creation thing myself then. Feel free to delete this from the queue. :-) --Ben

>>> Ah, I get it, I hadn't realized it was making the date into a link.
>>> No reason to delete this from the queue, it's a reasonable plugin. I
>>> might move it to the contributed plugins directory as it's a bit
>>> specialised to be included in ikiwiki though. --[[Joey]]

[[tag patch]]