X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6551c1e5609967c0c7f947fa0e9d85d24e454d37..299bb8bef3811b16d29a0e8ebb2c292c8dd11020:/doc/plugins/write.mdwn?ds=inline diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 5be90efdf..93c6d1d5c 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -38,9 +38,10 @@ the preprocessor directive. Each time the directive is processed, the referenced function (`preprocess` in the example above) is called, and is passed named parameters. A "page" parameter gives the name of the page that embedded the preprocessor -directive. All parameters included in the directive are included as named -parameters as well. Whatever the function returns goes onto the page in -place of the directive. +directive, while a "destpage" parameter gices the name of the page the +content is going to (different for inlined pages). All parameters included +in the directive are included as named parameters as well. Whatever the +function returns goes onto the page in place of the directive. ## Error handing @@ -63,12 +64,25 @@ with the rest of the page. Beyond PreProcessorDirectives, Other types of hooks that can be used by plugins include: +## getopt + + IkiWiki::hook(type => "getopt", id => "foo", call => \&getopt); + +This allows for plugins to perform their own processing of command-line +options and so add options to the ikiwiki command line. It's called during +command line processing, with @ARGV full of any options that ikiwiki was +not able to process on its own. The function should process any options it +can, removing them from @ARGV, and probably recording the configuration +settings in %IkiWiki::config. It should take care not to abort if it sees +an option it cannot process, and should just skip over those options and +leave them in @ARGV. + ## checkconfig IkiWiki::hook(type => "checkconfig", id => "foo", call => \&checkconfig); -This is useful if the plugin needs to check for, or modify ikiwiki's -configuration. It's called early in the ikiwiki startup process. The +This is useful if the plugin needs to check for or modify ikiwiki's +configuration. It's called early in the startup process. The function is passed no values. It's ok for the function to call IkiWiki::error if something isn't configured right. @@ -93,12 +107,22 @@ languages to ikiwiki. 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 the name -of the page, and a `HTML::Template` object that is the template that will -be used to generate the page. It can manipulate that template, the most -common thing to do is probably to call $template->param() to add a new -custom parameter to the template. +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, +it's a good idea to check whether the template has a variable before trying +to set it, as setting a variable that's not present is an error. + + if ($template->query(name => 'foo')) { + $template->param("foo" => "bar"); + } ## sanitize @@ -159,6 +183,23 @@ use the following hashes, using a page name as the key: it is by using the IkiWiki::add_depends function, which takes as its parameters the page name and a [[GlobList]] of dependencies to add. +# A note on generating html links + +Many plugins need to generate html links and add them to a page. This is +done by using the `IkiWiki::htmllink` function. The usual way to call +htmlllink is: + + htmllink($page, $page, $link) + +Why is $page repeated? Because if a page is inlined inside another, and a +link is placed on it, the right way to make that link is actually: + + htmllink($page, $destpage, $link) + +Here $destpage is the inlining page. A destpage parameter is passed to some +of the hook functions above; the ones that are not passed it are not used +during inlining and don't need to worry about this issue. + # RCS plugins ikiwiki's support for revision control systems also uses pluggable perl