<?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>The Blog of a WebDeveloper &#187; Projectos</title>
	<atom:link href="http://joaopedropereira.com/blog/category/projectos/feed/" rel="self" type="application/rss+xml" />
	<link>http://joaopedropereira.com/blog</link>
	<description>Um novo estilo de desenvolvimento</description>
	<lastBuildDate>Wed, 27 Jul 2011 21:19:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>PHP RSS Feed Generator Class</title>
		<link>http://joaopedropereira.com/blog/2010/07/28/php-rss-feed-generator-class/</link>
		<comments>http://joaopedropereira.com/blog/2010/07/28/php-rss-feed-generator-class/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:06:28 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=858</guid>
		<description><![CDATA[English Version &#124; Versão Portuguesa It&#8217;s been a while since I&#8217;ve planned on developing a new platform for my work as Web Developer, and next to all Web Developers, and I started to develop some modules and this RSS Generator Class born to fulfill my needs. Supported versions: RSS 2.0 Download: Download it Features: Generates [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F28%2Fphp-rss-feed-generator-class%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F28%2Fphp-rss-feed-generator-class%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<h2 style="text-align: center;"><a title="English Version" href="#english">English Version</a> | <a href="#portugues">Versão Portuguesa</a></h2>
<p style="text-align: center;"><a class="button" href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip"><br />
</a></p>
<hr />
<span id="english"> </span></p>
<p>It&#8217;s been a while since I&#8217;ve planned on developing a new platform for my work as Web Developer, and next to all Web Developers, and I started to develop some modules and this RSS Generator Class born to fulfill my needs.</p>
<p><span style="text-decoration: underline;">Supported versions:</span><br />
RSS 2.0</p>
<p><span style="text-decoration: underline;">Download:</span><br />
<a title="Download RSS Feed Generator Class" href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip">Download it</a></p>
<p><span style="text-decoration: underline;">Features:</span><br />
Generates RSS 2.0 feeds<br />
All feeds are validated by <a title="Feed Validator" href="http://feedvalidator.org/" target="_blank">feed validator</a><br />
Supports all feed elements<br />
Simple &amp; easy to define channel proprieties<br />
Simple &amp; easy to define item elements<br />
Enables usage of sub-tags and attributes</p>
<p><span style="text-decoration: underline;">Example </span></p>
<p>It&#8217;s a minimum &#8220;how to&#8221; example needed to understand how to use this class. It&#8217;s part of the download package.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;feed.php&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create a new Feed</span>
	<span style="color: #000088;">$feed</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Feed<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Setting the channel elements</span>
	<span style="color: #666666; font-style: italic;">//Helper -&gt; http://www.rssboard.org/rss-specification</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedTitle</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Demo - RSS Generator Class'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedLink</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://joaopedropereira.com/blog/rss'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedDesc</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'This is demo of generating a RSS feed. ONLY RSS Version 2.0 Supported'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedImage</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Oh, my photo...'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://joaopedropereira.com/projects/rss_gen'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://s3.amazonaws.com/twitter_production/profile_images/63969619/imagemresized.jpg'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Is possible to use setChannelElm() function for setting other optional channel elements</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setChannelElm</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'language'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en-us'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create a new Item</span>
	<span style="color: #000088;">$item1</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Item<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Setting the Item elements</span>
	<span style="color: #666666; font-style: italic;">//Helper -&gt; http://www.rssboard.org/rss-specification</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemTitle</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Item nº 1'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemLink</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://joaopedropereira.com'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDate</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDesc</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Bla, bla, bla, item nº 1.'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemEnclosure</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://www.beardodisco.com/beatelectric/music/Loverboy12Mix.mp3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'17121349'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'audio/mpeg'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemAuthor</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'contacto@joaopedropereira.com (João Pedro Pereira)'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//As in Channel is possible to use setItemElm() function for setting other optional item elements</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create another Item</span>
	<span style="color: #000088;">$item2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Item<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Item nº 2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://twitter.com/joaoppereira'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Bla, bla, bla, twitter of the owner of the blog of a webdeveloper'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$item2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDate</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemAuthor</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'contacto@joaopedropereira.com (João Pedro Pereira)'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Adding both created items</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addItem</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$item1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addItem</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$item2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Now we're ready to generate the Feed, Awesome!</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">genFeed</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: center;"><a class="button" href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip">Download</a> | <a class="button" href="http://joaopedropereira.com/projects/rss_gen/">Demo</a></p>
<p><img src="http://joaopedropereira.com/blog/wp-content/uploads/2010/07/Demo-RSS-Generator-Class_1280270120429-w640-h480.png" alt="" title="Demo - RSS Feed Generator Class" width="640" height="311" class="aligncenter size-full wp-image-886" /></p>
<p style="text-align: center;"><a class="button" href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip">Download</a> | <a class="button" href="http://joaopedropereira.com/projects/rss_gen/">Demo</a></p>
<p><strong>EDIT</strong></p>
<p>HOT NEWS, PHP XML-RSS Feed Generator Was Accepted on <a class="button" href="http://www.phpclasses.org/package/6394-PHP-Generate-RSS-2-0-feeds.html">PHPClasses.org</a>!!</p>
<hr />
<p><span id="portugues"> </span></p>
<p>Há já algum tempo que pretendo desenvolver uma nova plataforma para o meu trabalho como Web Developer, e numa fase posterior abrir como serviço para todos os Web Developers, e por isso comecei a desenvolver alguns módulos para essa plataforma, trabalho que deu, entre outros, no módulo de RSS Feed&#8217;s surgindo assim a RSS Generator Class para satisfazer as necessidades.</p>
<p><span style="text-decoration: underline;">Versões Suportadas:</span><br />
RSS 2.0</p>
<p><span style="text-decoration: underline;">Download:</span><br />
<a title="Download RSS Feed Generator Class" href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip">Download it</a></p>
<p><span style="text-decoration: underline;">Funcionalidades:</span><br />
Gera RSS Feeds versão 2.0<br />
As feeds são válidas conforme o <a title="Feed Validator" href="http://feedvalidator.org/" target="_blank">feed validator</a><br />
Suporta todos os elementos quer dos channel&#8217;s quer dos item&#8217;s<br />
É simples definir as propriedades do channel<br />
É simples definir as propriedades dos items</p>
<p>É possível utilizar sub-tags e atributos</p>
<p><span style="text-decoration: underline;">Exemplo</span></p>
<p>Um pequeno exemplo que mostra como se pode fazer uso desta classe. Faz parte do pacote disponível para download.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;feed.php&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create a new Feed</span>
	<span style="color: #000088;">$feed</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Feed<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Setting the channel elements</span>
	<span style="color: #666666; font-style: italic;">//Helper -&gt; http://www.rssboard.org/rss-specification</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedTitle</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Demo - RSS Generator Class'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedLink</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://joaopedropereira.com/blog/rss'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedDesc</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'This is demo of generating a RSS feed. ONLY RSS Version 2.0 Supported'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFeedImage</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Oh, my photo...'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://joaopedropereira.com/projects/rss_gen'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://s3.amazonaws.com/twitter_production/profile_images/63969619/imagemresized.jpg'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Is possible to use setChannelElm() function for setting other optional channel elements</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setChannelElm</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'language'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en-us'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create a new Item</span>
	<span style="color: #000088;">$item1</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Item<span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Setting the Item elements</span>
	<span style="color: #666666; font-style: italic;">//Helper -&gt; http://www.rssboard.org/rss-specification</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemTitle</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Item nº 1'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemLink</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://joaopedropereira.com'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDate</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDesc</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Bla, bla, bla, item nº 1.'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemEnclosure</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'http://www.beardodisco.com/beatelectric/music/Loverboy12Mix.mp3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'17121349'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'audio/mpeg'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemAuthor</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'contacto@joaopedropereira.com (João Pedro Pereira)'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//As in Channel is possible to use setItemElm() function for setting other optional item elements</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Create another Item</span>
	<span style="color: #000088;">$item2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Item<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Item nº 2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://twitter.com/joaoppereira'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Bla, bla, bla, twitter of the owner of the blog of a webdeveloper'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$item2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemDate</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$item2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemAuthor</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'contacto@joaopedropereira.com (João Pedro Pereira)'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Adding both created items</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addItem</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$item1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addItem</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$item2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Now we're ready to generate the Feed, Awesome!</span>
	<span style="color: #000088;">$feed</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">genFeed</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: center;"><a href="http://joaopedropereira.com/projects/rss_gen/rss_gen.zip">Download</a> | <a href="http://joaopedropereira.com/projects/rss_gen/">Demo</a></p>
<p><strong>EDIT</strong></p>
<p>HOT NEWS, PHP XML-RSS Feed Generator foi aceite no <a class="button" href="http://www.phpclasses.org/package/6394-PHP-Generate-RSS-2-0-feeds.html">PHPClasses.org</a>!!</p>
<div class="shr-publisher-858"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F28%2Fphp-rss-feed-generator-class%2F' data-shr_title='PHP+RSS+Feed+Generator+Class'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F28%2Fphp-rss-feed-generator-class%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F28%2Fphp-rss-feed-generator-class%2F' data-shr_title='PHP+RSS+Feed+Generator+Class'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2010/07/28/php-rss-feed-generator-class/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://www.beardodisco.com/beatelectric/music/Loverboy12Mix.mp3" length="17121349" type="audio/mpeg" />
		</item>
		<item>
		<title>PHP Simple Events System Overview</title>
		<link>http://joaopedropereira.com/blog/2010/07/21/php-simple-events-system-overview/</link>
		<comments>http://joaopedropereira.com/blog/2010/07/21/php-simple-events-system-overview/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 18:30:41 +0000</pubDate>
		<dc:creator>scorch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[Objectos]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=817</guid>
		<description><![CDATA[O PHP-SimpleEventsSystem é uma simples classe em PHP que permite a qualquer programador criar uma aplicação orientada a eventos em PHP. Sendo assim, esta classe possibilita a criação mais facilmente de aplicações web com possibilidade de adicionar plugins, sem que estes tenham de mexer com o código interno da aplicação, permite que uma framework use [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F21%2Fphp-simple-events-system-overview%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F21%2Fphp-simple-events-system-overview%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>O PHP-SimpleEventsSystem é uma simples classe em PHP que permite a qualquer programador criar uma aplicação orientada a eventos em PHP. Sendo assim, esta classe possibilita a criação mais facilmente de aplicações web com possibilidade de adicionar plugins, sem que estes tenham de mexer com o código interno da aplicação, permite que uma framework use internamente a classe PHP-SES e melhorando consideravelmente a interacção entre a framework e a aplicação. Mas permite muito mais, permite até onde a sua imaginação chegar. <img src='http://joaopedropereira.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h2>Basic Overview</h2>
<p>Quem quiser ver a documentação completa da framework, pode aceder <a href="http://www.wiki.portugal-a-programar.org/php:tutoriais:php-ses_basicos" target="_blank">aqui</a>. No entanto, aqui vai ficar uma explicação da classe e de como ela funciona, que é bastante simples.</p>
<p>A classe cria um array multi-dimensional onde guarda as funções e o respectivo evento a que elas foram anexadas. Sempre que se anexa uma função, a classe pode ou não verificar se a função existe, conforme os parâmetros que o programador introduzir. Se passar nesse teste, verifica se a função já está anexada a esse mesmo evento,  e só depois anexa a função (as funções caso seja um array).</p>
<p>Ao executar-mos um determinado evento, a classe verifica se este existe, e em caso afirmativo, percorre o array com as funções anexadas a esse evento, e executa-as a todas pela ordem com que forma anexadas. Caso a opção Auto_run esteja activa, a função vai ainda percorrer todas as funções definidas pelo utilizador (programador da aplicação, utilizador da classe entenda-se) e verifica se alguma coincide com a formatação obrigatória e com o nome do evento em questão (<span style="text-decoration: underline">um_nome_qualquer<strong>_handles_</strong>nome_do_evento</span>). Se essa função já estiver anexada ao array, e por consequente já tiver sido executada, a classe não a executa novamente. Se ainda não estiver anexada, a classe executa-a e, caso a opção Auto_index esteja activa, indexa a função ao array do respectivo evento.</p>
<h2>Sugestões de sintaxe dos nomes dos eventos</h2>
<p>Numa aplicação de grandes dimensões torna-se importante a sintaxe que usamos e a forma como organizamos os nomes dos eventos, para que não existam conflitos e seja mais fácil memorizar o grande número de eventos que uma aplicação possa ter. Para isso os nomes dos eventos necessitam de ter lógica, e apesar de serem um pouco compridos, serão óbvios. Primeiro teremos de ter em conta algumas considerações.<br />
Os nomes dos eventos podem conter qualquer carácter, incluindo pontos, que podem servir de separador entre as várias &#8220;secções virtuais&#8221; do nome do evento. No entanto nomes de eventos com pontos não serão possíveis de aceder através da funcionalidade Auto-Index e Auto-Run pois as funções não suportam, obviamente, este tipo de caracteres no seu nome. Assim sendo, sugiro o uso do <em>underscore</em> como separador.<br />
Em todas as aplicações há uma &#8220;secção&#8221; que deve existir em todos os eventos, que indica se o evento retrata alguma acção em PHP ou HTML. Ou seja, e apesar de todas as instruções em código PHP sejam de PHP, poderão existir eventos que retratam a impressão de texto para o browser, e assim sendo, o nome do evento deve começar por <strong>html_</strong>, senão, caso retratem acções PHP, como uma conexão a uma Base de Dados, a leitura de um ficheiro, o fim de um ciclo, a execução de uma qualquer estrutura de controlo, etc., deverão começar por <strong>php_</strong>.<br />
Para a secção de HTML, podemos ainda destinguir se nos estamos a referir a alguma parte genérica do HTML, como por exemplo, um menu, que seja constituído por vários elementos HTML, deve-se adicionar um <strong>generic_</strong> a seguir ao <strong>html_</strong>, ou seja, ficaria <strong>html_generic_menu</strong>, por exemplo.<br />
Caso seja em PHP, deve-se adicionar o nome da &#8220;categoria&#8221; da acção que se está a utilizar. Por exemplo se for uma acção qualquer relacionada com a base de dados MySQL, como inserir um registo, coloca-se o <strong>mysq_</strong> depois do <strong>php_</strong>, ficando, por exemplo, <strong>php_mysql_query_insert_user</strong>.</p>
<p><span style="text-decoration: underline"><strong>Nota:</strong></span> Isto é apenas um exemplo de nomenclatura dos eventos, nada de obrigatório.</p>
<h2>Exemplos e Demos</h2>
<h3>Plugins</h3>
<p>Actualmente, é quase obrigatório qualquer aplicação, seja ela Web ou Desktop, suportar plugins. Só que isto é muitas vezes uma fonte de dor de cabeça para quem programa em PHP, criar um sistema versátil suficiente para suportar plugins. O PHP-SES permite a criação de Aplicações Web que facilmente suportam plugins. Vamos ver o seguinte exemplo.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;..\..\Events.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Inicia a configuração</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">setConf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Auto_run&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">setConf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Auto_index&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Carrega os nomes ficheiros dos plugins.</span>
<span style="color: #000088;">$plugins</span> <span style="color: #339933;">=</span> <span style="color: #990000;">scandir</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;plugins&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Percorre o array com todos os ficheiros de plugins</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$plugins</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$index</span><span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file_name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Verifica se o index actual é um ficheiro e não uma pasta</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;plugins/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$file_name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">//Inclui e executa o plugin</span>
                <span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;plugins/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$file_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">//Por uma questão de segurança e para não comprometer o funcionamento da aplicação</span>
                <span style="color: #666666; font-style: italic;">//Depois de se carregar um plugin deve-se sempre habilitar a classe</span>
                <span style="color: #666666; font-style: italic;">//Para não se dar o caso de algum plugin a desabilitar e não a habilitar novamente.</span>
                Events<span style="color: #339933;">::</span><span style="color: #004000;">Enable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8856-16&quot; /&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//Declara uma variável que permitirá adicionar conteúdo dentro dos plugins para a página</span>
        <span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//Corre todos os eventos anexados para quando os headers HTML são mostrados</span>
        <span style="color: #666666; font-style: italic;">//Esta é apenas um exemplo da sintaxe para o nome dos eventos.</span>
        Events<span style="color: #339933;">::</span><span style="color: #004000;">Run</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;html_headers&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;title&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;PHP-SES Plugins Example&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        Events<span style="color: #339933;">::</span><span style="color: #004000;">Run</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;html_show_title&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$content</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;h1&gt;Título&lt;/h1&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>#<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;Link1&lt;/a&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//Aqui corre os eventos que permitem alterar o menu</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">Run</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;html_generic_body_menu&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/body&gt;
&lt;/html&gt;
'</span></pre></div></div>

<h3>JavaScript Events</h3>
<p>Muitas vezes torna-se cansativo estar a chamar vários exemplos por AJAX, ou até fazer a verificação no PHP através de QueryStrings. Assim sendo, e com este exemplo aplicado, basta, no evento JavaScript, chamar uma função, JavaScript também, o nome do evento em PHP, e depois é só ir adicionando funções PHP ao código PHP.</p>
<p><strong>index.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt; ?php </span>
<span style="color: #009900;">require<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;..\..\Events.php&quot;</span><span style="color: #66cc66;">&#41;</span>;</span>
&nbsp;
<span style="color: #009900;">?&gt;</span>
<span style="color: #009900;">&lt; !DOCTYPE html PUBLIC <span style="color: #ff0000;">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span> <span style="color: #ff0000;">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=iso-8856-16&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
        function RunEvent(event_name){
&nbsp;
                if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                        xmlhttp=new XMLHttpRequest();
                } else {// code for IE6, IE5
                        xmlhttp=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
                }
&nbsp;
                xmlhttp.onreadystatechange=function(){
                        if (xmlhttp.readyState==4 <span style="color: #ddbb00;">&amp;&amp; xmlhttp.status==200){</span>
<span style="color: #ddbb00;">                                document.getElementById(&quot;count_number&quot;).innerHTML=xmlhttp.responseText;</span>
                        }
                }
&nbsp;
                xmlhttp.open(&quot;GET&quot;,&quot;run.php?event=&quot; + event_name + &quot;&quot;,true);
                xmlhttp.send();
        }
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>JavaScript Buttons Example<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;btn_sample&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;btn_sample&quot;</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;RunEvent('html_buttons_click_btn_sample')&quot;</span>  <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Test me. Click me.&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;count_number&quot;</span>&gt;</span>0<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></div></div>

<p><strong>run.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;..\..\Events.php&quot;</span><span style="color: #009900;">&#41;</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;">defined</span><span style="color: #009900;">&#40;</span>IS_AUTH<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Se a variável $_GET[&quot;event&quot;] não estiver declarada, termina a execução da página.</span>
<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;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;event&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: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Não foi definido nenhum evento.&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Define algumas configurações para não ser necessário anexar a função.</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">setConf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Auto_run&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">setConf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Auto_index&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Declara uma função anexada ao clique do botão</span>
<span style="color: #000000; font-weight: bold;">function</span> update_file_handles_html_buttons_click_btn_sample <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Vai buscar o número de clicks que o botão já tem</span>
        <span style="color: #000088;">$number_clicks</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clicks.txt&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//Escreve outra vez para o ficheiro adicionando um clique</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clicks.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$number_clicks</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$number_clicks</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Corre todos os eventos associados ao clique do botão.</span>
Events<span style="color: #339933;">::</span><span style="color: #004000;">Run</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;event&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Pode ver os exemplos em funcionamento, aceda <a href="http://scorchserver.freehosting.com/php_ses_examples/">aqui</a>.</p>
<div class="shr-publisher-817"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F21%2Fphp-simple-events-system-overview%2F' data-shr_title='PHP+Simple+Events+System+Overview'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F21%2Fphp-simple-events-system-overview%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F07%2F21%2Fphp-simple-events-system-overview%2F' data-shr_title='PHP+Simple+Events+System+Overview'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2010/07/21/php-simple-events-system-overview/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ConnectionDetails.info :: Information About Your Connection</title>
		<link>http://joaopedropereira.com/blog/2010/03/17/connectiondetails-info-information-about-your-connection/</link>
		<comments>http://joaopedropereira.com/blog/2010/03/17/connectiondetails-info-information-about-your-connection/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 23:33:30 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ConnectionDetails.info]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=739</guid>
		<description><![CDATA[Hoje, dia 17 de Março de 2010, lanço uma primeira versão &#8220;estável&#8221; de um serviço que já corre à algum tempo no dominio ConnectionDetails.info. Este serviço pretende dar informações precisas relativas ao browser bem como algumas características da ligação do utilizador. Numa primeira fase as informações disponíveis são: IP Browser Sistema Operativo De onde veio [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F03%2F17%2Fconnectiondetails-info-information-about-your-connection%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F03%2F17%2Fconnectiondetails-info-information-about-your-connection%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hoje, dia 17 de Março de 2010, lanço uma primeira versão &#8220;estável&#8221; de um serviço que já corre à algum tempo no dominio <a title="ConnectionDetails.info :: Information About Your Connection" href="http://connectiondetails.info">ConnectionDetails.info</a>.</p>
<p>Este serviço pretende dar informações precisas relativas ao browser bem como algumas características da ligação do utilizador. Numa primeira fase as informações disponíveis são:</p>
<ul>
<li>IP</li>
<li>Browser</li>
<li>Sistema Operativo</li>
<li>De onde veio o utilizador (Referrer)</li>
<li>Porta que está a ser usada para efectuar a ligação</li>
<li>Velocidade da ligação</li>
</ul>
<p>Ainda existem alguns bugs quer na aquisição de informações quer no design. Agradecia que fosse feito o report das falhas encontradas e imprecisões.</p>
<p>No futuro pretendo lançar uma versão mais precisa a identificar as informações, bem como adicionar funcionalidades como tentar descobrir qual os routers por trás da ligação, identificar características especificas do browser como as versões de JavaScript suportadas, CSS, versão do Java e do Flash em utilização, etc. Uma outra funcionalidade é o fetching das bases de dados de vulnerabilidades existentes online de forma a encontrar falhas de segurança para a versão dos software instalados.</p>
<p>Agradeço desde todo o suporte que possam dar em especial ao nível de sugestões de funcionalidades, bug catching, criticas/comentários e divulgação.</p>
<div class="shr-publisher-739"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F03%2F17%2Fconnectiondetails-info-information-about-your-connection%2F' data-shr_title='ConnectionDetails.info+%3A%3A+Information+About+Your+Connection'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F03%2F17%2Fconnectiondetails-info-information-about-your-connection%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F03%2F17%2Fconnectiondetails-info-information-about-your-connection%2F' data-shr_title='ConnectionDetails.info+%3A%3A+Information+About+Your+Connection'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2010/03/17/connectiondetails-info-information-about-your-connection/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Super Blog Awards</title>
		<link>http://joaopedropereira.com/blog/2010/02/26/super-blog-awards/</link>
		<comments>http://joaopedropereira.com/blog/2010/02/26/super-blog-awards/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 23:31:47 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=711</guid>
		<description><![CDATA[E já começou a fase de Votação para o Super Bock Super Blog Awards, onde serão eleitos os melhores blogs de Portugal e de Angola em diversas áreas como a que está este blog inscrito Tecnologia. Como é que podem votar no meu blog? Fácil: basta clicar no dístico de participação, que colocaste no teu [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F02%2F26%2Fsuper-blog-awards%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F02%2F26%2Fsuper-blog-awards%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: center;"><a href="http://www.superbock.pt/SuperBrand/Super_Blog_Awards_2009/Votar.aspx?blog=6c3ce821-1c81-482d-9c51-4e46fda92656"><img class="aligncenter" title="Super Blog Awards" src="http://www.superbock.pt/SuperBrand/Super_Blog_Awards_2009/Disticos/blog_3.png" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;">E já começou a fase de Votação para o Super Bock Super Blog Awards, onde serão eleitos os melhores blogs de Portugal e de Angola em diversas áreas como a que está este blog inscrito Tecnologia.</p>
<h2>Como é que podem votar no meu blog?</h2>
<blockquote><p>Fácil: basta clicar no dístico de participação, que colocaste no teu blog aquando da fase de inscrição. Em alternativa, podes pesquisar no site pelo nome do blog ou autor, e aceder ao perfil de cada blog no site Super Bock para registares o teu voto.</p></blockquote>
<h2>Preciso de estar registado no site Super Bock para votar?</h2>
<blockquote><p>Sim. O registo é necessário para evitar situações de fraude na votação, assegurando que os blogs têm uma justa classificação e são avaliados de forma autêntica.<br />
Para quem ainda não é registado, tem ainda a vantagem de poder participar nos futuros passatempos Super Bock, de música a cinema e outras oportunidades.</p></blockquote>
<div class="shr-publisher-711"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F02%2F26%2Fsuper-blog-awards%2F' data-shr_title='Super+Blog+Awards'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F02%2F26%2Fsuper-blog-awards%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2010%2F02%2F26%2Fsuper-blog-awards%2F' data-shr_title='Super+Blog+Awards'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2010/02/26/super-blog-awards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Twitter Bot :: Crawling Emails</title>
		<link>http://joaopedropereira.com/blog/2009/09/22/php-twitter-bot-crawling-emails/</link>
		<comments>http://joaopedropereira.com/blog/2009/09/22/php-twitter-bot-crawling-emails/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 18:13:23 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[crawling]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=493</guid>
		<description><![CDATA[Um dos projectos que estou a começar a desenvolver é um Twitter Bot que seja capaz de simular o comportamento de um utilizador durante um curto período de tempo, dependendo da configuração que o utilizador lhe quiser dar. Deve também ter todas as funcionalidades que possam ser úteis ou pensáveis para um programa deste género [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F09%2F22%2Fphp-twitter-bot-crawling-emails%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F09%2F22%2Fphp-twitter-bot-crawling-emails%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Um dos projectos que estou a começar a desenvolver é um Twitter Bot que seja capaz de simular o comportamento de um utilizador durante um curto período de tempo, dependendo da configuração que o utilizador lhe quiser dar. Deve também ter todas as funcionalidades que possam ser úteis ou pensáveis para um programa deste género e por isso muito é necessário pesquisar e estudar.</p>
<p>Hoje surgiu-me a ideia de utilizar a pesquisa do Twitter para encontrar e-mails. Claro que não fui o primeiro a pensar nisto, então em vez de reinventar a roda fui alterá-la apenas para andar melhor.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">ob_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> writemail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$emails</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$emails</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$email</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'
'</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">ob_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$id</span><span style="color: #339933;">&lt;</span> <span style="color: #339933;">=</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span> <span style="color: #000088;">$id</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> proxify_my_connection<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://search.twitter.com/search?page=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$id</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&amp;q=gmail.com+OR+msn.com+OR+hotmail.com+OR+<span style="color: #009933; font-weight: bold;">%22e</span>mail+me%22&amp;rpp=100&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">&quot;([a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b)siU&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #000088;">$file</span><span style="color: #339933;">,</span>
		<span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	writemail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">ob_end_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O que este código faz, basicamente, é ler a página de pesquisa do Twitter e utilizando <a title="Regular Expression - Wikipedia" href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">Regular Expressions</a> encontrar os e-mails existentes na página, e depois continua pelas páginas seguintes.</p>
<p>/search?page=&#8221;.$id.&#8221;&amp;q=gmail.com+OR+msn.com+OR+hotmail.com+OR+%22email+me%22&amp;rpp=100</p>
<p><strong>page</strong> numero da página<br />
<strong>q</strong> representa a query, a chave a pesquisar<br />
<strong>rpp</strong> results per page sendo que o máximo permitido pelo twitter é 100</p>
<p>Como podem reparar no meu código existe uma função que não está presente nem faz parte do PHP, a proxify_my_connection, é uma ferramenta que eu próprio desenvolvi há algum tempo e que não a quero tornar pública. Mas é fácil de a substituir, mesmo utilizando funções que já vêm de raíz no PHP. Podem também ver <a title="Scraping websites with PHP cURL under proxy" href="http://www.fromzerotoseo.com/scraping-websites-php-curl-proxy/" target="_blank">aqui</a> uma função com efeito semelhante à que eu desenvolvi, no entanto não tem nada a ver uma com a outra.</p>
<p>Em vez da função writemail() é mais produtivo ter uma base de dados onde quardar os e-mails e verificar se estes são repetidos ou não&#8230;</p>
<p>Podem dar uso à vossa imaginação, aumentar e desenvolver a query, aumentar a performance do script, etc. isto foi só um pequeno exemplo do que se pode fazer com a search do twitter.</p>
<h3>Bibliografia</h3>
<p style="text-align: left;">Regex utilizado no meu código: <a title="Twitter email grabber" href="http://www.fromzerotoseo.com/twitter-email-grabber/" target="_blank">http://www.fromzerotoseo.com/twitter-email-grabber/</a></p>
<h2 style="text-align: center;">Contribua para este blog deixando</h2>
<h2 style="text-align: center;">a sua opinião e um pouco do seu conhecimento</h2>
</pre>
<div class="shr-publisher-493"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F09%2F22%2Fphp-twitter-bot-crawling-emails%2F' data-shr_title='PHP+Twitter+Bot+%3A%3A+Crawling+Emails'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F09%2F22%2Fphp-twitter-bot-crawling-emails%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F09%2F22%2Fphp-twitter-bot-crawling-emails%2F' data-shr_title='PHP+Twitter+Bot+%3A%3A+Crawling+Emails'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2009/09/22/php-twitter-bot-crawling-emails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Template System KISS #1</title>
		<link>http://joaopedropereira.com/blog/2009/02/09/template-system-kiss-1/</link>
		<comments>http://joaopedropereira.com/blog/2009/02/09/template-system-kiss-1/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 19:07:55 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[Projectos]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=82</guid>
		<description><![CDATA[English Version: The template system was developed with two objectives. The first, turn the development of new designs and the adaptability to new/other situations. The second objective was creating a system that itself was easy to manage, to change and to add new features, like a plugin system or new funcions that will be used [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F02%2F09%2Ftemplate-system-kiss-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F02%2F09%2Ftemplate-system-kiss-1%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<h2>English Version:</h2>
<p>The template system was developed with two objectives.<br />
The first, turn the development of new designs and the adaptability to new/other situations.<br />
The second objective was creating a system that itself was easy to manage, to change and to add new features, like a plugin system or new funcions that will be used on the application. For that I&#8217;ve followed a <a title="Keep It Simple Stupid" href="http://en.wikipedia.org/wiki/Keep_it_Simple_Stupid" target="_blank">KISS</a> (Keep It Simple Stupid) principle.</p>
<p>I hope it will be usefull for your projects. If so, let me know.</p>
<p>I&#8217;m open to comments, sugestions for the next version, etc.<br />
<strong><a title="Template System V.1" href="http://joaopedropereira.com/files/template_system_v1.zip"><img title="Download It" src="http://joaopedropereira.com/images/icon_download.gif" alt="Download:" width="16" height="16" /> Download Template System</a></strong><br />
<em>P.S &#8211; Sorry for the bad documentation and my bad english</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Versão em Português:</h2>
<p>Como tinha prometido aqui está o meu sistema de templates.<br />
Este sistema de templates foi desenvolvido tendo em conta dois aspectos.</p>
<p>O primeiro, o de facilitar o desenvolvimento de novos desenhos e de adaptação dos mesmo às situações necessárias, o segundo aspecto centra-se na própria personalização do sistema, tendo em conta uma filosofia <a title="Keep It Simple Stupid" href="http://pt.wikipedia.org/wiki/Keep_it_Simple_Stupid" target="_blank">KISS</a> é possível com a simplicidade do sistema, no futuro, adicionar-lhe facilmente características como a adaptação para utilizar um sistema de plugins no core da aplicação ou mesmo simplesmente adicionar-lhe funções base que sejam necessárias num outro sistema (caso se queira fazer uma passagem deste módulo para outra aplicação).</p>
<p>Espero que vos seja útil. Se for, gostava de o saber.</p>
<p>Estou aberto a comentários, sugestões para uma próxima versão, etc.</p>
<p><strong><a title="Template System V.1" href="http://joaopedropereira.com/files/template_system_v1.zip"><img title="Download It" src="http://joaopedropereira.com/images/icon_download.gif" alt="Download:" width="16" height="16" /> Download do Sistema de Templates</a></strong><br />
<em>P.S &#8211; Desculpem a má documentação.</em></p>
<div class="shr-publisher-82"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F02%2F09%2Ftemplate-system-kiss-1%2F' data-shr_title='Template+System+KISS+%231'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F02%2F09%2Ftemplate-system-kiss-1%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F02%2F09%2Ftemplate-system-kiss-1%2F' data-shr_title='Template+System+KISS+%231'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2009/02/09/template-system-kiss-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

