The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Konstrukt::Doc::FunctionPlugins - Using plugins to add dynamics to your web page

DESCRIPTION

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.

"LOW LEVEL" PLUGINS: FUNCTIONS

captcha

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

date: Displays the current date. Mainly a simple demonstration plugin.

Usage:

        <& date / &>

Result:

        April 23, 2006 - 10:45:16

diff

diff: Print out an XHTML table with the difference between two texts.

Usage:

        <& diff &>
                <$ left $>
                1
                2
                3
                <$ / $>
                <$ right $>
                1
                3
                <$ / $>
        <& / &>

or

        <!-- set another amount of "context" lines -->
        <& diff context="2" &>
                ...
        <& / &>

or

        <!-- define a header for the columns -->
        <& diff left_header="text a" right_header="text b" &>
                ...
        <& / &>
        

Result:

A table showing the difference between the two texts.

env

env: Access to the environment variables.

Usage:

        <!-- set value -->
        <& env var="var_name" set="value" / &>

        <!-- print out value -->
        <& env var="var_name" / &>

Result:

        <!-- set value -->
        
        <!-- print out value -->
        value

formvalidator

formvalidator: HTML form validator. You can then easily check the correctness of the input in your perl code.

Usage:

        <!-- add form validation code to your page -->
        <& formvalidator form="some_dialogue.form" / &>

or

        <!-- the same but explicitly define the JS files -->
        <& formvalidator
                form="/some/dialogue.form"
           script="/formvalidator/formvalidator.js"
           strings="/formvalidator/formvalidator_strings.js"
        / &>

Result:

        <!-- 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

if: Conditional blocks.

Usage:

        <!-- 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!
        <& / &>

Result:

        <!-- 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

kill: Remove content from a website.

Usage:

        We will never <& kill &>agree that we always <& / &>do censoring!

Result:

        We will never do censoring!

mail::obfuscator

perl: Hide email addresses from SPAM harvesters.

Usage:

        <& mail::obfucator name="John Doe" mail="john@doe.com" / &>

Result:

        <!-- 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="&gt; add @-character here &lt;" />doe.com
        </noscript>

param

param: Displays the value of a specified HTTP parameter.

Usage:

        <& param key="param_name" &>default value if not defined<& / &>

Result: (when invoked like: /page.html?param_name=foo)

        foo

perl

perl: Embedding perl code in your pages/templates.

Usage:

        <& perl &>print "foo"<& / &>

Result:

        foo

perlvar

perlvar: Access to Perl variables

Usage:

        <!-- set value -->
        <& perlvar var="$Foo::Bar" set="baz"/ &>
        
        <!-- print out value -->
        <& perlvar var="$Foo::Bar" / &>
        <& perlvar var="undef" &>this default will be used<& / &>

Result:

        <!-- set value -->
        
        <!-- print out value -->
        baz
        this default will be used

sortlines

sortlines: Sort all lines of contained plaintext

Usage:

        <& sortlines &>
                some
                <!-- comments -->
                unsorted
                lines
                <!-- will be put -->
                here
                <!-- on top of the list -->
        <& / &>

Result:

        <!-- comments -->
        <!-- will be put -->
        <!-- on top of the list -->
        here
        lines
        some
        unsorted

sql

sql: Perform SQL queries. Usually combined with templates to display the results.

Usage:

        <!-- 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. -->

or

        <!-- 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. -->

or

        <!-- using custom connection settings -->
        <& sql query="..." template="..." source="dbi_dsn" user="username" pass="password" / &>

or

        <!-- some query that won't return result data -->
        <& sql query="DELETE FROM some_table WHERE id=23" / &>

Result:

        depends ;)

svar

svar: Access to session values.

Usage:

        <!-- set value -->
        <& svar var="var_name" set="value "/ &>
        
        <!-- print out value -->
        <& svar var="var_name" / &>

Result:

        <!-- set value -->
        
        <!-- print out value -->
        value

tags

tags: Tagging plugin.

Using the perl interface you can set the tags for some objects.

Usage:

        <!-- display all tags as a cloud -->
        <& tags template="/tags/cloud.template" limit="30" order="alpha|count" / &>

or

        <!-- display all tags for a specified plugin.
             limit, order and template are also applicable here -->
        <& tags plugin="blog|image|..." / &>

or

        <!-- list tags for a specified entry only.
             show, limit, order are ignored. the template attribute is applicable -->
        <& tags plugin="blog" entry="42" / &>

Result:

        Tags: <a href="?action=filter;tags=bar">bar</a>,
        <a href="?action=filter;tags=foo">foo</a>, ...

template

template: Konstrukt templating engine.

For a description see above or at the manual page of this plugin.

upcase

upcase: Convert all text into upper case. Also mainly a demonstration plugin with no particular use...

Usage:

        <& upcase &>upper case<& / &>

Result:

        UPPER CASE
        

uriencode

uriencode: URI-encode the text.

Usage:

        <& uriencode &>Some Text<& / &>
        <& uriencode encode="all" &>Some Text<& / &>

Result:

        Some%20Text
        %53%6F%6D%65%20%54%65%78%74

AUTHOR

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.

SEE ALSO

Next: Konstrukt::Doc::ApplicationPlugins

Previous: Konstrukt::Doc::Templating

Parent: Konstrukt::Doc

See also: Konstrukt::Doc::PluginList