<?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>Bloix &#187; Júlio Pontes</title>
	<atom:link href="http://www.bloix.com.br/author/julio/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bloix.com.br</link>
	<description>Tudo sobre Marketing Digital, Portais Web, Lojas Vituais, Social Media Marketing e outros Projetos Digitais, na visão dos Colaboradores NOIX.</description>
	<lastBuildDate>Wed, 01 Feb 2012 20:27:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>WebJoomlaApi</title>
		<link>http://www.bloix.com.br/gestaodeconteudo/webjoomlaapi</link>
		<comments>http://www.bloix.com.br/gestaodeconteudo/webjoomlaapi#comments</comments>
		<pubDate>Mon, 31 Aug 2009 17:57:36 +0000</pubDate>
		<dc:creator>Júlio Pontes</dc:creator>
				<category><![CDATA[Gestão de Conteúdo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Domain Drive Design]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[WebJoomlaApi]]></category>

		<guid isPermaLink="false">http://www.noix.blog.br/?p=159</guid>
		<description><![CDATA[Ultimamente tenho passado boa parte do meu tempo desenvolvendo uma aplicação chamada WebJoomlaAPI. Uma API que visa padronizar, centralizar e facilitar a utilização de recursos do Joomla! de forma legível e reutilizável. Essa API foi construida utilizando Fluent Interface e outros conceitos do DDD(Domain Driven Design). Em uma determinada área da sua aplicação você necessita [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">
<p>Ultimamente tenho passado boa parte do meu tempo desenvolvendo uma aplicação chamada <strong>WebJoomlaAPI</strong>. Uma API que visa padronizar, centralizar e facilitar a utilização de recursos do Joomla! de forma legível e reutilizável. Essa API foi construida utilizando <em>Fluent Interface</em> e outros conceitos do DDD(<em><a href="http://www.tupi.etc.br/tags/domain-driven-design/">Domain Driven Design</a></em>).</p>
<p>Em uma determinada área da sua aplicação você necessita apresentar “<em>as últimas noticias da categoria (Desenvolvimento) que foram criados pelo usuário Joomila</em>” para conseguir realizar essa tarefa você precisa conhecer um conjunto de regras de como funciona o conteúdo, usuário, a relação entre conteúdo e usuário, como fazer uma consulta, etc.</p>
<p>Uma forma de realizar essa tarefa é com esse seguinte trecho de código:</p>
<p><span id="more-159"></span>//pegando o Objeto Database</p>
<pre>$db = JFactory::getDBO();

$query = "SELECT "
." c.*, "
." u.name, "
."FROM "
." #__content as c"
." left join #__categories as cat ON(c.catid = cat.id)"
." left join #__users as u ON(c.created_by = u.id)"
." WHERE "
." cat.title = 'Desenvovimento' AND"
." u.username = 'Joomila'";

$db-&gt;setQuery( $query );
$rows = $db-&gt;loadObjecList();

foreach( $rows as $row )
{
echo 'Titulo: '.$row-&gt;title;
}</pre>
<p>Não é muito difícil entender como funciona este código… mas ele poderia ser bem melhor.</p>
<p>A WebJoomlaAPI é acessada através de uma interface que é semânticamente organizada e foi pensada para ser legível e fluente!</p>
<p>Veja o mesmo código acima utilizando essa nova API.</p>
<pre>jimport('webjoomlaapi.factory');
$webJoomlaApi = new WebJoomlaApi();
$content = $webJoomlaApi-&gt;grammar('content');
$content-&gt;lists()
-&gt;lastet()
-&gt;published()
-&gt;fromCategory()
-&gt;withName('Desenvolvimento')
-&gt;andContent()
-&gt;fromUser()
-&gt;withName('Joomila');

$rows = $content-&gt;getRows();

foreach( $rows as $row )
{
echo 'Titulo: '.$row-&gt;title;
}</pre>
<p>Bem interessantem não?</p>
<p>Um ponto interessante é que nesse código você está chamando uma série de métodos encadeados(Method Chaining) apenas configurando o que você precisa.</p>
<p>O grande problema desse tipo de API é que  quanto mais fácil fica para o usuário, ocasionalmente mais dificil e complexo fica sua implementação. Porem o resultado final para esse tipo de aplicação facilita muito a visão, manutenção, e desenvolvimento de problemas rotineiros do nosso dia-a-dia.</p>
<p>Veja alguns outros recursos dessa API:</p>
<pre>$wja = new WebJoomlaApi();

//Utilizando o menu
$menu = $wja-&gt;grammar('menu');

$rows = $menu-&gt;lists()
-&gt;published()
-&gt;withMenuType('mainmenu')
-&gt;inOrder()
-&gt;getRows();

//Utilização de conteudo
$content = $wja-&gt;grammar('content');
$rows = $content-&gt;lists()
-&gt;fromCategory()
-&gt;withId(1)
-&gt;andContent()
-&gt;lastet()
-&gt;getRows();

$rows = $content-&gt;lists()
-&gt;fromCategory()
-&gt;withId(1)
-&gt;andContent()
-&gt;fromUser()
-&gt;withEmail('julio@noix.com.br')
-&gt;andContent()
-&gt;lastet()
-&gt;getRows();

//Utilização para banners
$banner = $wja-&gt;grammar('banner');
$rows = $banner-&gt;lists()
-&gt;published()
-&gt;fromClient()
-&gt;withName('Open Source Matters')
-&gt;andBanner()
-&gt;fromCategory()
-&gt;withId(1)
-&gt;andBanner()
-&gt;withClickMoreThan(10)
-&gt;getRows();

//Utilização para usuarios
$usuario = $wja-&gt;grammar('user');
$rows = $usuario-&gt;lists()
-&gt;withEmail('julio@noix.com.br')
-&gt;getRows();

$rows = $wja-&gt;grammar('user')-&gt;lists()
-&gt;fromUserGroup()
-&gt;withName('Super Administrator')
-&gt;andUser()
-&gt;withEmail('julio@noix.com.br')
-&gt;getRows();

//Utilização em Categorias
$category = $wja-&gt;grammar('category');
$rows = $category-&gt;lists()
-&gt;fromExtension('com_weblinks')
-&gt;published()
-&gt;getRows();

//use in weblinks
$weblinks = $wja-&gt;grammar('weblink');
$rows = $weblinks-&gt;lists()
-&gt;published()
-&gt;fromCategory()
-&gt;withName('Joomla! Specific Links')
-&gt;andWeblink()
-&gt;approved()
-&gt;inOrder()
-&gt;getRows();</pre>
<p>Como ficaria para pegar a quantidade total utilizando essa API?<br />
<code> </code></p>
<pre>$content-&gt;lists()-&gt;lastet()
-&gt;fromCategory()
-&gt;withId(1)
-&gt;andContent()
-&gt;fromUser()
-&gt;withEmail('julio@noix.com.br')
-&gt;andContent()
-&gt;inOrder();

$rows = $content-&gt;getRows();
$total = $content-&gt;count()-&gt;getResult();</pre>
<p>O que acontece é que como você já configura todos os valores quando utiliza o método <em>count() </em>ele já aproveita toda sua configuração, bastando somente chamar o <em>getResult()</em> que retorna o resultado.</p>
<p>E por que não aplicar a mesma idéia que utilizamos para resolver problemas como o simples envio de um e-mail?</p>
<pre>$email = $wja-&gt;service('email');
$email-&gt;from('fulano@email.com')
-&gt;to('beltrano@email.com')
-&gt;subject('Assunto')
-&gt;body('Teste de envio')
-&gt;send();</pre>
<p>Claro, poderíamos acresentar mais recursos como dizer o template de e-mail. Tudo isso fica transparente para o usuário se está utilizando SMTP, phpmail ou alguma outra forma.</p>
<p>Link para o projeto: <a title="WebJoomlaApi" href="http://code.google.com/p/webjoomlaapi/" target="_blank">WebJoomlaApi</a></p>
<p>Espero que tenham gostado desse meu primeiro post, até breve.</p></div>



Compartilhe em outras redes:


	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=WebJoomlaApi%20-%20http%3A%2F%2Fwww.bloix.com.br%2Fgestaodeconteudo%2Fwebjoomlaapi" title="Twitter"><img src="http://www.bloix.com.br/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.bloix.com.br%2Fgestaodeconteudo%2Fwebjoomlaapi&amp;t=WebJoomlaApi" title="Facebook"><img src="http://www.bloix.com.br/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.bloix.com.br%2Fgestaodeconteudo%2Fwebjoomlaapi&amp;t=WebJoomlaApi&amp;s=%0D%0A%0D%0AUltimamente%20tenho%20passado%20boa%20parte%20do%20meu%20tempo%20desenvolvendo%20uma%20aplica%C3%A7%C3%A3o%20chamada%20WebJoomlaAPI.%20Uma%20API%20que%20visa%20padronizar%2C%20centralizar%20e%20facilitar%20a%20utiliza%C3%A7%C3%A3o%20de%20recursos%20do%20Joomla%21%20de%20forma%20leg%C3%ADvel%20e%20reutiliz%C3%A1vel.%20Essa%20API%20foi%20constr" title="Tumblr"><img src="http://www.bloix.com.br/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.bloix.com.br/feed" title="RSS"><img src="http://www.bloix.com.br/wp-content/plugins/sociable/images/rss.png" title="RSS" alt="RSS" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.bloix.com.br/gestaodeconteudo/webjoomlaapi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

