Konstrukt::Doc::FunctionPlugins - Using plugins to add dynamics to your web page
I will only give a brief overview of some of the existing "low level" plugins. For more detailed information about all of the plugins and their configuration take a look at the manual pages of each plugin.
These "low level" plugins perform rather basic tasks and will be used to add some logic to the presentation/templates.
There are also "high level" plugins, which represent complex applications that can be easily and seamlessly integrated into your web site.
If the existing plugins don't offer the funktionality you need, you usually would implement your own application logic as a plugin.
captcha: Put captchas in your forms easily. You can then easily check the answer in your perl code.
Usage:
<!-- the easy way --> <& captcha / &>
or
<!-- defining your own settings that may differ from the defaults --> <& captcha type="text" template="/templates/captcha/text.template" / &>
Result: (Something like this)
<script type="text/javascript"> var enctext = "%50%0A%3A%21%44%38%4C%0C%0D%0E%31%6C%13%2F%0D%12%18%00%3C%30%6E%2D%02%11%1B%06%26%73%11%38%15%12%09%5E%76%39%58%28%08%07%02%41%74%32%5D%2D%1F%11%51%41%2C%29%5D%6E%4C%14%0D%0F%21%34%0C%6E%5D%16%06%01%23%73%11%63%52%68"; var key = "lcTQ1Llb"; function xor_enc(text, key) { var result = ''; for(i = 0; i < text.length; i++) result += String.fromCharCode(key.charCodeAt(i % key.length) ^ text.charCodeAt(i)); return result; } document.write(xor_enc(unescape(enctext), key)); </script> <noscript> <label>Antispam:</label> <div> <p>Please type the text '1tjbw' into this field:</p> <input name="captcha_answer" /> </div> </noscript> <input name="captcha_hash" type="hidden" value="3452c4fb13505c5ffa256f2352851ed2b9286af70c3f9ed65e3e888690e1ee69" />
date: Displays the current date. Mainly a simple demonstration plugin.
<& date / &>
Result:
April 23, 2006 - 10:45:16
diff: Print out an XHTML table with the difference between two texts.
<& diff &> <$ left $> 1 2 3 <$ / $> <$ right $> 1 3 <$ / $> <& / &>
<!-- set another amount of "context" lines --> <& diff context="2" &> ... <& / &>
<!-- define a header for the columns --> <& diff left_header="text a" right_header="text b" &> ... <& / &>
A table showing the difference between the two texts.
env: Access to the environment variables.
<!-- set value --> <& env var="var_name" set="value" / &> <!-- print out value --> <& env var="var_name" / &>
<!-- set value --> <!-- print out value --> value
formvalidator: HTML form validator. You can then easily check the correctness of the input in your perl code.
<!-- add form validation code to your page --> <& formvalidator form="some_dialogue.form" / &>
<!-- the same but explicitly define the JS files --> <& formvalidator form="/some/dialogue.form" script="/formvalidator/formvalidator.js" strings="/formvalidator/formvalidator_strings.js" / &>
<!-- add form validation code to your page --> <script type="text/javascript" src="/formvalidator/formvalidator.js"></script> <script type="text/javascript" src="/formvalidator/formvalidator_strings.js"></script> <script type="text/javascript"> <!-- JS definitions of your form ... --> </script>
if: Conditional blocks.
<!-- will put out "elsif1" --> <& if condition="0" &> <$ then $>then<$ / $> <$ elsif condition="1" $>elsif1<$ / $> <$ elsif condition="1" $>elsif2<$ / $> <$ else $>else<$ / $> <& / &> <!-- shortcut, when only using "then" and no elsif or else --> <!-- will put out "The condition is true!" --> <& if condition="2 > 1" &> The condition is true! <& / &>
<!-- will put out "elsif1" --> elsif1 <!-- shortcut, when only using "then" and no elsif or else --> <!-- will put out "The condition is true!" --> The condition is true!
kill: Remove content from a website.
We will never <& kill &>agree that we always <& / &>do censoring!
We will never do censoring!
perl: Hide email addresses from SPAM harvesters.
<& mail::obfucator name="John Doe" mail="john@doe.com" / &>
<!-- used to decrypt the email address --> <script type="text/javascript"> <!-- function xor_enc(text, key) { var result = ''; for(i = 0; i < text.length; i++) result += String.fromCharCode(key.charCodeAt(i % key.length) ^ text.charCodeAt(i)); return result; } // --> </script> <script type="text/javascript"> <!-- document.write(xor_enc(unescape('encrypted link'), 'key to decrypt')); --> </script> <noscript> John Doe: john<img src="/gfx/layout/s.gif" alt="> add @-character here <" />doe.com </noscript>
param: Displays the value of a specified HTTP parameter.
<& param key="param_name" &>default value if not defined<& / &>
Result: (when invoked like: /page.html?param_name=foo)
foo
perl: Embedding perl code in your pages/templates.
<& perl &>print "foo"<& / &>
perlvar: Access to Perl variables
<!-- set value --> <& perlvar var="$Foo::Bar" set="baz"/ &> <!-- print out value --> <& perlvar var="$Foo::Bar" / &> <& perlvar var="undef" &>this default will be used<& / &>
<!-- set value --> <!-- print out value --> baz this default will be used
sortlines: Sort all lines of contained plaintext
<& sortlines &> some <!-- comments --> unsorted lines <!-- will be put --> here <!-- on top of the list --> <& / &>
<!-- comments --> <!-- will be put --> <!-- on top of the list --> here lines some unsorted
sql: Perform SQL queries. Usually combined with templates to display the results.
<!-- put query results into a template using the dbi default settings defined in your konstrukt.settings see the Konstrukt::DBI documentation for the configuration of the default settings --> <& sql query="SELECT * FROM some_table" template="list_layout.template" / &> <!-- you must have a list <+@ sql @+> in your template file to which the results are passed. the fields inside the list should be named like the columns in your query. -->
<!-- but you may also define the listname yourself --> <& sql query="SELECT * FROM some_table" template="list_layout.template" list="some_list_name" / &> <!-- then you should have a list <+@ some_list_name @+> in your template file. -->
<!-- using custom connection settings --> <& sql query="..." template="..." source="dbi_dsn" user="username" pass="password" / &>
<!-- some query that won't return result data --> <& sql query="DELETE FROM some_table WHERE id=23" / &>
depends ;)
svar: Access to session values.
<!-- set value --> <& svar var="var_name" set="value "/ &> <!-- print out value --> <& svar var="var_name" / &>
tags: Tagging plugin.
Using the perl interface you can set the tags for some objects.
<!-- display all tags as a cloud --> <& tags template="/tags/cloud.template" limit="30" order="alpha|count" / &>
<!-- display all tags for a specified plugin. limit, order and template are also applicable here --> <& tags plugin="blog|image|..." / &>
<!-- list tags for a specified entry only. show, limit, order are ignored. the template attribute is applicable --> <& tags plugin="blog" entry="42" / &>
Tags: <a href="?action=filter;tags=bar">bar</a>, <a href="?action=filter;tags=foo">foo</a>, ...
template: Konstrukt templating engine.
For a description see above or at the manual page of this plugin.
upcase: Convert all text into upper case. Also mainly a demonstration plugin with no particular use...
<& upcase &>upper case<& / &>
UPPER CASE
uriencode: URI-encode the text.
<& uriencode &>Some Text<& / &> <& uriencode encode="all" &>Some Text<& / &>
Some%20Text %53%6F%6D%65%20%54%65%78%74
Copyright 2006 Thomas Wittek (mail at gedankenkonstrukt dot de). All rights reserved.
This document is free software. It is distributed under the same terms as Perl itself.
Next: Konstrukt::Doc::ApplicationPlugins
Previous: Konstrukt::Doc::Templating
Parent: Konstrukt::Doc
See also: Konstrukt::Doc::PluginList
To install Konstrukt, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Konstrukt
CPAN shell
perl -MCPAN -e shell install Konstrukt
For more information on module installation, please visit the detailed CPAN module installation guide.