<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>... coding (the life) &#187; smarty</title>
	<atom:link href="http://www.marvinmarcelo.com/tag/smarty/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marvinmarcelo.com</link>
	<description>Anything about programming, and a little about me.</description>
	<lastBuildDate>Mon, 09 Jan 2012 13:44:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP code block &#8211; bringing order to chaos</title>
		<link>http://www.marvinmarcelo.com/php-code-block-bringing-order-to-chaos/</link>
		<comments>http://www.marvinmarcelo.com/php-code-block-bringing-order-to-chaos/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 02:00:48 +0000</pubDate>
		<dc:creator>Marvin</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[me stuff]]></category>
		<category><![CDATA[work related]]></category>
		<category><![CDATA[basic programming]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[ezsql]]></category>
		<category><![CDATA[grumble]]></category>
		<category><![CDATA[month-year]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smarty]]></category>

		<guid isPermaLink="false">http://www.marvinmarcelo.com/?p=1282</guid>
		<description><![CDATA[I had to come up with this post because I&#8217;ve been working on an old CMS about 3 years old (or even more) and I had been wondering why the calendar links cuts off from 2001 to 2003. Task: List &#8230; <a href="http://www.marvinmarcelo.com/php-code-block-bringing-order-to-chaos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had to come up with this post because I&#8217;ve been working on an old CMS about 3 years old (or even more) and I had been wondering why the calendar links cuts off from 2001 to 2003.</p>
<p>Task: List a year/month links from the present to the oldest published image sets.</p>
<p>Sounds easy, and I believe it is.</p>
<p>But when I checked on the existing script, this is what I got.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000088;">$month_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'January'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;2&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'February'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'March'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;4&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'April'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;5&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'May'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;6&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'June'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;7&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'July'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;8&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'August'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;9&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'September'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;10&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'October'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;11&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'November'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;12&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'December'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'y2day'</span><span style="color: #339933;">,</span><span style="color: #000088;">$y2day</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span><span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$month_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>year<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000ff;">'2000'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$m2day</span> <span style="color: #339933;">==</span><span style="color: #000088;">$q</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$w_string</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$week_string</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">else</span>  <span style="color: #000088;">$w_string</span> <span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>year<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'2007'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>month<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$w_string</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$week_string</span><span style="color: #339933;">;</span>
&nbsp;
		  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$m2day</span> <span style="color: #339933;">&gt;=</span> <span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$tmp_cal_month_now_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
					<span style="color: #0000ff;">'month'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$month</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'string'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$w_string</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'link'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$q</span>
					<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$date_month_now_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$tmp_cal_month_now_array</span><span style="color: #339933;">;</span>	 <span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//for</span>
&nbsp;
	 <span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'calendar_now_month'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date_month_now_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>	<span style="color: #000088;">$c_yeartoday</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//echo $c_yeartoday;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$tmp</span> <span style="color: #339933;">=</span><span style="color: #000088;">$c_yeartoday</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$q</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//echo $tmp;</span>
&nbsp;
		 <span style="color: #000088;">$tmp_cal_date_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
					  <span style="color: #0000ff;">'year'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$tmp</span>
&nbsp;
				 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #000088;">$date_year_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$tmp_cal_date_array</span><span style="color: #339933;">;</span>
	 <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//for</span>
&nbsp;
	<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'calendar_year'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date_year_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	    <span style="color: #000088;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span><span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$month_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>month<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$q</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$w_string</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$week_string</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">else</span> <span style="color: #000088;">$w_string</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$tmp_cal_month_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
					<span style="color: #0000ff;">'month'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$month</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'string'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$w_string</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'link'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$q</span>
					<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$date_month_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$tmp_cal_month_array</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//for</span>
	 <span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'calendar_month'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date_month_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	 <span style="color: #000088;">$y</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> <span style="color: #000088;">$q</span><span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$month_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>year<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'2000'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span>month<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$w_string</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$week_string</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">else</span> <span style="color: #000088;">$w_string</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$tmp_cal_month_old_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
					<span style="color: #0000ff;">'month'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$month</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'string'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$w_string</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">'link'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$q</span>
					<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$date_month_old_array</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$y</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$tmp_cal_month_old_array</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//for</span>
	 <span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'calendar_month_old'</span><span style="color: #339933;">,</span><span style="color: #000088;">$date_month_old_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><span id="more-1282"></span></p>
<p>Looking at the above script, it looks like they were grouped in to 4 sections, deriving the values of <code>$date_month_now_array</code>, <code>$date_year_array</code>, <code>$date_month_array</code> and <code>$date_month_old_array</code>. And the hardcoded values &#8217;2000&#8242; and &#8217;2007&#8242; will definitely set limit and obviously introduce bug, and so it did. Honestly, I would have coded it this way when I was moving into PHP 3 years ago, and perhaps even now if I&#8217;d have been coding for a whole day confronted with bugs.</p>
<p>Anyway, the main problem with the above code is, there was always a reference for dates and the original programmer didn&#8217;t use it, the date column in the content&#8217;s table. Instead, I&#8217;m guessing, he setup a start &#8216;year&#8217; which is probably he asked someone about the oldest possible year a content was published &#8211; there he arrived at using &#8217;2000&#8242; in the code. And if I&#8217;m not mistaken, this code was written in 2007, LOL, so there was a condition on year set to 2007.</p>
<p>Here&#8217;s how I modified it, optimized it as much (well I hope). The date column had a unix timestamp values, so it&#8217;s not in typical date format.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Calendar modification
 * @author marvin marcelo
 * @uses ez_sql
 * @link http://www.phpclasses.org/browse/package/790.html
 */</span>
<span style="color: #666666; font-style: italic;">/* present */</span>
<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$y</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y n j&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select distinct(from_unixtime(updateStartDate, '%Y')) year
          from series_table where updateStartDate &gt; 0 order by updateStartDate desc&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* ezSql stuff */</span>
<span style="color: #000088;">$years</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_results</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #339933;">,</span> ARRAY_A<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$years</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$months</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #339933;">--</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$endofmonth</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$years</span>[<span style="color: #006699; font-weight: bold;">$i</span>][&quot;</span>year<span style="color: #0000ff;">&quot;]}-<span style="color: #006699; font-weight: bold;">$j</span>-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$years</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;year&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$y</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$m</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* future year-month */</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$years</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;year&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$y</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$m</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">/* this day in this month of this year is also future, use current date instead */</span>
      <span style="color: #000088;">$endofmonth</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$d</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000088;">$ts0</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$years</span>[<span style="color: #006699; font-weight: bold;">$i</span>][&quot;</span>year<span style="color: #0000ff;">&quot;]}-<span style="color: #006699; font-weight: bold;">$j</span>-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* unix timestamp start of month */</span>
    <span style="color: #000088;">$ts1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtotime</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">$years</span>[<span style="color: #006699; font-weight: bold;">$i</span>][&quot;</span>year<span style="color: #0000ff;">&quot;]}-<span style="color: #006699; font-weight: bold;">$j</span>-<span style="color: #006699; font-weight: bold;">$endofmonth</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* unix timestamp last day or today of month */</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_row</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from series_table where updateStartDate &gt; <span style="color: #006699; font-weight: bold;">$ts0</span> and updateStartDate &lt; = <span style="color: #006699; font-weight: bold;">$ts1</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$year</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$years</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;year&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$month</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$months</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;active&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;j&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;F&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;F&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ts0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #b1b100;">else</span>
      <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$months</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;j&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;F&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;F&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ts0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$months</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$years</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;months&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$months</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">/* template */</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'calendar'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$years</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009933; font-style: italic;">/**
 * Calendar modification end block
 */</span></pre></div></div>

<p>The process I did &#8230;</p>
<ol>
<li>Select distinct years from all published content by converting unix timestamp to readable year value, then iterate on them</li>
<li>Do a for loop from 12 (december) to 1 (january) to generate a unix timestamp for use in the next query</li>
<li>Query the table for a matching timestamp of the first day and the last day of month-year pair; Use current day of month if iterating year and month matches the present</li>
<li>Show the month link for the year in iteration if a match is found</li>
</ol>
<p>Couple of notes though, I didn&#8217;t name the table as &#8216;series_table&#8217; <img src='http://www.marvinmarcelo.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  , it&#8217;s been there years since. I also named my variables when referring to start and end as <code>$x0</code> and <code>$x1</code>, <code>$ts0</code> and <code>$ts1</code>. I got used to this when college years in physics &#8211; the start and end of a distance, I don&#8217;t know, I just like the thought <img src='http://www.marvinmarcelo.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<p>Hope it didn&#8217;t went order to chaos at all!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marvinmarcelo.com/php-code-block-bringing-order-to-chaos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty Gravatar plugin</title>
		<link>http://www.marvinmarcelo.com/smarty-gravatar-plugin/</link>
		<comments>http://www.marvinmarcelo.com/smarty-gravatar-plugin/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 03:33:40 +0000</pubDate>
		<dc:creator>Marvin</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[me stuff]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[work related]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.marvinmarcelo.com/?p=1213</guid>
		<description><![CDATA[I realize the need for this when working on an MVC based CMS especially with Smarty engine in it. Oh and in case you&#8217;re wondering why its sounds like the upcoming movie Avatar by James Cameron, I don&#8217;t know. What &#8230; <a href="http://www.marvinmarcelo.com/smarty-gravatar-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I realize the need for this when working on an MVC based CMS especially with <a href="http://www.smarty.net">Smarty</a> engine in it.</p>
<p>Oh and in case you&#8217;re wondering why its sounds like the upcoming movie <a href="http://www.imdb.com/title/tt0499549/">Avatar</a> by <a href="http://www.imdb.com/name/nm0000116/">James Cameron</a>, I don&#8217;t know. What it has to do with internet term &#8216;<a href="http://en.wikipedia.org/wiki/Avatar_(computing)">avatar</a>&#8216;? I really don&#8217;t know. But in &#8216;www&#8217;, <a href="http://en.gravatar.com/">Gravatar</a> is a short term for &#8220;Globally Recognized Avatar&#8221; assigned by a user as his/her default avatar in every places of the internet, same people behind <a href="http://wordpress.com">WordPress</a>. There are other similar services too.</p>
<p>So, this plugin is based from its <a href="http://en.gravatar.com/site/implement">documentation</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Gravatar
 *
 * @link http://www.marvinmarcelo.com
 *
 * @param array $params
 * @param Smarty $smarty
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> smarty_function_gravatar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$smarty</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #009933; font-style: italic;">/**
   * constant $gravatar_host
   */</span>
  <span style="color: #000088;">$gravatar_host</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://www.gravatar.com/avatar/&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">trigger_error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;gravatar: email parameter not set&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">eregi</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">trigger_error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;gravatar: <span style="color: #006699; font-weight: bold;">{$params['email']}</span> is not a valid email.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #009933; font-style: italic;">/**
   * @link http://en.gravatar.com/site/implement/url
   */</span>
  <span style="color: #000088;">$hash</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;email&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$src</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$gravatar_host</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hash</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;.jpg?&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;size&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;size&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;size&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span><span style="color: #cc66cc;">512</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;size&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">32</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000088;">$src</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;s={<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span>size<span style="color: #0000ff;">&quot;]}&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;default&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;default&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;identicon&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000088;">$src</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;d={<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span><span style="color: #b1b100;">default</span><span style="color: #0000ff;">&quot;]}&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;rating&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;rating&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;G&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000088;">$src</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;r={<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span>rating<span style="color: #0000ff;">&quot;]}&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$extras</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;class&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$extras</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; class=<span style="color: #000099; font-weight: bold;">\&quot;</span>{<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span><span style="color: #000000; font-weight: bold;">class</span><span style="color: #0000ff;">&quot;]}<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$extras</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; id=<span style="color: #000099; font-weight: bold;">\&quot;</span>{<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span>id<span style="color: #0000ff;">&quot;]}<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #009933; font-style: italic;">/**
   * @example http://www.gravatar.com/avatar/7023218434f12aee57f4b03454dadcaa?s=32&amp;d=identicon&amp;r=G
   */</span>
  <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;&lt;img src=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$src</span><span style="color: #000099; font-weight: bold;">\&quot;</span> alt=<span style="color: #000099; font-weight: bold;">\&quot;</span>{<span style="color: #006699; font-weight: bold;">$params</span>[&quot;</span>alt<span style="color: #0000ff;">&quot;]}<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$extras</span> /&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Simply extract <a href='http://www.marvinmarcelo.com/wp-content/uploads/2009/08/function.gravatar.zip'>function.gravatar.zip</a> into your Smarty plugin directory. And use it in your template file like this</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #D36900;">&#123;</span>gravatar email<span style="color: #D36900;">=</span><span style="color: #ff0000;">'someemail@domain.com'</span><span style="color: #D36900;">&#125;</span></pre></div></div>

<p>You&#8217;re done!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marvinmarcelo.com/smarty-gravatar-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick and Dirty, and yet Tidy</title>
		<link>http://www.marvinmarcelo.com/quick-and-dirty-and-yet-tidy/</link>
		<comments>http://www.marvinmarcelo.com/quick-and-dirty-and-yet-tidy/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 02:56:29 +0000</pubDate>
		<dc:creator>Marvin</dc:creator>
				<category><![CDATA[me stuff]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[tidy]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.marvinmarcelo.com/?p=1146</guid>
		<description><![CDATA[I just got the title from the source, read it yourself This options worked for me! I&#8217;ve been having trouble trying tidy on my CMS. But it only renders tidy&#8217;ed the content inside &#60;body&#62; and worst, everything outside it are &#8230; <a href="http://www.marvinmarcelo.com/quick-and-dirty-and-yet-tidy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just got the title from the source, <a href="http://www.php.net/manual/en/tidy.examples.php#85268">read it</a> yourself <img src='http://www.marvinmarcelo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This <a href="http://www.php.net/manual/en/tidy.examples.php#85268">options</a> worked for me! I&#8217;ve been having trouble trying <a href="http://www.php.net/tidy">tidy</a> on my CMS. But it only renders tidy&#8217;ed the content inside &lt;body&gt; and worst, everything outside it are stripped off &#8211; no title, and meta&#8217;s neither opening and closing html</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">'indent'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'output-xml'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'input-xml'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'wrap'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1000'</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>For detailed options and their uses, look at their <a href="http://tidy.sourceforge.net/docs/quickref.html">quickref</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marvinmarcelo.com/quick-and-dirty-and-yet-tidy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smarty template for generating cascaded UL based menu</title>
		<link>http://www.marvinmarcelo.com/smarty-template-for-generating-cascaded-ul-based-menu/</link>
		<comments>http://www.marvinmarcelo.com/smarty-template-for-generating-cascaded-ul-based-menu/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 00:30:52 +0000</pubDate>
		<dc:creator>Marvin</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[me stuff]]></category>
		<category><![CDATA[work related]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[smarty]]></category>

		<guid isPermaLink="false">http://www.marvinmarcelo.com/?p=1060</guid>
		<description><![CDATA[So far, I&#8217;ve been happy how this template behaves when I pass a parent/child links into it. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 &#60; {$parent_tag&#124;default:'ul'}{if $menu_id} id=&#34;{$menu_id}&#34;{/if}{if $parent_class} &#8230; <a href="http://www.marvinmarcelo.com/smarty-template-for-generating-cascaded-ul-based-menu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So far, I&#8217;ve been happy how this template behaves when I pass a parent/child links into it.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt; {$parent_tag|default:'ul'}{if $menu_id} id=&quot;{$menu_id}&quot;{/if}{if $parent_class} class=&quot;{$parent_class}&quot;{/if}&gt;</span><span style="color: #008080; font-style: italic;">{* ul tag opens here *}</span>
<span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">foreach</span> <span style="color: #6A0A0A;">from</span><span style="color: #D36900;">=</span><span style="color: #00aaff;">$links</span> <span style="color: #6A0A0A;">item</span><span style="color: #D36900;">=</span>link<span style="color: #D36900;">&#125;</span>
  <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #00aaff;">$link</span>.<span style="color: #006600;">class_active</span> &amp;&amp; <span style="color: #00aaff;">$link</span>.<span style="color: #006600;">href</span> <span style="color: #D36900;">==</span> <span style="color: #00aaff;">$current_uri</span><span style="color: #D36900;">&#125;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #00aaff;">$link</span>.<span style="color: #006600;">class</span><span style="color: #D36900;">&#125;</span>
      <span style="color: #D36900;">&#123;</span><span style="color: #008000;">assign</span> var<span style="color: #D36900;">=</span>class <span style="color: #6A0A0A;">value</span><span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;`$link.class` `$link.class_active`&quot;</span><span style="color: #D36900;">&#125;</span>      
    <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">else</span><span style="color: #D36900;">&#125;</span>
      <span style="color: #D36900;">&#123;</span><span style="color: #008000;">assign</span> var<span style="color: #D36900;">=</span>class <span style="color: #6A0A0A;">value</span><span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;`$link.class_active`&quot;</span><span style="color: #D36900;">&#125;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span>
  <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">else</span><span style="color: #D36900;">&#125;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #008000;">assign</span> var<span style="color: #D36900;">=</span>class <span style="color: #6A0A0A;">value</span><span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;`$link.class`&quot;</span><span style="color: #D36900;">&#125;</span>
  <span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span>
  <span style="color: #009000;">&lt; {$child_tag|default:'li'}{if $class} class=&quot;{$class}&quot;{/if}{if $link.id} id=&quot;link_{$link.id}&quot;{/if}&gt;</span>
    <span style="color: #009000;">&lt;a href=&quot;{$link.href}&quot;{if $link.target} target=&quot;{$link.target}&quot;{/if}&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$link</span>.<span style="color: #006600;">text</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/a&gt;</span>
  <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #00aaff;">$link</span>.<span style="color: #006600;">children</span><span style="color: #D36900;">&#125;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">include</span> <span style="color: #6A0A0A;">file</span><span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;links.html&quot;</span> links<span style="color: #D36900;">=</span><span style="color: #00aaff;">$link</span>.<span style="color: #006600;">children</span> parent_class<span style="color: #D36900;">=</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #D36900;">&#125;</span>
  <span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">foreach</span><span style="color: #D36900;">&#125;</span>
<span style="color: #009000;">&lt; /{$parent_tag|default:'ul'}&gt;</span></pre></td></tr></table></div>

<p>Does something like this when rendered</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;sf-menu&quot;</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com/index.php&quot;</span>&gt;</span>Home<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com/PostItem&quot;</span>&gt;</span>Post Item<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com&quot;</span>&gt;</span>Blog<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com/BlogComments/do/viewrecent&quot;</span>&gt;</span>Comments<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com/Content/name/about&quot;</span>&gt;</span>About<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.swerteka.com/Content/name/contact&quot;</span>&gt;</span>Contact Us<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.marvinmarcelo.com/smarty-template-for-generating-cascaded-ul-based-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OOP 101: No logic in template, as much as possible</title>
		<link>http://www.marvinmarcelo.com/oop-101-no-logic-in-template-as-much-as-possible/</link>
		<comments>http://www.marvinmarcelo.com/oop-101-no-logic-in-template-as-much-as-possible/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 02:15:25 +0000</pubDate>
		<dc:creator>Marvin</dc:creator>
				<category><![CDATA[job]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[work related]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[smarty]]></category>

		<guid isPermaLink="false">http://www.marvinmarcelo.com/?p=916</guid>
		<description><![CDATA[If you have a repeating region in your template and it doesn&#8217;t need a wrapper around it, simply use section 1 2 3 &#123;section name=s loop=$images&#125; &#60;div id=&#34;image_{$images[s].id}&#34;&#62;&#60;img src=&#34;{$images[s].src}&#34; alt=&#34;&#34; /&#62;&#60;/div&#62; &#123;/section&#125; Cases where you need html wrap tags is &#8230; <a href="http://www.marvinmarcelo.com/oop-101-no-logic-in-template-as-much-as-possible/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you have a repeating region in your template and it doesn&#8217;t need a wrapper around it, simply use <code>section</code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">section</span> <span style="color: #6A0A0A;">name</span><span style="color: #D36900;">=</span>s <span style="color: #6A0A0A;">loop</span><span style="color: #D36900;">=</span><span style="color: #00aaff;">$images</span><span style="color: #D36900;">&#125;</span>
   <span style="color: #009000;">&lt;div id=&quot;image_{$images[s].id}&quot;&gt;&lt;img src=&quot;{$images[s].src}&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">section</span><span style="color: #D36900;">&#125;</span></pre></td></tr></table></div>

<p>Cases where you need html wrap tags is like this</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #00aaff;">$navlinks</span><span style="color: #D36900;">&#125;</span>
<span style="color: #009000;">&lt;ul&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">section</span> <span style="color: #6A0A0A;">name</span><span style="color: #D36900;">=</span>s <span style="color: #6A0A0A;">loop</span><span style="color: #D36900;">=</span><span style="color: #00aaff;">$navlinks</span><span style="color: #D36900;">&#125;</span>
   <span style="color: #009000;">&lt;li id=&quot;navitem_{$navlinks[s].id}&quot;&gt;</span>
     <span style="color: #009000;">&lt;a href=&quot;{$navlinks[s].href}&quot;&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$navlinks</span><span style="color: #D36900;">&#91;</span>s<span style="color: #D36900;">&#93;</span>.<span style="color: #006600;">text</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/a&gt;</span>
   <span style="color: #009000;">&lt;/li&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">section</span><span style="color: #D36900;">&#125;</span>
<span style="color: #009000;">&lt;/ul&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span></pre></td></tr></table></div>

<p>This avoids the <code>&lt;ul&gt;</code> being rendered if <code>$navlinks</code> don&#8217;t have a return record. Another way is to access Smarty properties</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">section</span> <span style="color: #6A0A0A;">name</span><span style="color: #D36900;">=</span>s <span style="color: #6A0A0A;">loop</span><span style="color: #D36900;">=</span><span style="color: #00aaff;">$navlinks</span><span style="color: #D36900;">&#125;</span>
   <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #0600FF;"><span style="color: #00aaff;">$smarty</span></span>.<span style="color: #0600FF;">section</span>.<span style="color: #006600;">s</span>.<span style="color: #006600;">first</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;ul&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span>
   <span style="color: #009000;">&lt;li id=&quot;navitem_{$navlinks[s].id}&quot;&gt;</span>
     <span style="color: #009000;">&lt;a href=&quot;{$navlinks[s].href}&quot;&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$navlinks</span><span style="color: #D36900;">&#91;</span>s<span style="color: #D36900;">&#93;</span>.<span style="color: #006600;">text</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/a&gt;</span>
   <span style="color: #009000;">&lt;/li&gt;</span>
   <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">if</span> <span style="color: #0600FF;"><span style="color: #00aaff;">$smarty</span></span>.<span style="color: #0600FF;">section</span>.<span style="color: #006600;">s</span>.<span style="color: #006600;">last</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/ul&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">if</span><span style="color: #D36900;">&#125;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">section</span><span style="color: #D36900;">&#125;</span></pre></td></tr></table></div>

<p>But still, this adds an <code>if</code> in the template. As this post title goes, you should avoid them, that&#8217;s the basics of OOP system and MVC frameworks, separate logic from code <img src='http://www.marvinmarcelo.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>What made me write this post? Template Designers sometimes <em>hate</em> seeing <code>if</code> statements. In my case, my boss transforms into savvy Designer as well, at times! Bummer</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marvinmarcelo.com/oop-101-no-logic-in-template-as-much-as-possible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

