aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/smarty/smarty/docs/appendixes/tips.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/smarty/smarty/docs/appendixes/tips.md')
-rw-r--r--vendor/smarty/smarty/docs/appendixes/tips.md332
1 files changed, 332 insertions, 0 deletions
diff --git a/vendor/smarty/smarty/docs/appendixes/tips.md b/vendor/smarty/smarty/docs/appendixes/tips.md
new file mode 100644
index 000000000..b0ea40cc7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/appendixes/tips.md
@@ -0,0 +1,332 @@
+Tips & Tricks {#tips}
+=============
+
+Blank Variable Handling {#tips.blank.var.handling}
+=======================
+
+There may be times when you want to print a default value for an empty
+variable instead of printing nothing, such as printing ` ` so that
+html table backgrounds work properly. Many would use an
+[`{if}`](#language.function.if) statement to handle this, but there is a
+shorthand way with Smarty, using the
+[`default`](#language.modifier.default) variable modifier.
+
+> **Note**
+>
+> "Undefined variable" errors will show an E\_NOTICE if not disabled in
+> PHP\'s [`error_reporting()`](&url.php-manual;error_reporting) level or
+> Smarty\'s [`$error_reporting`](#variable.error.reporting) property and
+> a variable had not been assigned to Smarty.
+
+
+ {* the long way *}
+ {if $title eq ''}
+  
+ {else}
+ {$title}
+ {/if}
+
+ {* the short way *}
+ {$title|default:' '}
+
+
+
+See also [`default`](#language.modifier.default) modifier and [default
+variable handling](#tips.default.var.handling).
+
+Default Variable Handling {#tips.default.var.handling}
+=========================
+
+If a variable is used frequently throughout your templates, applying the
+[`default`](#language.modifier.default) modifier every time it is
+mentioned can get a bit ugly. You can remedy this by assigning the
+variable its default value with the
+[`{assign}`](#language.function.assign) function.
+
+
+ {* do this somewhere at the top of your template *}
+ {assign var='title' value=$title|default:'no title'}
+
+ {* if $title was empty, it now contains the value "no title" when you use it *}
+ {$title}
+
+
+
+See also [`default`](#language.modifier.default) modifier and [blank
+variable handling](#tips.blank.var.handling).
+
+Passing variable title to header template {#tips.passing.vars}
+=========================================
+
+When the majority of your templates use the same headers and footers, it
+is common to split those out into their own templates and
+[`{include}`](#language.function.include) them. But what if the header
+needs to have a different title, depending on what page you are coming
+from? You can pass the title to the header as an
+[attribute](#language.syntax.attributes) when it is included.
+
+`mainpage.tpl` - When the main page is drawn, the title of "Main Page"
+is passed to the `header.tpl`, and will subsequently be used as the
+title.
+
+
+ {include file='header.tpl' title='Main Page'}
+ {* template body goes here *}
+ {include file='footer.tpl'}
+
+
+
+`archives.tpl` - When the archives page is drawn, the title will be
+"Archives". Notice in the archive example, we are using a variable from
+the `archives_page.conf` file instead of a hard coded variable.
+
+
+ {config_load file='archive_page.conf'}
+
+ {include file='header.tpl' title=#archivePageTitle#}
+ {* template body goes here *}
+ {include file='footer.tpl'}
+
+
+
+`header.tpl` - Notice that "Smarty News" is printed if the `$title`
+variable is not set, using the [`default`](#language.modifier.default)
+variable modifier.
+
+
+ <html>
+ <head>
+ <title>{$title|default:'Smarty News'}</title>
+ </head>
+ <body>
+
+
+
+`footer.tpl`
+
+
+ </body>
+ </html>
+
+
+
+Dates {#tips.dates}
+=====
+
+As a rule of thumb, always pass dates to Smarty as
+[timestamps](&url.php-manual;time). This allows template designers to
+use the [`date_format`](#language.modifier.date.format) modifier for
+full control over date formatting, and also makes it easy to compare
+dates if necessary.
+
+
+ {$startDate|date_format}
+
+
+
+This will output:
+
+
+ Jan 4, 2009
+
+
+
+
+ {$startDate|date_format:"%Y/%m/%d"}
+
+
+
+This will output:
+
+
+ 2009/01/04
+
+
+
+Dates can be compared in the template by timestamps with:
+
+
+ {if $order_date < $invoice_date}
+ ...do something..
+ {/if}
+
+
+
+When using [`{html_select_date}`](#language.function.html.select.date)
+in a template, the programmer will most likely want to convert the
+output from the form back into timestamp format. Here is a function to
+help you with that.
+
+
+ <?php
+
+ // this assumes your form elements are named
+ // startDate_Day, startDate_Month, startDate_Year
+
+ $startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
+
+ function makeTimeStamp($year='', $month='', $day='')
+ {
+ if(empty($year)) {
+ $year = strftime('%Y');
+ }
+ if(empty($month)) {
+ $month = strftime('%m');
+ }
+ if(empty($day)) {
+ $day = strftime('%d');
+ }
+
+ return mktime(0, 0, 0, $month, $day, $year);
+ }
+ ?>
+
+
+
+See also [`{html_select_date}`](#language.function.html.select.date),
+[`{html_select_time}`](#language.function.html.select.time),
+[`date_format`](#language.modifier.date.format) and
+[`$smarty.now`](#language.variables.smarty.now),
+
+WAP/WML {#tips.wap}
+=======
+
+WAP/WML templates require a php [Content-Type
+header](&url.php-manual;header) to be passed along with the template.
+The easist way to do this would be to write a custom function that
+prints the header. If you are using [caching](#caching), that won\'t
+work so we\'ll do it using the [`{insert}`](#language.function.insert)
+tag; remember `{insert}` tags are not cached! Be sure that there is
+nothing output to the browser before the template, or else the header
+may fail.
+
+
+ <?php
+
+ // be sure apache is configure for the .wml extensions!
+ // put this function somewhere in your application, or in Smarty.addons.php
+ function insert_header($params)
+ {
+ // this function expects $content argument
+ if (empty($params['content'])) {
+ return;
+ }
+ header($params['content']);
+ return;
+ }
+
+ ?>
+
+
+
+your Smarty template *must* begin with the insert tag :
+
+
+ {insert name=header content="Content-Type: text/vnd.wap.wml"}
+
+ <?xml version="1.0"?>
+ <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+
+ <!-- begin new wml deck -->
+ <wml>
+ <!-- begin first card -->
+ <card>
+ <do type="accept">
+ <go href="#two"/>
+ </do>
+ <p>
+ Welcome to WAP with Smarty!
+ Press OK to continue...
+ </p>
+ </card>
+ <!-- begin second card -->
+ <card id="two">
+ <p>
+ Pretty easy isn't it?
+ </p>
+ </card>
+ </wml>
+
+
+
+Componentized Templates {#tips.componentized.templates}
+=======================
+
+Traditionally, programming templates into your applications goes as
+follows: First, you accumulate your variables within your PHP
+application, (maybe with database queries.) Then, you instantiate your
+Smarty object, [`assign()`](#api.assign) the variables and
+[`display()`](#api.display) the template. So lets say for example we
+have a stock ticker on our template. We would collect the stock data in
+our application, then assign these variables in the template and display
+it. Now wouldn\'t it be nice if you could add this stock ticker to any
+application by merely including the template, and not worry about
+fetching the data up front?
+
+You can do this by writing a custom plugin for fetching the content and
+assigning it to a template variable.
+
+`function.load_ticker.php` - drop file in
+[`$plugins directory`](#variable.plugins.dir)
+
+
+ <?php
+
+ // setup our function for fetching stock data
+ function fetch_ticker($symbol)
+ {
+ // put logic here that fetches $ticker_info
+ // from some ticker resource
+ return $ticker_info;
+ }
+
+ function smarty_function_load_ticker($params, $smarty)
+ {
+ // call the function
+ $ticker_info = fetch_ticker($params['symbol']);
+
+ // assign template variable
+ $smarty->assign($params['assign'], $ticker_info);
+ }
+ ?>
+
+
+
+`index.tpl`
+
+
+ {load_ticker symbol='SMARTY' assign='ticker'}
+
+ Stock Name: {$ticker.name} Stock Price: {$ticker.price}
+
+
+
+See also [`{include_php}`](#language.function.include.php),
+[`{include}`](#language.function.include) and
+[`{php}`](#language.function.php).
+
+Obfuscating E-mail Addresses {#tips.obfuscating.email}
+============================
+
+Do you ever wonder how your email address gets on so many spam mailing
+lists? One way spammers collect email addresses is from web pages. To
+help combat this problem, you can make your email address show up in
+scrambled javascript in the HTML source, yet it it will look and work
+correctly in the browser. This is done with the
+[`{mailto}`](#language.function.mailto) plugin.
+
+
+ <div id="contact">Send inquiries to
+ {mailto address=$EmailAddress encode='javascript' subject='Hello'}
+ </div>
+
+
+
+> **Note**
+>
+> This method isn\'t 100% foolproof. A spammer could conceivably program
+> his e-mail collector to decode these values, but not likely\....
+> hopefully..yet \... wheres that quantum computer :-?.
+
+See also [`escape`](#language.modifier.escape) modifier and
+[`{mailto}`](#language.function.mailto).