as named parameters as well. Whatever the function returns goes onto the
page in place of the directive.
+### Error handing
+
+While a plugin can call ikiwiki's error routine for a fatal error, for
+errors that aren't intended to halt the entire wiki build, including bad
+parameters passed to a [[PreProcessorDirective]], etc, it's better to just
+return the error message as the output of the plugin.
+
+### Html issues
+
+Note that if [[HTMLSanitization]] is enabled, html in
+[[PreProcessorDirective]] output is sanitised, which may limit what your
+plugin can do. Also, the rest of the page content is not in html format at
+preprocessor time. Text output by a preprocessor directive will be passed through markdown along with the rest of the page.
+
## Other types of hooks
Beyond PreProcessorDirectives, Other types of hooks that can be used by plugins include:
### checkconfig
- IkiWiki::hook(type => "delete", id => "foo", call => \&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. It's ok for
-the function to call IkiWiki::error if something isn't configured right.
+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 function is passed no values. It's ok for the function to call IkiWiki::error if something isn't configured right.
### delete
Each time ikiwiki renders a change or addition (but not deletion) of a page to the wiki, the referenced function is called, and passed the name of the source file that was rendered.
-## Error handing in plugins
+### cgi
-While a plugin can call ikiwiki's error routine for a fatal error, for
-errors that aren't intended to halt the entire wiki build, including bad
-parameters passed to a [[PreProcessorDirective]], etc, it's better to just
-return the error message as the output of the plugin.
+ IkiWiki::hook(type => "cgi", id => "foo", call => \&cgi);
-## Html issues
-
-Note that if [[HTMLSanitization]] is enabled, html in
-[[PreProcessorDirective]] output is sanitised, which may limit what your
-plugin can do. Also, the rest of the page content is not in html format at
-preprocessor time. Text output by a preprocessor directive will be passed through markdown along with the rest of the page.
+Use this to hook into ikiwiki's cgi script. Each registered cgi hook is called
+in turn, and passed a CGI object. The hook should examine the parameters, and if it will handle this CGI request, output a page and terminate the program.
## Wiki configuration
it is by using the IkiWiki::add_depends function, which takes as its
parameters the page name and a [[GlobList]] of dependencies to add.
+## Page templates
+
+Plugins are mostly limited to changing the content of pages, to change the look and feel of the wiki it's generally better to use a stylesheet and [[templates]]. However, there are some hooks in the templates that plugins can use to add stuff to the wiki's UI:
+
+### Adding content to the page header
+
+Html that is added to $IkiWiki::config{headercontent} will show up in the
+header of the page. One good thing to put here is a search form.
+
## RCS plugins
ikiwiki's support for revision control systems also uses pluggable perl
modules. These are in the `IkiWiki::RCS` namespace, for example
`IkiWiki::RCS::svn`.
-Each RCS plugin must support all the IkiWiki::rcs_* functions.
+Each RCS plugin must support all the IkiWiki::rcs\_* functions.
See IkiWiki::RCS::Stub for the full list of functions. It's ok if
-rcs_getctime does nothing except for throwing an error.
+rcs\_getctime does nothing except for throwing an error.