<HTML ><HEAD ><TITLE >Componentized Templates</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="Smarty Manual" HREF="index.html"><LINK REL="UP" TITLE="Tips & Tricks" HREF="tips.html"><LINK REL="PREVIOUS" TITLE="WAP/WML" HREF="tips.wap.html"><LINK REL="NEXT" TITLE="Obfuscating E-mail Addresses" HREF="tips.obfuscating.email.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-1"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Smarty Manual</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="tips.wap.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Chapter 18. Tips & Tricks</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="tips.obfuscating.email.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="tips.componentized.templates" ></A >Componentized Templates</H1 ><P > 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, <A HREF="api.assign.html" ><TT CLASS="varname" >assign()</TT ></A > the variables and <A HREF="api.display.html" ><TT CLASS="varname" >display()</TT > </A > 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? </P ><P > You can do this by writing a custom plugin for fetching the content and assigning it to a template variable. </P ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN7691" ></A ><P ><B >Example 18-7. componentized template</B ></P ><P > <TT CLASS="filename" >function.load_ticker.php</TT > - drop file in <A HREF="variable.plugins.dir.html" > <TT CLASS="parameter" ><I >$plugins directory</I ></TT ></A > </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br /></span><span style="color: #FF8000">// setup our function for fetching stock data<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">fetch_ticker</span><span style="color: #007700">(</span><span style="color: #0000BB">$symbol</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #FF8000">// put logic here that fetches $ticker_info<br /> // from some ticker resource<br /> </span><span style="color: #007700">return </span><span style="color: #0000BB">$ticker_info</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">smarty_function_load_ticker</span><span style="color: #007700">(</span><span style="color: #0000BB">$params</span><span style="color: #007700">, &</span><span style="color: #0000BB">$smarty</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #FF8000">// call the function<br /> </span><span style="color: #0000BB">$ticker_info </span><span style="color: #007700">= </span><span style="color: #0000BB">fetch_ticker</span><span style="color: #007700">(</span><span style="color: #0000BB">$params</span><span style="color: #007700">[</span><span style="color: #DD0000">'symbol'</span><span style="color: #007700">]);<br /><br /> </span><span style="color: #FF8000">// assign template variable<br /> </span><span style="color: #0000BB">$smarty</span><span style="color: #007700">-></span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #0000BB">$params</span><span style="color: #007700">[</span><span style="color: #DD0000">'assign'</span><span style="color: #007700">], </span><span style="color: #0000BB">$ticker_info</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></TD ></TR ></TABLE ><P > <TT CLASS="filename" >index.tpl</TT > </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="programlisting" >{load_ticker symbol='SMARTY' assign='ticker'} Stock Name: {$ticker.name} Stock Price: {$ticker.price}</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ><P > See also <A HREF="language.function.include.php.html" ><TT CLASS="varname" >{include_php}</TT ></A >, <A HREF="language.function.include.html" ><TT CLASS="varname" >{include}</TT ></A > and <A HREF="language.function.php.html" ><TT CLASS="varname" >{php}</TT ></A >. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="tips.wap.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="tips.obfuscating.email.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >WAP/WML</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="tips.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Obfuscating E-mail Addresses</TD ></TR ></TABLE ></DIV ></BODY ></HTML >