Learn about DokuWiki
Learn about DokuWiki
I created this plugin because I have long wished for a way to add data structured in a specific way to a page in a repetitive fashion. A clear example of this is adding data to a table. How about a form on that page which could ask the right questions and when submitted add the information submitted as an additional row at the end of the table.
It works loosely in the following way:
action pagemod <targetpage> <pagemod_id>
So here are the features:
<pagemod>enclosure has an id, so multiple forms can be used to update different parts of a page.
pagemod_idas the submitting form
Defining a form is done via the bureaucracy plugin, please check that for complete syntax. But here are the additions by this plugin:
<form> action pagemod <target namespace:page> <pagemod_id> <...various fields for submit...> submit </form>
To make bureaucracy use the pagemod action, you need to add action pagemod with the following parameters:
target: The target page, allowed notations:
pagemod_id: If using multiple pagemod enclosures in a page, this is to identify which enclosure to fill and include in the page.
Defining a pagemod template is done within a page with the following code:
<pagemod <pagemod_id> <params>> The wiki text will be parsed to transform tags like @@Field from form@@ or ##Field2 from form## The contents of this section are invisible and will not show up on this page. </pagemod> Some other wiki text around, that is visible again.
Or an real example for adding rows to a table:
Some more text, and a table with as last row the pagemod placeholder. ^ Table header 1 ^ Table header 2 ^ <pagemod table_adder output_before>| @@table value 1@@ | @@table value 2@@ | </pagemod>
Note: If the resulting table is later edited with EditTable Plugin, then the above pagemod code will disappear (only existing contents remain).
The pagemod enclosure starts with:
<pagemod <pagemod_id> <params>>
where the following is true:
pagemod_id: This is the id of the pagemod. The form has an pagemod_id, it will modify all the pagemod enclosures with the same id.
params: params are separated by
,and can be one of the following:
output_after: indicates that the output of the translation must come after the rewrite of the pagemod enclosure, the default is to output before the rewrite
output_before: this is the default behaviour, to output the translation before the rewrite of the pagemod enclosure
The pagemod enclosure ends with the following:
and the contents are not shown when the wiki page is viewed. Converting of the contents of the pagemod enclosure is done with the bureaucracy plugin's replacements function. So similar patterns are available.
The meta variable are some extra variables for the pagemod plugin. The meta variables values are generated by the plugin at runtime. They are the following:
@@meta.date.format.d/m/Y@@will achieve the same as
New meta information tag requests should be sent to me for implementation.
The bureaucracy plugin has some an
number field and a
hiddenautoinc which has auto incrementing counter on each succesfull submit.
In November 2014 the pagemod plugin is updated to use a helper for the pagemod action. The Bureaucracy Plugin is updated in November 2014 as well, it will load this helper automatically if used in a form. The new version of Bureaucracy supports only the new version of Pagemod.
Remark: the file
bureaucracy/actions/pagemod.php is now unused. You may remove it manually.
IMPORTANT NOTE: When you have installed these previous versions, you WILL need to UPDATE it once. This is because it installs some stuff into the bureaucracy directory, but this action doesn't happen on install, but does happen on update. To update the plugin, click “Update” in the Admin/Plugins section of your DokuWiki.
Manual installation of previous version
[wiki-root]/lib/plugins/ this plugin adds:
pagemod/ pagemod/syntax.php bureaucracy/ bureaucracy/actions/ bureaucracy/actions/pagemod.php
(note: since November 2014 no files are copied to bureaucracy plugin folder anymore)
Please report issues and requests for Pagemod Plugin at https://github.com/rendezz/dokuwiki-pagemod/issues
QUESTION: Can pagemod be triggerd conditionaly? Let's say there is a form with a yesno field. Could pagemod be called only when the yesno field is checked?
The standard pagemod helper code does not do any substitution of page names according to bureaucracy variables. I have designed a form which contains:
textbox Hnode action smg:config:@@Hnode@@ add_hwchange
the problem being that
@@Hnode@@ is interpreted as “Hnode” and not the entered value. The problem seems to lie in the helper script in
public function run. I have added a call to
$this→replace (as is done in
public function parsePagemod) just before the
resolve_pageid call. It now appears to be working.
39,40d38 < //Allow for the substitution os elements of the page name < $page_to_modify = $this->replace($page_to_modify);
An bundle of example pages is available:
======Guestbook===== ===== New Comment ===== <form> action pagemod _self add_comment fieldset "Write new comment" textbox "Name" /^((?!<\/nowiki>).)*$/ email "Email (optional)" /^((?!<\/nowiki>).)*$/ ! textarea "Comment" /^((?!<\/nowiki>).|\n)*$/ submit </form> ===== Comments ===== <pagemod add_comment output_after> //@@meta.date.format.r@@:// ^<nowiki>@@Name@@</nowiki> |<nowiki>@@Email (optional)| @@</nowiki>| |<nowiki>@@Comment@@</nowiki> || </pagemod>
— M. 2010/04/02