add archive pages and fix some bugs

master
joey 2006-03-24 01:49:42 +00:00
parent 7b4600df3f
commit 5951c1dc82
7 changed files with 54 additions and 26 deletions

View File

@ -127,7 +127,7 @@ sub blog_list ($$) { #{{{
}
@list=sort { $pagectime{$b} <=> $pagectime{$a} } @list;
return @list if @list <= $maxitems;
return @list if ! $maxitems || @list <= $maxitems;
return @list[0..$maxitems - 1];
} #}}}
@ -149,21 +149,28 @@ sub postprocess_html_inline { #{{{
my $parentpage=shift;
my %params=@_;
if (! exists $params{show}) {
$params{show}=10;
}
if (! exists $params{pages}) {
return "";
}
if (! exists $params{archive}) {
$params{archive}="no";
}
if (! exists $params{show} && $params{archive} eq "no") {
$params{show}=10;
}
$inlinepages{$parentpage}=$params{pages};
my $template=HTML::Template->new(blind_cache => 1,
filename => "$config{templatedir}/inlinepage.tmpl");
filename => (($params{archive} eq "no")
? "$config{templatedir}/inlinepage.tmpl"
: "$config{templatedir}/inlinepagetitle.tmpl"));
my $ret="";
foreach my $page (blog_list($params{pages}, $params{show})) {
next if $page eq $parentpage;
$template->param(pagelink => htmllink($parentpage, $page));
$template->param(content => get_inline_content($parentpage, $page));
$template->param(content => get_inline_content($parentpage, $page))
if $params{archive} eq "no";
$template->param(ctime => scalar(gmtime($pagectime{$page})));
$ret.=$template->output;
}
@ -249,6 +256,8 @@ sub genrss ($$$) { #{{{
my $parentpage=shift;
my %params=@_;
return "" if exists $params{archive} && $params{archive} eq 'yes';
if (! exists $params{show}) {
$params{show}=10;
}
@ -259,6 +268,7 @@ sub genrss ($$$) { #{{{
$isblog=1;
foreach my $page (blog_list($params{pages}, $params{show})) {
next if $page eq $parentpage;
push @items, {
itemtitle => pagetitle(basename($page)),
itemurl => "$config{url}/$renderedfiles{$page}",
@ -333,6 +343,7 @@ sub render ($) { #{{{
my $page=pagename($file);
$links{$page}=[findlinks($content, $page)];
delete $inlinepages{$page};
$content=linkify($content, $page);
$content=htmlize($type, $content);
@ -453,25 +464,30 @@ FILE: foreach my $file (@files) {
next FILE;
}
}
if (exists $inlinepages{$page} &&
globlist_match($p, $inlinepages{$page})) {
debug("rendering $file, which inlines $p");
render($file);
$rendered{$file}=1;
}
}
}
}
# handle backlinks; if a page has added/removed links, update the
# pages it links to
# Handle backlinks; if a page has added/removed links, update the
# pages it links to. Also handle inlining here.
# TODO: inefficient; pages may get rendered above and again here;
# problem is the backlinks could be wrong in the first pass render
# above
if (%rendered) {
if (%rendered || @del) {
my %linkchanged;
foreach my $file (keys %rendered, @del) {
my $page=pagename($file);
foreach my $f (@files) {
my $p=pagename($f);
if (exists $inlinepages{$p} &&
globlist_match($page, $inlinepages{$p})) {
debug("rendering $f, which inlines $page");
render($f);
next;
}
}
if (exists $links{$page}) {
foreach my $link (map { bestlink($page, $_) } @{$links{$page}}) {
if (length $link &&

View File

@ -1,8 +1,18 @@
You can turn any page on this wiki into a weblog by inserting a
[[PostProcessorDirective]]. Like this:
\\[[inline pages="blog/*" show="10"]]
\\[[inline pages="blog/* !*/Discussion" show="10"]]
Any pages that match the specified [[GlobList]] (in the exaple, any
[[SubPages]] of "blog") will be part of the blog, and the newest 10
of them will appear in the page.
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"]]
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"]]

View File

@ -35,11 +35,9 @@ Bulleted list
[[WikiLink]]
[[SandBox/SubPage]] -- a page under this one.
----
This sandbox is also a [[blog]]! Any subpage of this page is automatically
This sandbox is also a [[blog]]! Any [[SubPage]] of this page is automatically
added to the blog below.
----

View File

@ -13,6 +13,11 @@ It ships with some basic templates which can be customised:
* `templates/editpage.tmpl` - Create/edit page.
* `templates/passwordmail.tmpl` - Not a html template, this is used to
generate the mail with the user's password in it.
* `templates/rsspage.tmpl` - Used for generating rss feeds for [[blog]]s.
* `templates/inlinepage.tmpl - Used for adding a page inline in a blog
page.
* `templates/inlinepagetitle.tmpl - Used for listing a page inline in a blog
archive page.
If you like, you can add these to further customise it:

View File

@ -65,9 +65,6 @@ renered, so maybe that won't be a plugin.
- Add a small form at top and bottom of a blog to allow entering
a title for a new item, that goes to a template to create the new page.
- Add a link to the end of a blog to go to the archives; this would
probably best be another cgi script, to avoid needing to generate big
static pages for little used archives.
- Should probably add params to control various rss fields like the blog
title, its author email, its copyright info, etc.
@ -110,10 +107,8 @@ you need that data..
## lists
* list of all missing pages
* list of all pages or some kind of page map (probably covered by the rss
feeds stuff above)
These could be their own static pages updated when other pages are updated.
This could be its own static pages updated when other pages are updated.
Perhaps this ties in with the pluggable renderers stuff.
## page indexes

View File

@ -0,0 +1,4 @@
<h2><TMPL_VAR PAGELINK></h2>
<p>
<i>(posted <TMPL_VAR CTIME>)</i>
</p>