This tutorial is only for beginers and intermediate users.
Please prvovide me a feedback on quality of the article and usefulness of this plugin.
Here, I write a step-by-step guide to writing a Smarty Modifier Plugin.

- Bimal Poudel

Normally, we store minified or coded parts of most frequently occuring contents in the database.
For example, we may write 1 for the text, First, ... and so on.
In an academic grades, p may mean, pass, f may mean fail.
Similary, F may mean femane and M may mean Male.

Okay, forget this here now.

The purpose of this short article is to make you able to write some intermediate level
Smarty plguins. And, the examples above are just a platform to start with the problem.

Again, please note that, checking the database for converting the meaning of each
encoded chunk of data is too costly for webserver in terms of memroy and performance.

If we can determine that there are very limited number of items to convert, adding a
little php function to show the full-form of the data would be a nice trick, instead
of the database lookup. And, Smarty can support this behaviour by writing a modifier
plugin.

Never worry about what are they, if you have NOT used them before.
Once, look into the folder: smarty/lib/plugins, where you can see a list of files as:
block.*.php,
compiler.*.php
function.*.php
modifier.*.php
output.*.php
shared.*.php

Each of the files you see there are the different kinds of Smarty plugins, that probably
came with normal distribution of Smarty.

However, there IS NOT something like that can convert 'F' into Female or anything else.
We need to write them ourseleves, as requried in getting the proper solutions for our
problmes.

Ok, we are going to add one more, like these files.
Please make a file named: modifier.decode.php in this folder, and put the contents
below:

/**
* We should not waste server memory.
* Hence, we are initializing the variables only after we are sure that we have something to decode.
*/
if($decode_for)
{
/**
* This is a multipurpose decoder.
* First dimension of the array is the domain of the conversion.
* Second dimesion of the array is the actual value to be decoded in the domain.
*/

Save the file, and you are done writing a new Smarty modifier plugin.
It is of intermediate level programming. It does not have any hidden complexities,
and the source code most probably tells, what it is going to do with.

This plugin is a multi-purpose in usage. It can convert the gender codes and
grade codes, using a common programming. You might have understood this already.

If you say, decode for = gender, and send 'F', it gives you 'Female'.
And, if you say, decode for = grade and send '3', it gives you 'Acceptable'.

I wrote this plugin for a small realtime usage and for training purpose.
So, I have NOT cared the issues of security in this programming.
For example, I have NOT fully supporting, decode grade for 100.
It just yells a common message only, in this case.

Now, come back to your Smarty template, where you work most frequently for data
presentation. Add some nice codes as below, in a prominent part of the codes in .tpl file:

{5|decode:'grade'}
Compile this file. And, you see: Above 80%.

Anything within { and } is normally a Smarty tag.
5 - is some fixed number.
Pipe - initiates a modifer function.
decode - calls the smarty_modifier_decode function we just wrote.
Again, the FIRST paramter in this function is 5.
Because, 5 is being modified here.
Never get confused.
grade - This selects 'decode for' in our modifier function.
Finally, the overall = {5|decode:'grade'} = prints out the result of:
smarty_modifier_decode(5, 'grade'), ultimately means, 'Above 80%'.

Now, for some advanced usage, you can later write something like:
{$grade[g].n|decode:'grade'}
Here, $grade[g].n may be a variable within smarty/section.
Here, it is a real example from one of my project's source code.

Thank you for time in learning to write Smarty Modifer function.
I love Smarty all the times, and it has been at least 4 years I am in.

Happy modifying variables.

Last edited by bimal on Wed Jun 10, 2009 7:30 pm; edited 1 time in total