]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/plugins/write/external.mdwn
Merge branch 'master' of ssh://git.kitenet.net/srv/git/ikiwiki.info
[git.ikiwiki.info.git] / doc / plugins / write / external.mdwn
index ca30dd229b74392c7f184e89381883ba2a5fdffa..a1a3811dc72134b2cc5fcd61fa5474b7376d2fd6 100644 (file)
@@ -8,6 +8,12 @@ written in perl, but is intended to be an example of how to write an
 external plugin in your favorite programming language. Wow us at how much
 easier you can do the same thing in your favorite language. ;-)
 
 external plugin in your favorite programming language. Wow us at how much
 easier you can do the same thing in your favorite language. ;-)
 
+There's now a second external plugin, the [[rst]] plugin, written in
+python. (Could someone convert it into a python library that can be used by
+other plugins?)
+
+[[toc ]]
+
 ## How external plugins use XML RPC
 
 While XML RPC is typically used over http, ikiwiki doesn't do that.
 ## How external plugins use XML RPC
 
 While XML RPC is typically used over http, ikiwiki doesn't do that.
@@ -43,6 +49,11 @@ to access any such global hash. To get the "url" configuration value,
 call `getvar("config", "url")`. To set it, call 
 `setvar("config", "url", "http://example.com/)`.
 
 call `getvar("config", "url")`. To set it, call 
 `setvar("config", "url", "http://example.com/)`.
 
+The `%pagestate` is a special hash with a more complex format. To access
+it, external plugins can use the `getstate` and `setstate` RPCs. To access
+stored state, call `getstate("page", "id", "key")`, and to store state,
+call `setstate("page", "id", "key", "value")`.
+
 ## Notes on function parameters
 
 The [[plugin_interface_documentation|write]] talks about functions that take
 ## Notes on function parameters
 
 The [[plugin_interface_documentation|write]] talks about functions that take
@@ -78,11 +89,14 @@ example, make an RPC call to `inject`. Pass it named parameters "name" and
 "Ikiwiki::rcs_update" and "call" is the RPC call ikiwiki will make whenever
 that function is run.
 
 "Ikiwiki::rcs_update" and "call" is the RPC call ikiwiki will make whenever
 that function is run.
 
+If the RPC call is memoizable, you can also pass a "memoize" parameter, set
+to 1.
+
 ## Limitations of XML RPC
 
 Since XML RPC can't pass around references to objects, it can't be used
 with functions that take or return such references. That means you can't
 ## Limitations of XML RPC
 
 Since XML RPC can't pass around references to objects, it can't be used
 with functions that take or return such references. That means you can't
-use XML RPC for `cgi` or `formbuilder` hooks (which are passed CGI and
+100% use XML RPC for `cgi` or `formbuilder` hooks (which are passed CGI and
 FormBuilder perl objects), or use it to call `template()` (which returns a
 perl HTML::Template object).
 
 FormBuilder perl objects), or use it to call `template()` (which returns a
 perl HTML::Template object).
 
@@ -112,7 +126,8 @@ number of calls.
 Injecting a replacement for a commonly called ikiwiki function
 could result in a lot more RPC calls than expected and slow
 eveything down. `pagetitle`, for instance, is called about 100 times
 Injecting a replacement for a commonly called ikiwiki function
 could result in a lot more RPC calls than expected and slow
 eveything down. `pagetitle`, for instance, is called about 100 times
-per page build.
+per page build. Whenever possible, you should tell ikiwiki to memoize
+injected functions.
 
 In general, use common sense, and your external plugin will probably
 perform ok.
 
 In general, use common sense, and your external plugin will probably
 perform ok.