CINXE.COM

plugin:function [DokuWiki]

<!DOCTYPE html> <html lang="en" dir="ltr" class="no-js"> <head> <meta charset="utf-8" /> <title>plugin:function [DokuWiki]</title> <meta name="generator" content="DokuWiki"/> <meta name="theme-color" content="#008800"/> <meta name="robots" content="index,follow"/> <meta name="keywords" content="plugin,function"/> <link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="DokuWiki"/> <link rel="start" href="/"/> <link rel="contents" href="/plugin:function?do=index" title="Sitemap"/> <link rel="manifest" href="/lib/exe/manifest.php" crossorigin="use-credentials"/> <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/feed.php"/> <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=plugin"/> <link rel="edit" title="Edit this page" href="/plugin:function?do=edit"/> <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/plugin:function"/> <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/plugin:function"/> <link rel="canonical" href="https://www.dokuwiki.org/plugin:function"/> <link rel="stylesheet" href="/lib/exe/css.php?t=dokuwiki&amp;tseed=7ae64dbeb6443493d1676fcfa66176f2"/> <script >var NS='plugin';var JSINFO = {"plugins":{"edittable":{"default columnwidth":""}},"id":"plugin:function","namespace":"plugin","ACT":"show","useHeadingNavigation":0,"useHeadingContent":0};(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" defer="defer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.14.1/jquery-ui.min.js" defer="defer"></script> <script src="/lib/exe/js.php?t=dokuwiki&amp;tseed=7ae64dbeb6443493d1676fcfa66176f2&amp;lang=en" defer="defer"></script> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="shortcut icon" href="/lib/tpl/dokuwiki/images/favicon.ico" /> <link rel="apple-touch-icon" href="/lib/tpl/dokuwiki/images/apple-touch-icon.png" /> <meta name="verify-v1" content="OVxl3gsCv2MhZqh1cBQyl0JytWXSwXMjyvwc+4w3WtA=" /> <meta name="google-site-verification" content="YhTVK69hW94ZXUtc2zSLPxTkZKbZIn0zK67mz5WQB-E" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-83791-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-83791-1', { 'anonymize_ip': true }); </script> </head> <body> <div id="dokuwiki__site"><div id="dokuwiki__top" class="site dokuwiki mode_show tpl_dokuwiki showSidebar hasSidebar"> <!-- ********** HEADER ********** --> <header id="dokuwiki__header"><div class="pad group"> <div class="headings group"> <ul class="a11y skip"> <li><a href="#dokuwiki__content">skip to content</a></li> </ul> <h1 class="logo"><a href="/start" accesskey="h" title="Home [h]"><img src="/lib/tpl/dokuwiki/images/logo.png" width="64" height="64" alt="" /><span>DokuWiki</span></a></h1> <p class="claim">It's better when it's simple</p> </div> <div class="tools group"> <!-- USER TOOLS --> <div id="dokuwiki__usertools"> <h3 class="a11y">User Tools</h3> <ul> <li class="action login"><a href="/plugin:function?do=login&amp;sectok=" title="Log In" rel="nofollow"><span>Log In</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg></a></li> </ul> </div> <!-- SITE TOOLS --> <div id="dokuwiki__sitetools"> <h3 class="a11y">Site Tools</h3> <form action="/start" method="get" role="search" class="search doku_form" id="dw__search" accept-charset="utf-8"><input type="hidden" name="do" value="search" /><input type="hidden" name="id" value="plugin:function" /><div class="no"><input name="q" type="text" class="edit" title="[F]" accesskey="f" placeholder="Search" autocomplete="on" id="qsearch__in" value="" /><button value="1" type="submit" title="Search">Search</button><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form> <div class="mobileTools"> <form action="/doku.php" method="get" accept-charset="utf-8"><div class="no"><input type="hidden" name="id" value="plugin:function" /><select name="do" class="edit quickselect" title="Tools"><option value="">Tools</option><optgroup label="Page Tools"><option value="edit">Edit this page</option><option value="revisions">Old revisions</option><option value="backlink">Backlinks</option></optgroup><optgroup label="Site Tools"><option value="recent">Recent Changes</option><option value="media">Media Manager</option><option value="index">Sitemap</option></optgroup><optgroup label="User Tools"><option value="login">Log In</option></optgroup></select><button type="submit">&gt;</button></div></form> </div> <ul> <li class="action recent"><a href="/plugin:function?do=recent" title="Recent Changes [r]" rel="nofollow" accesskey="r">Recent Changes</a></li><li class="action media"><a href="/plugin:function?do=media&amp;ns=plugin" title="Media Manager" rel="nofollow">Media Manager</a></li><li class="action index"><a href="/plugin:function?do=index" title="Sitemap [x]" rel="nofollow" accesskey="x">Sitemap</a></li> </ul> </div> </div> <!-- BREADCRUMBS --> <div class="breadcrumbs"> <div class="trace"><span class="bchead">Trace:</span> <span class="bcsep">•</span> <span class="curid"><bdi><a href="/plugin:function" class="breadcrumbs" title="plugin:function">function</a></bdi></span></div> </div> <hr class="a11y" /> </div></header><!-- /header --> <div class="wrapper group"> <!-- ********** ASIDE ********** --> <nav id="dokuwiki__aside" aria-label="Sidebar"><div class="pad aside include group"> <h3 class="toggle">Sidebar</h3> <div class="content"><div class="group"> <p> <strong>Learn about DokuWiki</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/features" class="wikilink1" title="features" data-wiki-id="features">Features</a> &amp; <a href="/blogroll" class="wikilink1" title="blogroll" data-wiki-id="blogroll">reviews</a> </div> </li> <li class="level1"><div class="li"> <a href="/install" class="wikilink1" title="install" data-wiki-id="install">Installation guide</a></div> </li> <li class="level1"><div class="li"> <a href="/manual" class="wikilink1" title="manual" data-wiki-id="manual">User manual</a> &amp; <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a></div> </li> <li class="level1"><div class="li"> <a href="/changes" class="wikilink1" title="changes" data-wiki-id="changes">Release notes</a></div> </li> <li class="level1"><div class="li"> <a href="/faq" class="wikilink1" title="faq" data-wiki-id="faq">FAQ</a></div> </li> </ul> <p> <strong>Advanced Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/extensions" class="wikilink1" title="extensions" data-wiki-id="extensions">Extensions</a></div> </li> <li class="level1"><div class="li"> <a href="/development" class="wikilink1" title="development" data-wiki-id="development">Development manual</a></div> </li> </ul> <p> <strong>Corporate Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/faq:support" class="wikilink1" title="faq:support" data-wiki-id="faq:support">Get support</a></div> </li> <li class="level1"><div class="li"> <a href="/donate" class="wikilink1" title="donate" data-wiki-id="donate">Donations</a></div> </li> </ul> <p> <strong>Our Community</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/teams:getting_involved" class="wikilink1" title="teams:getting_involved" data-wiki-id="teams:getting_involved">Get involved</a></div> </li> <li class="level1"><div class="li"> <a href="/dokuinstall" class="wikilink1" title="dokuinstall" data-wiki-id="dokuinstall">Users</a></div> </li> <li class="level1"><div class="li"> <a href="http://forum.dokuwiki.org" class="urlextern" title="http://forum.dokuwiki.org">User forum</a></div> </li> <li class="level1"><div class="li"> <a href="/mailinglist" class="wikilink1" title="mailinglist" data-wiki-id="mailinglist">Development mailinglist</a></div> </li> </ul> <hr /> <p> Follow us on <a href="https://phpc.social/@dokuwiki" class="urlextern" title="https://phpc.social/@dokuwiki">Mastodon</a> and other <a href="/social" class="wikilink1" title="social" data-wiki-id="social">social networks</a>. </p> <p> <a href="/privacy" class="wikilink1" title="privacy" data-wiki-id="privacy">Our Privacy Policy</a> </p> </div></div> </div></nav><!-- /aside --> <!-- ********** CONTENT ********** --> <main id="dokuwiki__content"><div class="pad group"> <div class="pageId"><span>plugin:function</span></div> <div class="page group"> <!-- wikipage start --> <!-- TOC START --> <div id="dw__toc" class="dw__toc"> <h3 class="toggle">Table of Contents</h3> <div> <ul class="toc"> <li class="level1"><div class="li"><a href="#function_plugin">function Plugin</a></div> <ul class="toc"> <li class="level2"><div class="li"><a href="#installation">Installation</a></div></li> <li class="level2"><div class="li"><a href="#examples_usage">Examples/Usage</a></div></li> <li class="level2"><div class="li"><a href="#syntax">Syntax</a></div></li> <li class="level2"><div class="li"><a href="#configuration_and_settings">Configuration and Settings</a></div></li> <li class="level2"><div class="li"><a href="#development">Development</a></div></li> <li class="level2"><div class="li"><a href="#faq">FAQ</a></div></li> <li class="level2"><div class="li"><a href="#discussion">Discussion</a></div></li> </ul></li> </ul> </div> </div> <!-- TOC END --> <h1 class="sectionedit1" id="function_plugin">function Plugin</h1> <div class="level1"> <div class="pluginrepo_entry"><div class="usageInfo"><div class="compatibility"><p class="label">Compatible with DokuWiki</p><p>Angua, Binky, Hrun</p></div><ul class="actions"><li><a class="download" href="https://github.com/TomCafferty/plugin-function/zipball/master">Download</a></li><li><a class="bugs" href="https://github.com/TomCafferty/plugin-function/issues">Report bugs</a></li></ul><div class="clearer"></div></div><div class="mainInfo"><p class="description"><a class="media" href="/plugins"><img alt="plugin" class="medialeft" src="/lib/plugins/pluginrepo/images/dwplugin.png" width="60" height="60" /></a> Run a php function from a set of configured functions</p></div><div class="metaInfo"><dl><dt>Last updated on</dt><dd>2013-06-08</dd><dt>Provides</dt><dd><a href="/plugins?plugintype=1#extension__table" class="wikilink1" title="List all Syntax plugins">Syntax</a></dd><dt>Repository</dt><dd><a class="urlextern" href="https://github.com/TomCafferty/plugin-function/">Source</a></dd></dl></div><div class="moreInfo"><div class="notify"><p>This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.</p></div><p class="similar">Similar to <a href="/plugin:phpinc" class="wikilink1" title="plugin:phpinc" data-wiki-id="plugin:phpinc">phpinc</a></p><p class="tags">Tagged with <a href="/plugins?plugintag=php#extension__table" class="wikilink1" title="List all plugins with this tag">php</a></p></div><div class="authorInfo"><strong>By <a href="mailto:tcafferty%20%5Bat%5D%20glocalfocal%20%5Bdot%5D%20com" class="mail" title="tcafferty [at] glocalfocal [dot] com">tom_c</a></strong><ul><li><a href="/plugin:eventline" class="wikilink1" title="plugin:eventline" data-wiki-id="plugin:eventline">eventline</a></li> <li><a href="/plugin:tableplot" class="wikilink1" title="plugin:tableplot" data-wiki-id="plugin:tableplot">tableplot</a></li> <li><a href="/plugin:table2csv" class="wikilink1" title="plugin:table2csv" data-wiki-id="plugin:table2csv">table2csv</a></li> <li><a href="/plugin:sqlraw" class="wikilink1" title="plugin:sqlraw" data-wiki-id="plugin:sqlraw">sqlraw</a></li> <li><a href="/plugin:colorbox" class="wikilink1" title="plugin:colorbox" data-wiki-id="plugin:colorbox">colorbox</a></li> <li><a href="/plugin:geonav" class="wikilink1" title="plugin:geonav" data-wiki-id="plugin:geonav">geonav</a></li> </ul></div></div> <p> This plugin will run a specified php function from a set of php functions configured for use with this plugin. </p> </div> <div class="secedit editbutton_section editbutton_1"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[function Plugin] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="function_plugin" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="1-653" /><button type="submit" title="function Plugin">Edit</button></div></form></div> <h2 class="sectionedit2" id="installation">Installation</h2> <div class="level2"> <p> Search and install the plugin using the <a href="/plugin:extension" class="wikilink1" title="plugin:extension" data-wiki-id="plugin:extension">Extension Manager</a>. Refer to <a href="/plugins" class="wikilink1" title="plugins" data-wiki-id="plugins">Plugins</a> on how to install plugins manually. </p> </div> <div class="secedit editbutton_section editbutton_2"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Installation] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="installation" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="654-818" /><button type="submit" title="Installation">Edit</button></div></form></div> <h2 class="sectionedit3" id="examples_usage">Examples/Usage</h2> <div class="level2"> <p> Two sample functions are included called <code>/functions/helloWorld.php</code> and <code>/functions/anotherhelloWorld.php</code>. To use add the following plugin syntax to a wiki page. No configuration changes are needed to run the sample. </p> <pre class="code">&lt;function=file2?0=That&#039;s&amp;1=All&amp;2=Folks!&amp;num=3&gt; &lt;function=file3&gt; &lt;function=file2?0=That&#039;s&amp;1=All&amp;2=Folks!&amp;num=3&gt;</pre> <p> The example passes 4 parameters to the invoked function, invokes a different function with no parameters, and then calls the first function again. </p> <p> Parameters are passed as array elements. The example shows how the invoked function typecasts the last parameter to be used as an integer. </p> <p> Parameters are not required. The simplest usage is to invoke a function with no parameters. </p> <p> Examples can be seen at <a href="http://clean.glocalfocal.com/doku.php?id=start" class="urlextern" title="http://clean.glocalfocal.com/doku.php?id=start">Plugin Examples Site</a> </p> </div> <div class="secedit editbutton_section editbutton_3"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Examples/Usage] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="examples_usage" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="819-1673" /><button type="submit" title="Examples/Usage">Edit</button></div></form></div> <h2 class="sectionedit4" id="syntax">Syntax</h2> <div class="level2"> <p> Basic syntax: </p> <pre class="code">&lt;function=name&gt;</pre> <ul> <li class="level1"><div class="li"> <em>name</em> — pick a name from the /conf/default.php file </div> </li> <li class="level2"><div class="li"> ?parameter_name=value_1&amp;parameter_name_x=value_x (optional parameters)</div> </li> </ul> <p> Use of &lt;function=name&gt; is all that is required. If your function requires parameters these can be supplied by using a “?” after the function name and providing the parameters as id=value. Parameters are separated by a “&amp;” symbol. </p> </div> <div class="secedit editbutton_section editbutton_4"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Syntax] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="syntax" /><input type="hidden" name="codeblockOffset" value="1" /><input type="hidden" name="range" value="1674-2112" /><button type="submit" title="Syntax">Edit</button></div></form></div> <h2 class="sectionedit5" id="configuration_and_settings">Configuration and Settings</h2> <div class="level2"> <ol> <li class="level1"><div class="li"> Add a file containing the php function into the /functions folder. The main function must be called defined as</div> </li> </ol> <pre class="code">$thisfunction = function($params) { ..... }; </pre> <ol> <li class="level1"><div class="li"> Add a configuration parameter in /conf/default.php that contains a name to identify the function file and set it equal to the name of the file. No path information is required.</div> </li> <li class="level1"><div class="li"> You can add a function description in /lang/../settings.php. This will show up in the admin configuration panel for the plugin.</div> </li> </ol> </div> <div class="secedit editbutton_section editbutton_5"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Configuration and Settings] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="configuration_and_settings" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="2113-2681" /><button type="submit" title="Configuration and Settings">Edit</button></div></form></div> <h2 class="sectionedit6" id="development">Development</h2> <div class="level2"> </div> <h4 id="change_log">Change Log</h4> <div class="level4"> <ul class="rss"><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/1c9dd60de63694a141e79ba9a0fe477474713c5b" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/1c9dd60de63694a141e79ba9a0fe477474713c5b">Merge branch &#039;master&#039; of https://github.com/TomCafferty/plugin-function</a> (2013-11-28 17:50)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/f5d0b3dde7880cfa781116ad05fb62a88faf42cb" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/f5d0b3dde7880cfa781116ad05fb62a88faf42cb">Correct example file</a> (2013-11-28 17:39)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/1e5164c8bc9b96661360035c8ef19d51db42266f" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/1e5164c8bc9b96661360035c8ef19d51db42266f">Delete style.css</a> (2013-08-17 04:04)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/27c06f21eab43b641a70b304f00ed2163cffb849" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/27c06f21eab43b641a70b304f00ed2163cffb849">add ability to run two different functions</a> (2013-06-08 16:00)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/e87501d01378c9644d2aedb28806de7ddee0d7ad" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/e87501d01378c9644d2aedb28806de7ddee0d7ad">allow multiple calls to same function without redeclaration</a> (2012-12-27 01:10)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/ded2ccabb5895b26f3d60d1b2cff0e1674311da2" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/ded2ccabb5895b26f3d60d1b2cff0e1674311da2">Add example text and remove tabs</a> (2012-12-24 04:26)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/da7763da763a7a09e29653317e30c504dfb8aa5d" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/da7763da763a7a09e29653317e30c504dfb8aa5d">Added parameter passing</a> (2012-12-24 04:16)</div></li><li><div class="li"><a href="https://github.com/TomCafferty/plugin-function/commit/b15ecd23597fe697a3647ffedaf120e0881d1b08" class="urlextern" title="https://github.com/TomCafferty/plugin-function/commit/b15ecd23597fe697a3647ffedaf120e0881d1b08">update for plugin info</a> (2012-11-09 04:28)</div></li></ul> </div> <h4 id="known_bugs_and_issues">Known Bugs and Issues</h4> <div class="level4"> <p> None </p> </div> <h4 id="todo_wish_list">ToDo/Wish List</h4> <div class="level4"> <p> None </p> </div> <div class="secedit editbutton_section editbutton_6"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Development] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="development" /><input type="hidden" name="codeblockOffset" value="3" /><input type="hidden" name="range" value="2682-2874" /><button type="submit" title="Development">Edit</button></div></form></div> <h2 class="sectionedit7" id="faq">FAQ</h2> <div class="level2"> <p> None </p> </div> <div class="secedit editbutton_section editbutton_7"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[FAQ] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="faq" /><input type="hidden" name="codeblockOffset" value="3" /><input type="hidden" name="range" value="2875-2897" /><button type="submit" title="FAQ">Edit</button></div></form></div> <h2 class="sectionedit8" id="discussion">Discussion</h2> <div class="level2"> <p> An example would be useful. What is this plugin for? What can you do with it? What&#039;s the advantage of calling a named php function? Is this just a different way to make a syntax plug-in, for people who know php but don&#039;t want to learn the dokuwiki syntax? – <a href="https://forum.dokuwiki.org/u/Zioth" class="interwiki iw_user" title="https://forum.dokuwiki.org/u/Zioth">Zioth</a> </p> <p> I often want to run php to query a database and output the result. These queries sometimes involve other functionality that would not be handled by the generic database plugins available. I would not want to write a plugin for each type of query I run. Also for security reasons I am reluctant to allow php to be executed on a wiki page. The phpinc plugin was close to providing this functionality but it appears to have some security issues and states that it is no longer supported. With this function plugin I can easily and I believe securely connect a php function to run on a wiki page. If the php functions are general in functionality they could be documented on the wiki for use by the users. </p> <p> I provided a simplified example as the function I am running involves interfacing with a database with specific tables. If I create a function better suited as an example I will provide it. Best regards – <a href="https://forum.dokuwiki.org/u/tom_c" class="interwiki iw_user" title="https://forum.dokuwiki.org/u/tom_c">tom_c</a> </p> <p> I noticed a problem when I was using two different functions on a single page. The run() declaration was already defined when it hit the second function call. I was able to solve this by using variable function declarations. Here is the updated render function in syntax.php and the function declaration in the example helloworld.php </p> <pre class="code syntaxphp"> function render($mode, &amp;$renderer, $indata) { global $conf; if($mode == 'xhtml'){ list($state, $data) = $indata; &nbsp; switch ($state) { case DOKU_LEXER_SPECIAL : preg_match(&quot;#^&lt;function=(.+)&gt;$#&quot;, $data, $matches); $func = $matches[1]; $a = explode('?', $func); $func = $a[0]; if (!empty($a[1])) { parse_str($a[1], $params); } else { $params = ''; } if(preg_match(&quot;#^[a-z0-9\-_ \./]+$#i&quot;, $func)) { $renderer-&gt;info['cache'] = FALSE; $filename = DOKU_PLUGIN . 'function/functions/' . $this-&gt;getConf($func); include ($filename); $renderer-&gt;doc .= $thisfunction($params); } else $renderer-&gt;doc .= $renderer-&gt;_xmlEntities($data); break; &nbsp; } return true; } &nbsp; // unsupported $mode return false; } </pre> <pre class="code helloworldphp">$thisfunction = function($params) { // Create output data $dataout='&lt;p class=&quot;cellGreen&quot;&gt;Hello World!&lt;/p&gt;'; &nbsp; $num=(int)$params['num']; $dataout .= ' The '.($num+1).' parameters were the number '.$num .' preceded by &lt;br /&gt;'; foreach ($params AS $key=&gt;$val){ if ($val != $num) $dataout.=$val.'&lt;br /&gt;'; } return $dataout; };</pre> <p> Using a variable to hold the function allows it to be overwritten for each function declaration. – <a href="https://forum.dokuwiki.org/u/millsdude" class="interwiki iw_user" title="https://forum.dokuwiki.org/u/millsdude">millsdude</a> </p> <p> Millsdude, thanks for this update! It works real nice. I incorporated it into the release. – <a href="https://forum.dokuwiki.org/u/tom_c" class="interwiki iw_user" title="https://forum.dokuwiki.org/u/tom_c">tom_c</a> </p> <p> It may be worth noting that, although DokuWiki itself <a href="/requirements" class="wikilink1" title="requirements" data-wiki-id="requirements">requires only PHP version 5.2</a>, the function plugin seems to require a more recent version. The plugin makes use of <a href="http://php.net/manual/en/functions.anonymous.php" class="urlextern" title="http://php.net/manual/en/functions.anonymous.php">anonymous function variable assignment</a>, a capability introduced in PHP version 5.3. – <a href="https://forum.dokuwiki.org/u/areeves" class="interwiki iw_user" title="https://forum.dokuwiki.org/u/areeves">areeves</a> </p> </div> <div class="secedit editbutton_section editbutton_8"><form class="button btn_secedit" method="post" action="/plugin:function"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1527718586" /><input type="hidden" name="summary" value="[Discussion] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="discussion" /><input type="hidden" name="codeblockOffset" value="3" /><input type="hidden" name="range" value="2898-" /><button type="submit" title="Discussion">Edit</button></div></form></div> <!-- wikipage stop --> </div> <div class="docInfo"><bdi>plugin/function.txt</bdi> · Last modified: <time datetime="2018-05-31T00:16:26+0200">2018-05-31 00:16</time> by <bdi>Klap-in</bdi></div> <hr class="a11y" /> </div></main><!-- /content --> <!-- PAGE ACTIONS --> <nav id="dokuwiki__pagetools" aria-labelledby="dokuwiki__pagetools__heading"> <h3 class="a11y" id="dokuwiki__pagetools__heading">Page Tools</h3> <div class="tools"> <ul> <li class="edit"><a href="/plugin:function?do=edit" title="Edit this page [e]" rel="nofollow" accesskey="e"><span>Edit this page</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg></a></li><li class="revs"><a href="/plugin:function?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o"><span>Old revisions</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg></a></li><li class="backlink"><a href="/plugin:function?do=backlink" title="Backlinks" rel="nofollow"><span>Backlinks</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg></a></li><li class="top"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t"><span>Back to top</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg></a></li> </ul> </div> </nav> </div><!-- /wrapper --> <!-- ********** FOOTER ********** --> <footer id="dokuwiki__footer"><div class="pad"> <div class="license">Except where otherwise noted, content on this wiki is licensed under the following license: <bdi><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license" class="urlextern">CC Attribution-Share Alike 4.0 International</a></bdi></div> <div class="buttons"> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license"><img src="/lib/images/license/button/cc-by-sa.png" alt="CC Attribution-Share Alike 4.0 International" /></a> <a href="https://www.dokuwiki.org/donate" title="Donate" ><img src="/lib/tpl/dokuwiki/images/button-donate.gif" width="80" height="15" alt="Donate" /></a> <a href="https://php.net" title="Powered by PHP" ><img src="/lib/tpl/dokuwiki/images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a> <a href="//validator.w3.org/check/referer" title="Valid HTML5" ><img src="/lib/tpl/dokuwiki/images/button-html5.png" width="80" height="15" alt="Valid HTML5" /></a> <a href="//jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS" ><img src="/lib/tpl/dokuwiki/images/button-css.png" width="80" height="15" alt="Valid CSS" /></a> <a href="https://dokuwiki.org/" title="Driven by DokuWiki" ><img src="/lib/tpl/dokuwiki/images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a> </div> <div style="margin-top: 2em; font-size:90%" class="dokuwiki"><div style="float:right"><a href="http://www.splitbrain.org/personal#imprint" style="float:right; text-decoration: none; color:#333">Imprint</a></div></div><!-- Include for DokuWiki site wide top bar --> <style type="text/css"> @media screen { body { padding-top: 30px; } #global__header { position: absolute; top: 0; left: 0; text-align: left; vertical-align: middle; line-height: 1.5; background-color: #333; box-shadow: 0 0 8px rgba(0,0,0,0.5); width: 100%; margin: 0; padding: 5px 20px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; white-space: nowrap; overflow: hidden; } #global__header h2 { position: absolute; left: -99999em; top: 0; overflow: hidden; display: inline; } #global__header ul, #global__header li { margin: 0; padding: 0; list-style: none; display: inline; line-height: 1.5; } #global__header a { color: #bbb; text-decoration: none; margin-right: 20px; font-size: 14px; font-weight: normal; } #global__header a:hover, #global__header a:active, #global__header a:focus { color: #fff; text-decoration: underline; } #global__header form { float: right; margin: 0 0 0 20px; } #global__header input { background-color: #333; background-image: none; border: 1px solid #bbb; color: #fff; box-shadow: none; border-radius: 2px; margin: 0; line-height: normal; padding: 1px 0 1px 0; height: auto; } #global__header input.button { border: none; color: #bbb; } #global__header input.button:hover, #global__header input.button:active, #global__header input.button:focus { color: #fff; text-decoration: underline; } } /* /@media */ @media only screen and (min-width: 601px) { /* changes specific for www.dokuwiki.org */ #dokuwiki__header { padding-top: 3em; } #dokuwiki__usertools { top: 3em; } /* changes specific for bugs.dokuwiki.org */ div#container div#showtask { top: 40px; } } /* /@media */ @media only screen and (max-width: 600px) { body { padding-top: 0; } #global__header { position: static; white-space: normal; overflow: auto; } #global__header form { float: none; display: block; margin: 0 0 .4em; } } /* /@media */ @media print { #global__header { display: none; } } /* /@media */ </style> <div id="global__header"> <h2>Global DokuWiki Links</h2> <form method="get" action="https://search.dokuwiki.org/" target="_top"> <input type="text" name="q" title="Search all DokuWiki sites at once" class="input" /> <input type="submit" title="Search all DokuWiki sites at once" value="Search" class="button" /> </form> <ul> <li><a href="https://download.dokuwiki.org" title="Download the latest release" target="_top">Download</a></li> <li><a href="https://www.dokuwiki.org" title="Read the DokuWiki documentation" target="_top">Wiki</a></li> <li><a href="https://forum.dokuwiki.org" title="Ask questions in the DokuWiki forum" target="_top">Forum</a></li> <li><a href="https://irc.dokuwiki.org" title="Check IRC chat logs or join the chat" target="_top">IRC</a></li> <li><a href="https://github.com/splitbrain/dokuwiki/issues" title="Report and track bugs" target="_top">Bugs</a></li> <li><a href="https://translate.dokuwiki.org/" title="Help translating the DokuWiki interface" target="_top">Translate</a></li> <li><a href="https://github.com/splitbrain/dokuwiki" title="Access the most recent git commits" target="_top">Git</a></li> <li><a href="https://xref.dokuwiki.org/reference/dokuwiki/" title="Cross-Reference of the DokuWiki source code" target="_top">XRef</a></li> <li><a href="https://codesearch.dokuwiki.org/" title="Search through the sources of DokuWiki, plugins and templates" target="_top">Code Search</a></li> </ul> </div> <!-- end of DokuWiki top bar include --> </div></footer><!-- /footer --> </div></div><!-- /site --> <div class="no"><img src="/lib/exe/taskrunner.php?id=plugin%3Afunction&amp;1744361837" width="2" height="1" alt="" /></div> <div id="screen__mode" class="no"></div></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10