add archive pages and fix some bugs
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 24 Mar 2006 01:49:42 +0000 (01:49 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 24 Mar 2006 01:49:42 +0000 (01:49 +0000)
IkiWiki/Render.pm
doc/blog.mdwn
doc/sandbox.mdwn
doc/sandbox/test.mdwn [moved from doc/sandbox/subpage.mdwn with 100% similarity]
doc/templates.mdwn
doc/todo.mdwn
templates/inlinepagetitle.tmpl [new file with mode: 0644]

index 8f755e8f5a79c354cb604693455a25a010dc5005..7d2e8c4ee981750ea99b5a56de4c580a539f0404 100644 (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 &&
index d300736a86b9a6feb5c673aae30a4c15d129f45d..598ad98d5a08157ac9be1456358d68b498f57206 100644 (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"]]
index 37bb6bd89cdbd01fa3c917af5ab30771bf289c9a..69876d26d50e150a094043ae860116b18d0e9bb5 100644 (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.
 
 ----
index 3521ab012eeb9e0be5c1d8fb9d6f1b9942dce908..481e555ee379a978f0da415b4c06aa93da31d605 100644 (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:
 
index f918bf156462e75ac8ba280542d9a5c8e4ab79cb..eb5aad8dccb3038362379617ecc378636b2cc3e4 100644 (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
diff --git a/templates/inlinepagetitle.tmpl b/templates/inlinepagetitle.tmpl
new file mode 100644 (file)
index 0000000..0b12fa3
--- /dev/null
@@ -0,0 +1,4 @@
+<h2><TMPL_VAR PAGELINK></h2>
+<p>
+<i>(posted <TMPL_VAR CTIME>)</i>
+</p>