<?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>MXStudio &#187; Marcelo Ramos</title>
	<atom:link href="http://www.mxstudio.com.br/author/marcelosouza/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Envio de e-mail via SMTP autenticado usando PHP</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/php/envio-de-e-mail-via-smtp-autenticado-usando-php/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/php/envio-de-e-mail-via-smtp-autenticado-usando-php/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 12:10:41 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1203</guid>
		<description><![CDATA[Devido ao grande número de Span que são enviados diariamente, gerando um grande consumo de recursos dos servidores, além da frustração e perda de tempo dos usuários finais, os servidores estão cada vez mais apertando o cerco contra esse tipo de prática, desenvolvendo algoritmos que alem de não conseguir broquear eficientemente esses e-mail acabam broqueando [...]]]></description>
			<content:encoded><![CDATA[<p>Devido ao grande número de Span que são enviados diariamente, gerando um grande consumo de recursos dos servidores, além da frustração e perda de tempo dos usuários finais, os servidores estão cada vez mais apertando o cerco contra esse tipo de prática, desenvolvendo algoritmos que alem de não conseguir broquear eficientemente esses e-mail acabam broqueando mensagem que podem ser importantes. Como por exemplo, o servidor IG, que além de ser o menos eficaz contra esse tipo de pratica, acaba não recebendo nenhum e-mail que não seja enviado por servidor SMTP autenticado. Prejudicando muito os desenvolvedores. Portanto através de uma classe SMTP simples é bastante útil vamos desenvolver um sistema para envio de e-mail com autenticação SMTP. Lembrando que apenas realizar o envio de e-mail autenticado não garante que o seu e-mail não seja classificado como Spam, já que isso não ocorrer, depende de diversos fatores como horário, conteúdo, quantidade, tamanho e etc. Eu utilizo essa classe e nunca tive problemas com nenhum servidor, funciona normalmente com IG, HOTMAIL, BOL, UOL, TERRA, Click21 e muitos outros.</p>
<p>Essa classe faz o envio de e-mails em formato de texto ou HTML. <a href="http://www.marceloramos.blog.br/tutorial/php/smtp.class.php.html" target="_blank"><strong>Faça o Download da Classe</strong></a></p>
<p>Agora vamos fazer a inclusão da   classe<strong> smtp.class.php </strong>que vai realizar a conexão e autenticação SMTP para que os e-mails possam ser   enviados.</p>
<p>Se você estiver no modo de<strong> visualização do projeto </strong>mude para   o<strong> modo de visualização do código.</strong></p>
<p align="center"><a href="http://www.mxstudio.com.br/wp-content/uploads/2008/04/01.gif"><img class="alignnone size-medium wp-image-1204" src="http://www.mxstudio.com.br/wp-content/uploads/2008/04/01.gif" alt="" width="200" height="36" /></a></p>
<p>Dentro do Bloco de código vamos fazer a inclusão da classe <strong>smtp.class.php </strong>através do comando<strong> include</strong><strong> </strong></p>
<p><code>&lt;?php<br />
include ("smtp.class.php");<br />
?&gt;</code></p>
<p>Com a classe já incluída agora vamos configurar a conexão SMTP que necessita de um endereço de servidor (host), usuário (user), senha (pass) e informar que será ativada a autenticação (debug) para que possa enviar os e-mails corretamente. Para fazer a configuração basta apenas declarar o valor das variáveis utilizada na classe com os seus dados.</p>
<p><code>&lt;?php<br />
include ("smtp.class.php");</code></p>
<p>/* Configuração da   classe.smtp.php */<br />
$host = &#8220;smtp.mail.yahoo.com.br&#8221;; /*host do servidor SMTP   */<br />
$smtp = new Smtp($host);<br />
$smtp-&gt;user = &#8220;usuario&#8221;; /*usuario do   servidor SMTP */<br />
$smtp-&gt;pass = &#8220;senha&#8221;; /* senha dousuario do servidor   SMTP*/<br />
$smtp-&gt;debug =true; /* ativar a autenticação   SMTP*/<br />
?&gt;</p>
<p>Para que a mensagem possa ser enviada ela deve conté um remetente ($from) que é o seu e-mail, um destinario ($to) que vai se o e-mail de quem vai receber, um assunto ($subject), e a mensagem ($msg), e depois devemos chamar a classe SMTP, passar as configurações e mandar enviar.</p>
<p><code>/* envia uma mensagem */<br />
$from=   "seuemail@seusite.com.br"; /* seu e-mail */<br />
$to = "destinario@seusite.com.br"; /* o e-mail   cadastrado*/<br />
$subject = "Teste de e-mail utilizando SMTP"; /* assunto da mensagem */<br />
$msg = "Você está recebendo esta mensagem de teste&lt;br&gt;";<br />
$msg .= "Para confirma clique no link abaixo";<br />
$smtp-&gt;Send($to,   $from, $subject, $msg);/* faz o envio da mensagem */</code></p>
<p>Esse é apenas um exemplo, no e-mail do destinario você pode colocar uma variavel vinda de um formulario, ou vindo de um banco de dados. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/php/envio-de-e-mail-via-smtp-autenticado-usando-php/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Leitura de arquivos XML utilizando JavaScript/ DOM</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/javascript/leitura-de-arquivos-xml-utilizando-javascript-dom/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/javascript/leitura-de-arquivos-xml-utilizando-javascript-dom/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 16:25:22 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1145</guid>
		<description><![CDATA[Desde o lançamento do Internet Explorer 5, que segundo a Wikipédia foi em março de 1999, foi introduzido o suporte à linguagem XML, permitindo a manipulação e leitura de arquivos XML. Esse suporte é uma analisador conhecido como XML Parser. O XML Parser analisa e armazena o documento na memória, que pode ser acessado utilizando [...]]]></description>
			<content:encoded><![CDATA[<p>Desde o lançamento do Internet Explorer 5, que segundo a Wikipédia foi em março de 1999, foi introduzido o suporte à linguagem XML, permitindo a manipulação e leitura de arquivos XML. Esse suporte é uma analisador conhecido como XML Parser. O XML Parser analisa e armazena o documento na memória, que pode ser acessado utilizando JavaScript.</p>
<p>Mais não é somente o Internet Explorer que possui suporte para manipulação de XML, o Firefox e todos os navegadores mais modernos também têm.</p>
<p>Para carregar uma string ou um arquivo XML existem duas formas, uma para o Internet Explorer e outro para os demais navegadores como o Firefox.</p>
<p>Nesse primeiro artigo será realizado apenas a leitura dos nós, atributos e valores, no próximo será realizado manipulações como: criar, inserir, remover e alterar os nós, valore e tributos</p>
<p>Para o Internet Explorer, primeiro devemos criar um novo objeto através do ActiveX, em seguida desativar o método asynchronized, para que o navegador congele a execução do script até o carregamento total do arquivo XML e finalmente iniciar o carregamento do arquivo XML para a mémoria, para carregar um arquivo XML deve-se utilizar o load() e caso seja uma string (texto) utilize o loadXml().</p>
<p><code>xmlDoc=new ActiveXObject("Microsoft.XMLDOM");<br />
xmlDoc.async="false";<br />
xmlDoc.load("documento.xml"); // caso seja uma estring utilize loadXml(string)</code></p>
<p>Em outros navegadores incluindo o Firefox existem ainda, mais duas formas para se trabalhar com XML, uma é com string e outra é com arquivos XML. A forma para carregar um arquivo XML nesses navegadores é semelhante à anterior, se diferenciado apenas pelos comandos. Primeiroé necessário criar um objeto XML, depois desativar o método asynchronized, pelo mesmo motivo informado na forma anterior e em seguida executar o comando load() para iniciar o carregamento.</p>
<p><code>xmlDoc=document.implementation.createDocument("","",null);<br />
xmlDoc.async="false";<br />
xmlDoc.load("documento.xml");</code></p>
<p>Para trabalhar com strings no Firefox e outros navegadores, utilizamos o comando DOMParser() para criar o objeto, e em seguida passamos a string para carregar</p>
<p><code>parser=new DOMParser();<br />
xmlDoc=parser.parseFromString(string,"text/xml");</code></p>
<p>Para facilitar o carregamento de um arquivo XML, será criado uma função em JavaScript, utilizando o try e catch, identificando a forma correta de carregar o arquivo XML de acordo com o navegador. Salve esse arquivo em uma página JS, assim quando for utiliza-lo, basta somente incluí-la. Eu salvei  com o nome de loadXMLDoc.js.</p>
<p><code>function loadXMLDoc(docname)<br />
{<br />
try //Tenta com o Internet Explorer<br />
{<br />
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");<br />
}<br />
catch(e)<br />
{<br />
try // Caso de erro tentar com o Firefox, Mozilla, Opera, etc.<br />
{<br />
xmlDoc=document.implementation.createDocument("","",null);<br />
}<br />
catch(e) {alert(e.message)}<br />
}<br />
try<br />
{<br />
xmlDoc.async=false;<br />
xmlDoc.load(docname);<br />
return(xmlDoc);<br />
}<br />
catch(e) {alert(e.message)}<br />
return(null);<br />
}</code></p>
<p>Como já foi explicado como carregar o arquivo XML para a memória do navegador, agora éhora de aprender a manipulá-lo. Para manipula-lo será utilizado JavaScript juntamente com DOM. O DOM fornecer um acesso à estrutura e conteúdo do documento.</p>
<p>O arquivo XML é composto por uma estrutura de TAGs, essas TAGs possuem TAGs pai, TAGs filhas, que também possuem, e são TAGs irmãs, como em uma arvore genealógica. Uma TAG pai pode possui diversas TAGs filhas, sendo essas TAGS filhas também irmãs uma das outras. <strong>Em DOM essas TAGs são conhecidas como nós</strong>, sendo assim, os nós pais podem também possui diversos filhos, tendo assim também irmãos. Sempre que fala em nó estarei falando em TAG.</p>
<ul>
<li>Na estrutura de nós, o nó superior é chamado de nó raiz</li>
<li>Cada nó, exceto o nó raiz, tem exatamente um nó pai</li>
<li>Um nó pode ter qualquer número de filhos</li>
<li>Irmãos são os nós que possuem o mesmo pai</li>
</ul>
<p>No XML Document Object Model (DOM), cada nó é um objeto. Objetos possuem métodos (funções) e propriedades (Informação sobre o objeto), que pode ser acessado e manipulado por JavaScript. Vejas os principais atributos na tabela abaixo</p>
<table border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td bgcolor="#eeeeee"><strong>Propriedade</strong></td>
<td bgcolor="#eeeeee"><strong>Tipo</strong></td>
<td bgcolor="#eeeeee"><strong>Descrição</strong></td>
</tr>
<tr>
<td>nodeName</td>
<td>String</td>
<td>O nome do nó</td>
</tr>
<tr>
<td>nodeValue</td>
<td>String</td>
<td>O valor do nó</td>
</tr>
<tr>
<td>nodeType</td>
<td>Number</td>
<td>O tipo do nó (elemento, texto, comentário&#8230;)</td>
</tr>
<tr>
<td>parentNode</td>
<td>Node</td>
<td>O elemento pai</td>
</tr>
<tr>
<td>childNodes</td>
<td>NodeList</td>
<td>A coleccção de nós filhos</td>
</tr>
<tr>
<td>firstChild</td>
<td>Node</td>
<td>O primeiro filho. null se não existir</td>
</tr>
<tr>
<td>lastChild</td>
<td>Node</td>
<td>O último filho. null se não existir</td>
</tr>
<tr>
<td>previousSibling</td>
<td>Node</td>
<td>O irmão anterior</td>
</tr>
<tr>
<td>nextSibling</td>
<td>Node</td>
<td>O irmão seguinte</td>
</tr>
<tr>
<td>attributes</td>
<td>NamedNodeMap</td>
<td>A colecção de atributos</td>
</tr>
<tr>
<td>ownerDocument</td>
<td>Document</td>
<td>O documento a que pertence o nó</td>
</tr>
</tbody>
</table>
<p>As três primeiras propriedades são muito importantes para obter informações sobre os nós. As demais são utilizadas para navegar e obter um nó especifico. Dentre as propriedades acima uma que merece atenção é a nodeType, que retornar o tipo de nó. Ela é muito importante, pois navegadores como Firefox e outros podem reconhecer espaços ou linhas em branco como sendo um nó, então utilizamos o nodeType para testar o nó e descobrir se ele é realmente um nó (elemento) utilizado em arquivos XML.</p>
<h2>Propriedade do nodeType</h2>
<p>O nodeType especifica o tipo de nó e é  somente leitura. O mais importante tipos de nó são:</p>
<table border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td bgcolor="#eeeeee"><strong><span class="google-src-text">Tipo de nó</span></strong></td>
<td bgcolor="#eeeeee"><strong>NodeType </strong></td>
</tr>
<tr>
<td valign="top">Elemento</td>
<td valign="top">1</td>
</tr>
<tr>
<td valign="top">Atributo</td>
<td valign="top">2</td>
</tr>
<tr>
<td valign="top">Texto</td>
<td valign="top">3</td>
</tr>
<tr>
<td valign="top">Comentário</td>
<td valign="top">8</td>
</tr>
<tr>
<td valign="top">Documento</td>
<td valign="top">9</td>
</tr>
</tbody>
</table>
<h3>Alguns métodos para manipular os nós</h3>
<table border="0" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td bgcolor="#eeeeee"><strong>Método</strong></td>
<td bgcolor="#eeeeee"><strong>Retorna</strong></td>
<td bgcolor="#eeeeee"><strong>Descrição</strong></td>
</tr>
<tr>
<td>getAttribute(strName)</td>
<td valign="top">Element</td>
<td valign="top">
<p align="left">Retornar o atributo</p>
</td>
</tr>
<tr>
<td>getNamedItem()</td>
<td valign="top">Element</td>
<td valign="top">Retorna o nó especificado (por nome).</td>
</tr>
<tr>
<td>getElementsByTagName(tagname)</td>
<td valign="top">NodeList</td>
<td valign="top">Retorna diversos objetos com a tag específicada em uma array. Informarmos uma tag e temos todas aquelas que constam na página.</td>
</tr>
</tbody>
</table>
<p>Dessa tabela de métodos utilizaremos mais o método getElementByTagName(nó). Como o arquivo XML e composto por diversos nós, esse método pegar todos os nós que constam na página e gerar uma array,  esses nós são organizado em uma lista onde cada nó receber um índice, esses índices servem para organizar e pode acessar determinado nó, o índice sempre começa com zero, essa lista gerada é conhecida como NodeList. Existem três maneiras de acessar essa lista.</p>
<ol>
<li>Utilizando o getElementByTagName(nó) seguido por um valor do índice, como por exemplo, para acessar o primeiro nó especificamos getElementByTagName[0], ou para acessar o segundo nó getElementByTagName[1].</li>
<li>Como todos os nós estão em uma lista, podemos recuperá-lo através de um comando de repetição, como o caso do comando for</li>
<li>E ainda usando o getElementByTagName(nó) para pegar um determinado nó e utilizar os atributos que serão citados em uma tabela abaixo para navegar pelos nós, como por exemplos o pegar o segundo filho, ou terceiro pai.</li>
</ol>
<p>Como já foi criada uma função no inicio para carregar o arquivo XML, é necessário agora inclui essa função dentro da tag HEAD, depois chamá-la passando a localização do documento XML, por questão de segurança o documento XML só será carregado se estiver no mesmo domínio que esta sendo executado o script, caso contrário, ocorrera um erro informando aceso negado.</p>
<p><code>&lt;script type="text/javascript" src="loadXMLDoc.js"&gt;<br />
xmlDoc.load("documento.xml"); </code></p>
<p>Supondo que a estrutura do arquivo XML, armazenado na variável xmlDoc seja:</p>
<div class="code_js" style="0pt;">&lt;root&gt;<br />
&lt;nopai atributo=&#8221;PrimeiroFilho&#8221;&gt;<br />
&lt;nofilho&gt;Texto do primeiro nó filho&lt;/nofilho&gt;<br />
&lt;nofilhoeirmao&gt;Texto do primeiro nó filho e irmao&lt;/ nofilhoeirmao &gt;<br />
&lt;/nopai&gt;<br />
&lt;nopai atributo=&#8221;SegundoFilho&#8221;&gt;<br />
&lt;nofilho&gt;Texto do segundo nó filho &lt;/nofilho&gt;<br />
&lt;nofilhoeirmao&gt;Texto do segundoo nó filho e irmao&lt;/ nofilhoeirmao &gt;<br />
&lt;/nopai&gt;<br />
&lt;nopai atributo=&#8221;TerceiroFilho&#8221;&gt;<br />
&lt;nofilho&gt;Texto do terceiro nó filho &lt;/nofilho&gt;<br />
&lt;nofilhoeirmao&gt;Texto do terceiro nó filho e irmao&lt;/ nofilhoeirmao &gt;<br />
&lt;/nopai&gt;<br />
&lt;/root&gt;</p>
<p>A propriedade <strong>parentNode</strong> é o nó pai ou seja a TAG &lt;nopai&gt;.<br />
A propriedade <strong>childNodes</strong> são todos os filhos do nó pai, ou seja as três tags &lt;nofilho&gt; e as três &lt;nofilhoeimao&gt;<br />
A propriedade <strong>firstChild</strong> é o primeiro filho do nó pai, ou seja a tag &lt;nofilho&gt;<br />
A propriedade <strong>lastChild </strong>é o último filho do nó pai, ou seja a última tag &lt;nofilhoeirmao&gt;<br />
A propriedade a<strong>ttributes</strong> são os atributos atributo=&#8221;"</p>
<p>Depois de identificado o nó, utilizamos:</p>
<p>A propriedade <strong>nodeValue</strong> é o valor do nó, ou seja, o texto “Texto” do nó filho &lt;nofilho&gt;<br />
A propriedade <strong>nodeName</strong> é o nome do proprio nó<br />
A propriedade <strong>nodeType</strong> é o tipo de nó</p>
<h3>Acessando os nós</h3>
<p>O texto está armazenado nos nós filhos &lt;nofilho&gt;, para acessar-lo e necessário primeiro utilizar  o método getElementByTagName(“nofilho”) acompanhador do índice 0 para pegar o primeiro no &lt;noFilho&gt;, em seguida utilizar o atributo childNodes para acessar os nós filhos, e para retornar o valor do nó utilizamos o atributo nodeValue, resultando na seguinte declaração:</p>
<p><code>texto = xmlDoc.getElementsByTagName("nofilho")[0].childNodes[0].nodeValue;<br />
document.write(texto);</code></p>
<p>Após a execução da declaração a variável texto vai ter o valor da primeira tag &lt;nofilho&gt;, ou seja, o valor “Texto do primeiro nó filho” isso porque:</p>
<p><strong>xmlDoc</strong> é a estrutura XML armazenada na memória<br />
<strong>getElementsByTagName(&#8220;nofilho&#8221;)[0]</strong> pegar somente o primeiro nó &lt;nofilho&gt;.<br />
<strong>childNodes[0] </strong>acessa o primeiro nó filho<br />
<strong>nodeValue</strong> retorna o valor ou texto do nó<br />
<strong>document.write(texto) </strong>escrever o valor do nó na tela</p>
<p>Para acessar e pegar o valor do segundo nó filho &lt;nofilhoeirmao&gt;, basta apenas passa-lo para o método getElementByTagName()</p>
<p><code>texto = xmlDoc.getElementsByTagName("nofilhoeirmao")[0].childNodes[0].nodeValue;<br />
document.write(texto);</code></p>
<p>No primeiro exemplo foi pego apenas o primeiro nó filho &lt;nofilho&gt;, de cada nó pai, pois informamos o número do índice ([0]) junto com o método getElementByTagName() , mas no arquivo XML existem três nós filhos &lt;nofilho&gt;. Para pode acessar e retonar todos os nós  filho &lt;nofilho&gt;, é só  utilizar um comando de repetição ou loop, como o caso do loop for, onde será retornado todos os nós filhos<br />
<code><br />
x=xmlDoc.getElementsByTagName("nofilho");<br />
for (i=0; i&lt;x.length; i++)<br />
{<br />
document.write(x[i].childNodes[0].nodeValue);<br />
document.write("&lt;br /&gt;");<br />
}</code><br />
Você deve ter percebido que estamos apenas pegando os valores dos primeiros nós filhos &lt;nofilho&gt;, de cada nó pai &lt;nopai&gt;, sendo de cada nó pai existem três nós filhos. Para pega todos os nós filhos de um pai incluindo o nó filho e irmão &lt;nofilhoeirmao&gt; que também é um filho, devemos:</p>
<p>Primeiro pegar o nó pai &lt;nopai&gt; e depois acessar todos os nós filhos, sendo os nós &lt;nofilho&gt; e &lt;nofilhoeirmao&gt; e armazena-los na variável X, essa variável terá a lista com todos os nós filhos do nó pai, e será utilizada como parâmetro do comando de repetição for.</p>
<p><code>x=xmlDoc.getElementsByTagName("nopai")[0].childNodes;</code></p>
<p>Segundo  acessar o nó pai &lt;nopai&gt; e com o atributo firstChild acessar o primeiro filho, e armazena-lo na variável y:</p>
<p><code>y=xmlDoc.getElementsByTagName("nopai")[0].firstChild;</code></p>
<p>A variavel <strong>y</strong> vai acessar o primeiro filho, depois de acessa o primeiro nó filho, será utilizado o atributo nextSibling para ir acessando os próximos filhos. Mas como já sabemos o Firefox pode interpretar espaços vazios como sendo um nó, isso pode atralhar e da erro no script, ja que teremos que acessar nó por nó, então antes de retornar o valor, vamos criar um teste com base na propriedade nodeType para sabe se realmente é um nó, como vimos um nó é um elemento, e todo elemento tem valor igual a 1 na propriedade nodeype, então:</p>
<p><code>if (y.nodeType==1) {<br />
document.write(y.childNodes[0].nodeValue + "&lt;br /&gt;");<br />
}</code></p>
<p>Nó final da declaração, como ja foi retornado o primeiro valor do nó filho, será utilizado o nextSibling para acessar o próximo nó filho</p>
<p><code>y.nextSibling;</code></p>
<p>Ao final de tudo a declaração deve ser assim;</p>
<p><code>x=xmlDoc.getElementsByTagName("nopai")[0].childNodes;<br />
y=xmlDoc.getElementsByTagName("nopai")[0].firstChild;<br />
for (i=0;i&lt;x.length;i++)<br />
{<br />
if (y.nodeType==1)<br />
{<br />
document.write(y.childNodes[0].nodeValue + "&lt;br /&gt;");<br />
}<br />
y=y.nextSibling;<br />
}</code></p>
<h3>Como avança e volta um nó</h3>
<p><a href="http://marceloramos.blog.br/tutorial/xml/dom_xml/exemplo_next.html">Veja o exemplo aqui.</a> A função getElementByTagName() armazena todos os nós em uma array, essa array como foi visto logo no inicio pode ser acessado pelo valor do índice, que sempre começar com zero. Será criada a variável <strong>i</strong> que armazenará que índice deve ser acessado, com o índice começa com zero, esse será o valor de <strong>i</strong>.</p>
<p>O que as funções <strong>próximo</strong> e <strong>anterior</strong> vai fazer e mudar os índices na lista de nós, como cada nó e representado nessa lista com um valor que se inicia com zero e vai até a última quantidade de nó, quando for acionado a função <strong>próximo()</strong> ele apenas soma mais um na variável que armazena o valor do índice da lista, assim ele retorna o próximo nó, e caso seja acionada a função <strong>anterior()</strong> ele diminua um valor do índice, retornando um índice anterior. Mais para evitar que no índice não tenha valores maiores que a quantidade de nós na lista, criaremos a variável x que terá o quantidade de nós no documento, e a função próximo será executada somente até o ultimo nó, evitando assim que seja acessando índices que não exista e retorne resultados em branco.</p>
<p><code>var x=xmlDoc.getElementsByTagName("nopai");<br />
i=0;<br />
function next()<br />
{<br />
if (i&lt;x.length)<br />
{<br />
i++;<br />
display();<br />
}<br />
}<br />
function previous()<br />
{<br />
if (i&gt;0)<br />
{<br />
i--;<br />
display();<br />
}<br />
}</code></p>
<p>Agora iremos criar uma função para retornar os valores que estão nos nós. E mostra-los dentro da div cujo id é<strong> mostrar</strong></p>
<p><code>function display()<br />
{<br />
tagpai=(x[i].getElementsByTagName("nofilho")[0].childNodes[0].nodeValue);<br />
tagfilho=(x[i].getElementsByTagName("nofilhoeirmao")[0].childNodes[0].nodeValue);<br />
document.getElementById("mostrar").innerHTML="Tag pai: " + tagpai + "&lt;br /&gt;Tag filho: " + tagfilho;<br />
}</code></p>
<p>A função display vai carregar no inicio a div <strong>mostrar</strong>, para que os valores do nós seja injetado dentro dela, e os botões serão responsáveis por acionar a função próximo e anterior</p>
<p><code>&lt;body onLoad="display()"&gt;<br />
&lt;div id='mostrar'&gt;<br />
&lt;/div&gt;<br />
&lt;br /&gt;<br />
&lt;input type="button" onClick="previous()" value="previous" /&gt;<br />
&lt;input type="button" onClick="next()" value="next" /&gt;</code></p>
<h3>Acessando os atributo dos nós</h3>
<p>No arquivo XML existem atributos (atributo=&#8221;PrimeiroFilho&#8221;), esses atributos podem ser lidos utilizando o atributo <span style="&quot;Courier New&quot;;"><strong>attributes</strong>. Para acessar um atributo do arquivo XML, utilize o método <strong>getElementsByTagName(&#8220;nopai&#8221;)</strong> para acessar o nó com atributo e <strong>getAttribute(&#8220;atributo&#8221;)</strong> para retorna o valor do atributo</span></p>
<p><code>texto=xmlDoc.getElementsByTagName("nopai")[0].getAttribute("atributo");<br />
document.write(texto);</code></p>
<p>Para acessar todos os valores dos tributos, é so utilizar  <span style="&quot;Courier New&quot;;">o método getElementsByTagName(&#8220;nopai&#8221;) para acessar o nó pai e utilizar um comando de repetição</span></p>
<p><code>var x=xmlDoc.getElementsByTagName('nopai');<br />
for (i=0;i&lt;x.length;i++)<br />
{<br />
document.write(x[i].getAttribute('atributo'));<br />
document.write("&lt;br /&gt;");<br />
}</code></p>
<h3>Acessando os nome dos nós</h3>
<p>Para retornar o nome do nó é necessário pega-lo com o método método getElementsByTagName(tagname) e utilizar o atributo nodeName</p>
<p><code>texto = xmlDoc.getElementsByTagName("nopai")[0].nodeName;<br />
document.write(texto);</code></p>
<p>Para acessar os nome de todo os nós que o método getElementsByTagName(tagname) recuperou, basta apenas utilizar o atributo nodeName com um comando de repetição</p>
<p><code>x=xmlDoc.getElementsByTagName("nofilho");<br />
for (i=0; i&lt;x.length; i++)<br />
{<br />
document.write(x[i].nodeName);<br />
document.write("&lt;br /&gt;");<br />
}</code></p>
<p>Qualquer dúvida envie um email para <a href="mailto:marcelo@marceloramos.blog.br">marcelo@marceloramos.blog.br</a> ou acesse meu blog <a href="http://www.marceloramos.blog.br/">www.marceloramos.blog.br</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/javascript/leitura-de-arquivos-xml-utilizando-javascript-dom/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Aprenda a Criar uma Nuvem de Tags (Tag Cloud) com php</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/php/aprenda-a-criar-uma-nuvem-de-tags-tag-cloud-com-php/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/php/aprenda-a-criar-uma-nuvem-de-tags-tag-cloud-com-php/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 17:53:14 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1093</guid>
		<description><![CDATA[Esse recurso esta sendo muito utilizado na web, e é muito útil, pois reuni as mais importantes tags, permitindo que os usuários encontrem informações mais úteis, relevantes e com maior rapidez. E ainda fornece uma navegação alternativa e intuitiva para os usuários. Para criar o Tag Cloud ou nuvem de tag utilizaremos a classe em [...]]]></description>
			<content:encoded><![CDATA[<p>Esse recurso esta sendo muito utilizado na web, e é muito útil, pois  reuni as mais importantes tags, permitindo  que os usuários encontrem  informações mais úteis, relevantes e com maior rapidez. E ainda fornece  uma navegação alternativa e intuitiva para os usuários.</p>
<p>Para criar o Tag Cloud ou nuvem de tag utilizaremos a classe em php  TagCloud Maker, criada pelo Cal Evans (calevans.com) sobre a Licença  GPL 2.0. Essa classe faz o processamento de todas as tag, selecionando  as mais repetidas e assim gerando a nuvem de tag. A TagCloud Maker  mostrar as tag mais importantes (repetidas) com tamanhos diferentes e  informando a quantidades de vezes que ela se repete. Mais para ela  funcionar necessita de uma  array com as tags. Essa array pode ser  criada manualmente, onde você pode digitar as tags, ou pode se gerada  por um banco de dados.</p>
<p><a href="http://marceloramos.blog.br/tutorial/arquivos/cal_tagcloud_marke.zip"><strong>Download da Classe TagCloud Maker</strong> zipada e já com uma página de exemplo</a>.</p>
<h3>Criando array para utilização da TagCloud Maker</h3>
<p>Para criar a array manualmente, basta apenas substituir a palavra  Tag pela tag que você deseja, e acrescentar mais quantas tags você  quiser.</p>
<p><code>$Array = array();<br />
$ Array [ ]='Tag1';<br />
$ Array [ ]=' Tag1';<br />
$ Array [ ]='Tag2';<br />
$ Array [ ]=' Tag2';<br />
$ Array [ ]='Tag3';</code></p>
<p>Para criar a array através de um banco de dados vamos utilizar o código abaixo:</p>
<p><code>$hostname_conn = "servidor";  /*Endereço do servidor MySQL */<br />
$database_conn = "database";  /* Nome do banco de dados */<br />
$username_conn = "usuario"; /* Usuario do banco de dados */<br />
$password_conn = "senha"; /* senha do banco de dados */<br />
$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);<br />
mysql_select_db($database_conn, $conn);<br />
$query_rsTagCloud = "SELECT tag FROM tags";<br />
$rsTagCloud = mysql_query($query_rsTagCloud, $conn) or die(mysql_error());<br />
$row_rsTagCloud = mysql_fetch_assoc($rsTagCloud);<br />
$totalRows_rsTagCloud = mysql_num_rows($rsTagCloud);<br />
$Array = array();<br />
do {<br />
$tag = $row_rsTagCloud['tag'];<br />
$ Array []=$tag;<br />
} while ($row_rsTagCloud = mysql_fetch_assoc($rsTagCloud));</code></p>
<h3>Instalação da classe TagCloud Maker</h3>
<p>Agora como já temos as tags inseridas em uma Array vamos instalar o TagCloud Marker</p>
<p><code>&lt;?php<br />
require_once('TagCloud.php'); /* Localização da Classe */<br />
$o = new Cal_TagCloud($Array); /* Chama a classe passando a array com as tag */<br />
$o-&gt;setSpacer("   ") /* Elemento que vai separar as tag */<br />
-&gt;setMaxTags(25) /* Qunatidade de Tags que serão mostrada */<br />
-&gt;setShowScore('score')<br />
-&gt;setLink('http://www.marceloramos.blog.br/tutorial/buscar_tag.php?tag=%s') /* Paginá que realizará a busca das tag */<br />
-&gt;buildCloud();<br />
?&gt;<br />
&lt;div id="tag_cloud"&gt;<br />
&lt;?php echo $o-&gt;outputCloud; ?&gt;<br />
&lt;/div&gt;</code></p>
<p>Para exibir as tags em tamanho diferentes basta apenas inserir essa  folha de estilo, a classe vai selecionar automaticamente os estilos  para cada tag exibida</p>
<p><code>/* Nuvem de Tag */<br />
.tagcloud_1 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .3;<br />
font-size: 8pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_2 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .4;<br />
font-size: 9pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_3 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .4;<br />
font-size: 10pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_4 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .5;<br />
font-size: 11pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_5 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .5;<br />
font-size: 12pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_6 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .6;<br />
font-size: 13pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_7 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .7;<br />
font-size: 14pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_8 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .8;<br />
font-size: 15pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_9 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
opacity: .9;<br />
font-size: 16pt;<br />
line-height: 18pt;<br />
}<br />
.tagcloud_10 {<br />
font-family: "Trebuchet MS", Verdana, Arial, Geneva, Tahoma, Helvetica, sans-serif;<br />
font-size: 17pt;<br />
line-height: 18pt;<br />
}<br />
</code><br />
Qualquer dúvida envie um email para <a href="mailto:marcelo@marceloramos.blog.br">marcelo@marceloramos.blog.br</a> ou acesse meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/php/aprenda-a-criar-uma-nuvem-de-tags-tag-cloud-com-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Boxes e listas arrastáveis</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/boxes_e_listas_arrastaveis/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/boxes_e_listas_arrastaveis/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[&#201; muito f&#225;cil e r&#225;pido criar boxes e listas arrast&#225;veis e auto-orden&#225;veis.  Utilizando Java Script n&#227;o-obstrutivo e todos seus arquivos pesam apenas 20Kb.]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h1><strong>Coluna Dreamweaver &#8211; Boxes e listas  arrastáveis com ajax</strong></h1>
<h3>Introdução</h3>
<p>É muito fácil e rápido criar boxes e listas arrastáveis utilizando a  biblioteca <a href="http://blog.tool-man.org/" target="_blank">ToolMan</a>, que foi desenvolvida pelo<a href="http://blog.tool-man.org/" target="_blank"> Tim Taylor</a> e não possui nenhuma  restrição a sua utilização. O<a href="http://blog.tool-man.org/" target="_blank"> ToolMan</a> utiliza Java script não-obstrutivo e  todos seus arquivos pesam apenas 20Kb. São utilizados para criar boxes e  listas; arrastáveis, editáveis e auto-ordenáveis.  O <a href="http://neb.net/nlog/" target="_blank">Blog BeNLOG</a> adaptou o ToolMan para trocar  itens entre listas diferentes, veja um exemplo de<a href="http://www.marceloramos.blog.br/tutorial/ajax/tool-man/examples/listas.php"> listas arrastáveis</a>,<a href="http://www.marceloramos.blog.br/tutorial/ajax/tool-man/examples/dragging.php"> boxes arrastáveis</a> e <a href="http://www.marceloramos.blog.br/tutorial/ajax/tool-man/examples/multi_listas.php">listas arrastáveis que trocam itens</a>.</p>
<h3>Conceitos</h3>
<p>Para utilizar o ToolMan é necessario: (1º) criar uma variável tendo como valor a identificação do elemento que será arrastado (<strong>var <em>nome_da_variável</em> = document.getElementById(&#8220;<em>id_da_div</em>&#8220;)</strong>), (2º) digitar  o comando para executar o TollMan, sendo seu valor a variável que foi criada (<strong>drag.createSimpleGroup(<em>nome_da_variável_que_você_criou</em>)</strong>) e caso queira, (3º) digitar o comando  para limitação ou restrição, que pode ser: somente na vertical, horizontal ou entre diversas outras citadas abaixo.</p>
<h3>Pré-requisito</h3>
<p>Arquivos para os boxes: <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/core.js" target="_blank">core.js</a> (1k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/events.js" target="_blank">events.j</a>s (1k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/css.js" target="_blank">css.js</a> (1k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/coordinates.js" target="_blank">coordinates.js</a> (4k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/drag.js" target="_blank">drag.js (7k)</a>.<br />
Arquivos para as listas: <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/dragsort.js" target="_blank">dragsort.js </a>(2k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/source/org/tool-man/cookies.js" target="_blank">cookies.js</a> (1k) mais os de cima<br />
Arquivos para as listas que trocam os itens: <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/multi/multi_arquivos/coordinates.js">coordinates.js</a> (3k), <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/multi/multi_arquivos/drag.js">drag.js</a> (7k) e <a href="http://marceloramos.blog.br/tutorial/ajax/tool-man/multi/multi_arquivos/dragdrop.js">dragdrop.js (6k)</a></p>
<h3>Conteúdo</h3>
<h2><strong>Boxes arrastáveis</strong></h2>
<p>Primeiro inclua os arquivos; core.js, events.js, css.js, coordinates.js,  drag.js dentro da tag HEAD.</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;../source/org/tool-man/core.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;../source/org/tool-man/events.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;../source/org/tool-man/css.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;../source/org/tool-man/coordinates.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;../source/org/tool-man/drag.js&#8221;&gt;&lt;/script&gt;</p>
<p>Crie uma função em Java Script para que ao carregar toda a pagina HTML execute o  ToolMan. Dentro dessa função vamos carregar três variáveis do ToolMan</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221;&gt;<br />
window.onload = function() {<br />
var group<br />
var coordinates = ToolMan.coordinates()<br />
var drag = ToolMan.drag()<br />
}<br />
&lt;/script&gt;</p>
<p>Ainda dentro do código Java Script é necessário  criar as variáveis de configuração dos boxes. Cada tipo de box requer um configuração, veja abaixo as disponíveis:</p>
<p><strong>Box Drag</strong></p>
<p>O Box Drag  fica solto na tela podendo ser arrastado para  qualquer lugar. Para utilizá-lo, crie uma variável  tendo como valor a identificação  do elemento (<strong>var <em>boxDrag</em></strong> = <strong>document.getElementById(&#8220;<em>id_da_div_boxDrag</em>&#8220;)</strong>) nessa caso a variável vai se chamar<em><strong> boxdrag</strong></em>, digite o comando para executar o ToolMan  e coloque como valor desse comando a variável que você criou, ficando assim: <strong>drag.createSimpleGroup(<em>boxDrag</em>)</strong></p>
<p id="codigo">     var <strong>boxDrag</strong> = document.getElementById(&#8220;<strong>id_da_div_boxDrag</strong>&#8220;)<br />
drag.createSimpleGroup(<strong>boxDrag</strong>)</p>
<p>Agora é só criar uma DIV com o ID sendo igual ao informado na variável</p>
<p id="codigo">     &lt;div id=&#8221;id_da_div_boxDrag&#8221;&gt;<br />
&lt;p&gt;Conteúdo&lt;/p&gt;<br />
&lt;/div&gt;</p>
<p><strong>Box Vertical</strong></p>
<p>O Box Vertical pode se arrastado somente na vertical.  Para utilizá-lo, crie uma variável  (<strong>boxVerticalOnly</strong>) tendo como valor a identificação do elemento,  digite o comando para executar o ToolMan, sendo seu valor a variável que foi criada, e informe a limitação <strong>group.verticalOnly()</strong>, ou seja, arrasta somente na vertical.</p>
<p id="codigo">     var boxVerticalOnly = document.getElementById(&#8220;<strong>id_da_div_boxVertical</strong>&#8220;)<br />
group = drag.createSimpleGroup(boxVerticalOnly)<br />
group.verticalOnly()</p>
<p>Agora é só criar uma DIV com o ID sendo igual ao informado na variável</p>
<p id="codigo">     &lt;div id=&#8221;id_da_div_boxVertical&#8221;&gt;<br />
&lt;p&gt;Conteúdo&lt;/p&gt;<br />
&lt;/div&gt;</p>
<p><strong>Box Horizontal</strong></p>
<p>O Box Horizontal é o contrario do Box Vertical e poderá se arrastado somente na  horizontal. Para utilizá-lo, crie uma variável (<strong>boxHorizontalOnly</strong>) sendo o seu valor a identificação do elemento, digite  o comando para executar o ToolMan tendo como valor a variável que foi criada e informe a limitação <strong>group.horizontalOnly()</strong>, ou seja, arrastar somente na horizontal.</p>
<p id="codigo">     var boxHorizontalOnly =  document.getElementById(&#8220;<strong>id_da_div_boxHorizontal</strong>&#8220;)<br />
group = drag.createSimpleGroup(boxHorizontalOnly)<br />
group.horizontalOnly()</p>
<p>Crie uma DIV nome com o ID sendo igual ao informado na variável</p>
<p id="codigo">     &lt;div id=&#8221;id_da_div_boxHorizontal&#8221;&gt;<br />
&lt;p&gt;Conteúdo&lt;/p&gt;<br />
&lt;/div&gt;</p>
<p><strong>Box Handle</strong></p>
<p>O Box Handle é semelhante ao Box Drag mais para arrastá-lo é necessário definir  uma área dentro do box, onde somente clicando nela será possível arrastá-lo.  Crie uma variável (<strong>boxHandle</strong>) tendo como valor a identificação do elemento, digite  o comando  para executar o ToolMan tendo como valor a variável que foi criada e a identificação do elemento que  será a área que vai arrastá-lo, separados pela virgula (,).</p>
<p id="codigo">     var boxHandle =  document.getElementById(&#8220;<strong>id_da_div_boxHandle</strong>&#8220;)<br />
group = drag.createSimpleGroup(<strong>boxHandle,  document.getElementById(&#8220;id_da_area_handle&#8221;)</strong>)</p>
<p>Crie uma DIV nome com os IDs sendo igual ao informado na variável</p>
<p id="codigo">     &lt;div id=&#8221;id_da_div_boxHandle&#8221;&gt;<br />
&lt;div  id=&#8221;id_da_area_handle&#8221;&gt;Área Arrastavel&lt;/div&gt;<br />
&lt;p&gt;Box Handle&lt;/p&gt;<br />
&lt;p&gt;Clique na área arratavel e  arraste para qualquer lugar&lt;/p&gt;<br />
&lt;/div&gt;</p>
<p><strong>Box Region Constraint</strong></p>
<p>Nesse tipo de box é possível definir uma área limite para arrastar o box. Crie  uma variável (<strong>boxRegionConstraint</strong>)com o valor sendo  a identificação do elemento, e digite o comando para executar o ToolMan, sendo seu valor a variável que foi criada.</p>
<p id="codigo">     var boxRegionConstraint = document.getElementById(&#8220;<strong>id_da_div_boxRegionConstraint</strong>&#8220;)<br />
group = drag.createSimpleGroup(boxRegionConstraint)</p>
<p>Crie outra variável para delimitação das margim, insira em pixes dentro dos parênteses  na primeira linha.</p>
<p id="codigo">     var origin = coordinates.create(<strong>0, 0</strong>)<br />
group.addTransform(function(coordinate, dragEvent) {</p>
<p>Copie o cole essa variável para delimitação de qual lado poderá ser arrastado.</p>
<p id="codigo">         var originalTopLeftOffset =<br />
dragEvent.topLeftOffset.minus(dragEvent.topLeftPosition)<br />
return coordinate.constrainTo(origin,  originalTopLeftOffset)<br />
})</p>
<p>Crie uma DIV nome com o ID sendo igual ao informado na variável.</p>
<p id="codigo">     &lt;div id=&#8221;id_da_div_boxRegionConstraint&#8221;&gt;<br />
&lt;p&gt;Box Region Constraint&lt;/p&gt;<br />
&lt;p&gt;Pode ser arratado para esquerda  e com margin de 20px&lt;/p&gt;<br />
&lt;/div&gt;</p>
<p><strong>Box com posição fixa</strong></p>
<p>É possível criar um box com uma posição fixa que se movimente por uma linha na  horizontal ou vertical. Crie uma variável tendo como valor a identificação do  elemento, digite o comando para executar o ToolMan, sendo seu valor a variável que foi criada e informe  como limitação que sua movimentação será somente na horizontal (<strong>group.horizontalOnly()</strong>) ou vertical (<strong>group.verticalOnly()</strong>) na terceira linha do código JS.</p>
<p id="codigo">     var boxAbsolute =  document.getElementById(&#8220;id_da_div_boxAbsolute&#8221;)<br />
group = drag.createSimpleGroup(boxAbsolute)<br />
<strong>group.verticalOnly()</strong></p>
<p>Agora adicione o código abaixo, que fara o resto</p>
<p id="codigo">    group.addTransform(function(coordinate, dragEvent) {<br />
var scrollOffset =  coordinates.scrollOffset()<br />
if (coordinate.y &lt; scrollOffset.y)<br />
return  coordinates.create(coordinate.x, scrollOffset.y)          var clientHeight =  coordinates.clientSize().y<br />
var boxHeight = coordinates._size(boxAbsolute).y<br />
if ((coordinate.y + boxHeight) &gt;  (scrollOffset.y + clientHeight))<br />
return  coordinates.create(coordinate.x,<br />
(scrollOffset.y + clientHeight) &#8211; boxHeight)</p>
<p>return coordinate<br />
})</p>
<p>Crie uma DIV nome com o ID sendo igual ao informado na variável</p>
<p id="codigo"> &lt;div  id=&#8221;id_da_div_boxAbsolute &#8220;&gt;<br />
&lt;p&gt;Box  Region Constraint&lt;/p&gt;<br />
&lt;p&gt;Pode  ser arratado para esquerda e com margin de 20px&lt;/p&gt;<br />
&lt;/div&gt;</p>
<h2><strong>Listas</strong></h2>
<p><strong>Lista auto-ordenáveis </strong></p>
<p>Agora aprenderemos a criar lista arrastáveis e auto-ordenáveis, ou seja, que se  arrastam e se encaixam perfeitamente, e o melhor e que ele vai armazenar a seqüência  de ordenamento em um cookie. Assim a eqüência será armazenada para visitas futuras do usuário. Para executar essa função é necessário incluir  além dos que já foram incluídos anteriormente mais dois arquivos JS:  dragsort.js e cookies.js.</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;dragsort.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;cookies.js&#8221;&gt;&lt;/script&gt;</p>
<p>Crie um bloco de código de Java Script e informe a identificação do UL e da LI  da lista. Inicie criando as variáveis do ToolMan, só que agora  para utilizar o Drag Sort.</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221;  type=&#8221;text/javascript&#8221;&gt;&lt;!&#8211;<br />
var dragsort = ToolMan.dragsort()<br />
var junkdrawer = ToolMan.junkdrawer()      //&#8211;&gt;<br />
&lt;/script&gt;</p>
<p>Ainda dentro do bloco de código  crie uma função para que ao carregar toda a pagina html execute o ToolMan  Drag Sort. Dentro dessa função vamos carregar as variáveis necessárias. Coloque como valor dos comandos <strong> junkdrawer.restoreListOrder</strong> e <strong>dragsort.makeListSortable</strong> do ToolMan a indentificação do UL da lista conforme mostrado abaixo  em  negrito, para que a posição da lista seja gravada e possa se arrastada.</p>
<p id="codigo">     window.onload = function() {<br />
junkdrawer.restoreListOrder(&#8220;<strong>id_da_lista</strong>&#8220;)           dragsort.makeListSortable(document.getElementById(&#8220;<strong>id_da_lista&#8221;</strong>),<br />
saveOrder)</p>
<p>}</p>
<p>Agora digite essa função responsavel pelo armazenamento e ordenamento da lista</p>
<p id="codigo">     function saveOrder(item) {<br />
var group = item.toolManDragGroup<br />
var list = group.element.parentNode<br />
var id =  list.getAttribute(&#8220;id&#8221;)<br />
if (id == null) return<br />
group.register(&#8216;dragend&#8217;, function() {<br />
ToolMan.cookies().set(&#8220;list-&#8221; + id,<br />
junkdrawer.serializeList(list), 365)<br />
})<br />
}</p>
<p>E pronto.</p>
<p><strong>Listas auto-ordenáveis que podem ser  trocados os itens entre si</strong></p>
<p>Baseado no ToolMan do Tim Taylor o <a href="http://neb.net/nlog/" target="_blank">Blog BeNLOG</a> adaptou o script para que os  itens das listas se auto-organizem e possam ser trocados de uma lista para  outra. Para isso é necessário apenas três arquivos JS que foram atualizado para  suporta essa função e pesam apenas 16Kb, e que também não é obstrutivo.</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;coordinates.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;drag.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221;  src=&#8221;dragdrop.js&#8221;&gt;&lt;/script&gt;</p>
<p>Iniciaremos criando um bloco de código de Java Script que inicie a função (<strong>window.onload</strong>) assim que  a página for carregada. Crie uma variável (<strong>var list</strong>) e digite seu valor sendo a identificação da lista (<strong>document.getElementById(&#8220;id_da_lista&#8221;)</strong>)  e escreva o comando para que seja criado a movimentação das listas (<strong>DragDrop.makeListContainer( list );</strong>) tendo como valor a variável que foi criada. É possível também executar dois eventos; um quando a lista inicia o arrastamento  (<strong>list.onDragOver</strong>) e outro quando  termina (<strong>list.onDragOut</strong>). Nesse exemplo vamos alterar o cor de fundo (<strong>function() {  this.style["background"] = &#8220;#EEF&#8221;; }</strong>) quando o usuario for mover a lista. Faça o  mesmo na outra lista, crie uma variável (<strong>list</strong>) e passe a indetificaçãoo da lista (<strong>document.getElementById(&#8220;id_da_lista2&#8243;);</strong>), execute o comando para que seja criado a movimentação das listas e adicione outros eventos.</p>
<p id="codigo"> &lt;script language=&#8221;JavaScript&#8221;  type=&#8221;text/javascript&#8221;&gt;&lt;!&#8211;<br />
window.onload = function() {<br />
var list = document.getElementById(&#8220;<strong>id_da_lista</strong>&#8220;);<br />
DragDrop.makeListContainer( list );<br />
list.onDragOver = function() {  this.style["background"] = &#8220;#EEF&#8221;; };<br />
list.onDragOut = function()  {this.style["background"] = &#8220;none&#8221;; };</p>
<p>list = document.getElementById(&#8220;<strong>id_da_lista2</strong>&#8220;);<br />
DragDrop.makeListContainer( list );<br />
list.onDragOver = function() {  this.style["background"] = &#8220;#EEF&#8221;; };<br />
list.onDragOut = function()  {this.style["background"] = &#8220;none&#8221;; };<br />
};<br />
//&#8211;&gt;<br />
&lt;/script&gt;</p>
<h3>Considerações Finais</h3>
<p>Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO</p>
<p>Qualquer dúvida envie um email para <a href="mailto:ramos.marcelosouza@gmail.com">ramos.marcelosouza@gmail.com</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></p>
<p><!-- aqui chamamos a função para formatar todas as DIV's --></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/boxes_e_listas_arrastaveis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Painéis Sanfonados com Ajax</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/paineis_sanfonados_com_ajax/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/paineis_sanfonados_com_ajax/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Como criar um painel sanfonado com o Spry Accordion de forma n&#227;o obstrutiva. E ainda como carregar o conte&#250;do dos pain&#233;is com outra p&#225;gina sem a necessidade de atualiza&#231;&#227;o]]></description>
			<content:encoded><![CDATA[<p><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h3>Coluna Dreamweaver &#8211; Painéis Sanfonados com Ajax</h3>
<h3>Introdução</h3>
<p>Salve Pessoal! Vou lançar mais uma serie de tutoriais sobre o Spry, mais dessa vez um pouco mais difícil ja que estarei  fazendo combinações entre as muitas funções do Spry, e ainda como utilizar o Spry de forma não obstrutiva, nesse utilizarei os Spry Accordion é o Spry.Utils.updateContent.</p>
<h3>Conceitos</h3>
<p>Nesse tutorial será mostrado com criar um painel sanfonado com o Spry Accordion de diversas maneira, uma de modo mais ágil com apenas um cliques, mais comprometendo a semântica e outro de modo não obstrutivo com a utilização do  <a href="http://marceloramos.blog.br/includes/spry/SpryDOMUtils.js">SpryDOMUtils.js</a>. E ainda como carregar o conteúdo dos painéis com outra página sem a necessidade de atualizar a página, e uma breve descrição de como customizar os painéis.Veja um exemplo de<a href="http://www.marceloramos.blog.br/tutorial/spry/accordion/index.php" target="_blank"> Painéis Sanfonados utilizando o Spry Accordion</a></p>
<h3>Conteúdo</h3>
<p>Crie uma nova página, pode ser em qualquer formato. Na <strong>Barra Inserir</strong> do Dreamweaver selecione a guia<strong> Spry </strong>e clique no botão<strong> Spry Accordion</strong>.<br />
<img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_out07_painessanfonados_imagens/guia_spry_accordion.jpg" height="57" width="375" /><br />
O Dreamweaver vai automaticamente criar o <strong>Spry Accordion</strong> com dois painéis. Você pode inserir ou remover os painéis facilmente utilizando o <strong>Painel de Propriedades</strong>, para utilizá-lo verifique se os painéis estão com uma borda azul.<br />
<img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_out07_painessanfonados_imagens/painel_spry_accordion.jpg" height="90" width="206" /><br />
As opções fornecidas no<strong> Painel de Propriedades</strong> do <strong>Spry Accordion</strong> são:<br />
1. Nome do Painel<br />
2. Adiciona ou remove os painéis, sinal de &#8220;<strong>mais</strong>&#8221; para adicionar e sinal de &#8220;<strong>menos</strong>&#8221; para remover<br />
3. Ordenar a seguencia dos painéis, selecione um painel na caixa de visualização dos painéis e clique na seta para &#8220;<strong>cima</strong>&#8221; para mover o painel para cima e na seta para &#8220;<strong>baixo</strong>&#8221; para mover o painel para baixo<br />
4. Customize this widget, remove os stilos gerados automaticamente para que você possa customizá-lo (<strong>não recomendado</strong>).<br />
<img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_out07_painessanfonados_imagens/painel_propriedade_accordion.jpg" height="131" width="416" /></p>
<h4>Criando painéis sanfonados não obstrutivos</h4>
<p>Com os painéis criados e configurados, entre no modo de visualização de código (<strong>Shown Code View</strong>) do Dreamweaver. No final da página observe que o Dreamweaver criou um bloco de código em JavaScript com as configurações do Spry Accordion, obstruindo o código HTML.<br />
<img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_out07_painessanfonados_imagens/bloco_codigo_spry_accordion.jpg" height="81" width="457" /><br />
Se apenas apagar esse código os painéis não vão funcionar. Para que os painéis funcionem corretamente de modo não-obstrutivo é necessário três etapas: (1) apagar esse bloco de codigo que o Dreamweaver criou, (2) Inserir dentro da TAG HEAD o <a href="http://marceloramos.blog.br/includes/spry/SpryDOMUtils.js">SpryDOMUtils.js</a> que é um novo arquivo JS do Spry criado recentemente justamente para resolver esse problema de obstrução do Spry, muito criticado por desenvolvedores de respeitam e prezam a semântica. e (3) criar um novo arquivo JS com uma função para passa os parâmetros de configuração do Spry Accordion. Para criar esse arquivo, crie uma nova página (Ctrl + N) de javascript e crie uma nova função utilizando o Spry.Utils.addLoadListener (pertencente ao arquivo<a href="http://marceloramos.blog.br/includes/spry/SpryDOMUtils.js"> SpryDOMUtils.js</a>).e configure criando uma variável (Accordion1)e passando o ID da DIV principal (Accordion1) onde todos os painéis estão dentro.</p>
<p id="codigo"> var Accordion1;<br />
Spry.Utils.addLoadListener(function()<br />
{<br />
Spry.$$(&#8220;#Accordion1&#8243;).forEach(function(n) {  Accordion1 =new Spry.Widget.Accordion(&#8220;Accordion1&#8243;);});<br />
});</p>
<p>Agora feche, e volte para a página que estão os painéis e insira esse arquivo dentro da tag HEAD, verifique se todos arquivos estão inserido</p>
<p id="codigo"> &lt;head&gt;<br />
&lt;script src=&#8221;SpryAccordion.js&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;SpryDOMUtils.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;accordion_naoobstrutivo.js&#8221;&gt;&lt;/script&gt;<br />
&lt;link href=&#8221;SpryAccordion.css&#8221; rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; /&gt;<br />
&lt;/head&gt;</p>
<h4>Carregando o conteúdo dos painéis sem atualizar a página</h4>
<p>Para fazer a atualização do conteúdo sem a necessidade de ficar recarregando a página, simulando um iframe utilizaremos a função <strong>Spry.Utils.updateContent</strong> que já foi abordado <a href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=1&amp;aid=1118" target="_blank">nesse tutorial.</a> Para utilizar essa função faça a inclusão do o arquivo <strong>SpryData.js</strong> do Frameworks Spry dentro da tag <strong>Head</strong></p>
<p id="codigo"> &lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;SpryData.js&#8221;&gt;&lt;/script&gt;</p>
<p>Vamos adicionar os links e a função <strong>Spry.Utils.updateContent </strong>junto com a função <strong>onClick,</strong> para que quando o usuário clique no nome do painel a função <strong>Spry.Utils.updateContent</strong> faça o update dentro do painel. Na DIV que contém o titulo do painel inclua a função e passe dois parâmetros: o primeiro é a ID da DIV onde o conteúdo será carregado e o segundo é o endereço da página que será carregada.</p>
<p id="codigo"> &lt;div class=&#8221;AccordionPanelTab&#8221; <strong>onclick=&#8221;Spry.Utils.updateContent(&#8216;tb2&#8242;,&#8217;painel_1.html&#8217;);</strong>&#8220;&gt;Label 2&lt;/div&gt;</p>
<p> Agora dentro da DIV que armazena o conteúdo do painel identifique de acordo com o ID que você informou na função</p>
<p id="codigo"> &lt;div class=&#8221;AccordionPanelContent&#8221;<strong> id=&#8221;tb2&#8243;</strong>&gt;Content 2&lt;/div&gt;</p>
<p>O painel  deve ficar assim. Em negrito está as alterações que devem ser feitas. Esse é apenas um painel faça isso em quantos painéis você quiser.</p>
<p id="codigo">  &lt;div class=&#8221;AccordionPanel&#8221;&gt;<br />
&lt;div class=&#8221;AccordionPanelTab&#8221;<strong> onclick=&#8221;Spry.Utils.updateContent(&#8216;tb2&#8242;,&#8217;painel_1.html&#8217;);</strong>&#8220;&gt;Label 2&lt;/div&gt;<br />
&lt;div class=&#8221;AccordionPanelContent&#8221;<strong> id=&#8221;tb2&#8243;</strong>&gt;Content 2&lt;/div&gt;<br />
&lt;/div&gt;</p>
<h4>Customizando o Spry Accordion</h4>
<p>Na janela de configuração de CSS (Shift + F11), estão disponiveis os estilos CSS do Spry Accordion que podem ser modificados, Muita atenção nas modificações desses estilos pois podem implicar no não funcionamento adequado do Accordion, recomendo que seja apenas modificado as cores, a largura do painel e a altura dele.</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_out07_painessanfonados_imagens/janela_css_accordion.jpg" height="223" width="323" /></p>
<p><strong>.AccordionPanelTab:</strong> Modifica as configurações da div do titulo</p>
<p><strong>.AccordionPanelContent: </strong>modifica  as configurações da div do conteúdo do painel, caso queira modifique a altura do painel (height)</p>
<p><strong>.AccordionPanelOpen .AccordionPanelTab</strong>: modifica a cor de fundo do titulo do painel ao ser inicializado, ou sej aque ainda não foi clicado</p>
<p><strong>.AccordionPanelTabHover:</strong>  modificar a cor da fonte do titulo do painel que está fechado ao passar o mouse por cima</p>
<p><strong>.AccordionPanelOpen .AccordionPanelTabHover: </strong>modificar a cor da fonte do titulo do painel que está aberto ao passar o mouse por cima</p>
<p><strong>.AccordionFocused .AccordionPanelTab:</strong> modifica a cor de fundo da div com o titulo do painel inativo ou fechado</p>
<p><strong>.AccordionFocused .AccordionPanelOpen </strong>.AccordionPanelTab: modifica a cor de fundo da div com o titulo do painel aberto ou ativo</p>
<p>Ver arquivos utilizados para constuir esse sistemas:<br />
<a href="http://marceloramos.blog.br/tutorial/php/enquete/index_php.html" target="_blank">index.php</a></p>
<h3>Considerações Finais</h3>
<p>Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=1144">clicando aqui</a><br />
Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a> e qualquer dúvida envie um e-mail para <a href="mailto:marcelo@!marceoramos.blog.br">marcelo@marceoramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/paineis_sanfonados_com_ajax/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Sistema de enquete com ajax e sem bd &#8211; Final</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___final/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___final/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nesse tutorial voc&#234; vai ver fun&#231;&#245;es b&#225;sica para manipula&#231;&#227;o de ficheiros utilizando o php, como por exemplo, abrir, fechar, ecrever e manipula as informa&#231;&#245;es contida nele, e ainda criar cookies.]]></description>
			<content:encoded><![CDATA[<p><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /></p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h3>Coluna Dreamweaver &#8211; Envio de formulário com ajax &#8211; Parte Final</h3>
<h3>Introdução</h3>
<p>Salve Pessoal! Desculpe a demora, mais esse semestre estou muito atarefado.</p>
<h3>Conceitos</h3>
<p>Nesse tutorial você vai ver funções básica para manipulação de ficheiros utilizando o php, como por exemplo, abrir, fechar, ecrever e manipula as informações contida nele, e ainda criar cookies. Nessa parte do tutorial você vai construir dois página, uma responsável por manipular e escrever no ficheiro e outra que vai ser o grafico com os resultados da enquete.</p>
<h3>Conteúdo</h3>
<p>Crie uma nova página em PHP e salve com o nome de contar_votos.php, crie também um documento de texto (txt) e salve com o nome de resultat.txt.<strong> Não se esqueça de dar permissão de escrita no arquivo de texto(CHMOD 777).</strong><br />
Na primeira linha de comando antes de qualquer saida de código crie um cookie. A criação do cookie e feita pela <a href="http://br.php.net/manual/pt_BR/function.setcookie.php" target="_blank">função setcookie</a> que necessita de três parâmestros nessa ordem; o primiero é o valor do cookie, o segundo o valor do cookie e o terceiro o prazo de duração do cookie. Nesse exemplo o nome do cookie vai ser &#8216;<strong>votacaoenquete</strong>&#8216; e o valor do cookie será &#8216;<strong>votado</strong>&#8216;, pois quando o usuário acessar essa página o cookie será gerado para broquear o usuário e não permite que ele vote duas vezes, o tempo de duração do cookie fica a sua escolha.</p>
<p id="codigo">   &lt;?php<br />
setcookie(&#8216;votacaoenquete&#8217;, &#8216;votado&#8217;, time()+3600*24*30);<br />
?&gt;</p>
<p>Agora iremos colocar a mão na massa, crie uma variável para armazenar o local onde estar salvo o  arquivo txt.</p>
<p id="codigo"> $fichier=&#8221;resultat.txt&#8221;;</p>
<p>Para abrir o arquivo txt utilize a <a href="http://br.php.net/manual/pt_BR/function.fopen.php" target="_blank">função fopen</a>. Crie uma  variável ($pointeur) para armazenar o ponteiro de escrita e passar os dois parâmetros necessários,  o primeiro  é a variável que indica o  local do arquivo ($fichier) a ser aberto e o segundo é o modo de leitura (r+),  neste caso será aberto com permissão para escrita */</p>
<p id="codigo"> $pointeur=fopen($fichier,&#8221;r+&#8221;);</p>
<p>Crie outra variável  ($enquete) para ler e armazenar o conteúdo do ficheiro em uma string. A leitura do arquivo txt é feita pela <a href="http://br.php.net/manual/pt_BR/function.fread.php" target="_blank">função fread</a> que ler o arquivo  e retorna uma string com o conteúdo, e necessita de dois parâmetros, o primeiro parâmetro é a  string que armazena as configurações para abertura do arquivo ($pointeur). O  segundo parâmetro determina até onde o arquivo será lido nesse caso está  associado a <a href="http://br.php.net/manual/pt_BR/function.filesize.php" target="_blank">função filesize</a> para retornar o tamanho do arquivo ($fichier) e  assim realizar a leitura de todo o arquivo</p>
<p id="codigo">   $enquete=fread($pointeur,filesize($fichier));</p>
<p>Após fazer a leitura do arquivo e armazenar seu conteúdo na string ($enquete), divida essa string em strings  individuais, e em cada string individual será armazenado uma opção da enquete. A divisão da string e feita pela <a href="http://br.php.net/manual/pt_BR/function.explode.php" target="_blank">função explode</a>, e utiliza como marcador de  separação a vírgula(,). Assim os valores que estão antes de cada vírgula serão  divididos e transformados em strings, podendo ser escrito e  manipulado individualmente.</p>
<p id="codigo"> $enquete=explode(&#8220;,&#8221;,$enquete);</p>
<p>Crie uma variável ($reponse) para armazenar a opção que o  usuário escolheu</p>
<p id="codigo"> $reponse = $_POST['reponse'];</p>
<p>Identifique a opção escolhida e some mais um no valor da variável.</p>
<p id="codigo"> $enquete[$reponse]++;</p>
<p>Para que o voto seja escrito na posição  correta deve ser  indicado a seqüência  de escrita e armazenagem das strings. Como a string está dividida ele dever ser juntada na ordem  correta, por exemplo, na primeira string fica armazenado os votos da primeira  opção, cujo identificador é zero (value=&#8221;0&#8243;), na segunda string  depois da virgula fica armazenado os votos da segunda opção, cujo o  identificador é um (value=&#8221;1&#8243;) e assim por diante&#8230;</p>
<p id="codigo"> $enquete=$enquete[0].&#8221;,&#8221;.$enquete[1].&#8221;,&#8221;.$enquete[2].&#8221;,&#8221;.$enquete[3];</p>
<p>Reinicialize a  posição do ponteiro de arquivos para o início</p>
<p id="codigo"> rewind($pointeur);</p>
<p>Utilizando a <a href="http://br.php.net/manual/pt_BR/function.fputs.php" target="_blank">função  fput</a>s faça a gravação da string no arquivo</p>
<p id="codigo"> fputs($pointeur,$enquete);</p>
<p>Utilizando a <a href="http://br.php.net/manual/pt_BR/function.fclose.php" target="_blank">função fclose</a> feche e encerre a manipulação do arquivo</p>
<p id="codigo"> fclose($pointeur);</p>
<p>Pronto  agora inclua a página com os resultados, que será construida na proxima etapa.</p>
<p id="codigo"> &lt;?php include(&#8216; resultados.php&#8217;); ?&gt;</p>
<p>Como foi criado o cookie agora abra a página index.php que foi criada no tutorial anterior. Quando o usuário votar na enquete será gerado o cookie com o valor &#8216;votado&#8217;, para não permite que o usuário vote novamente iremos aplicar um teste de verdadeiro ou falso, se for verdadeiro que o cookie existe então mostre uma frase (echo &#8220;Você já participou !&#8221;) e escondar o botão submit, agora se esse teste for falso e o usuário ainda não votou então mostre o botão submit para que possa ser enviado o voto. Localize o botão submit e substitua por esse código</p>
<p id="codigo"> &lt;?php<br />
if ($_COOKIE['votacaoenquete'] == votado ){<br />
echo &#8220;Você já participou !&#8221;;<br />
}<br />
else {<br />
?&gt;<br />
&lt;input name=&#8221;teste&#8221; value=&#8221;Enviar&#8221; onClick=&#8221;Spry.Utils.submitForm(&#8216;form1&#8242;, updateResponseDiv, {method:&#8217;post&#8217;, url:&#8217;contar_votos.php&#8217;});&#8221; type=&#8221;button&#8221;&gt;<br />
&lt;/p&gt;<br />
&lt;?php } ?&gt;</p>
<h2>Criando a página para mostrar os resultados</h2>
<p>Crie uma nova página para armazenar os resultados, essa  página dever ter o mesmo nome que foi dado na hora que você incluiu na página  conta_votos.php no meu exemplo o nome é resultados.php.<br />
Dentro de um bloco de código PHP faça a inclusão da  página que contém as configurações da enquete.</p>
<p id="codigo">   &lt;?php  include(&#8216;config.php&#8217;); ?&gt;</p>
<p>  Faça novamente a leitura do arquivo txt, como já expliquei no inicio e acho que você  entendeu vou direto aos codigos</p>
<p id="codigo"> $fichier=&#8221;resultat.txt&#8221;;<br />
$pointeur=fopen($fichier,&#8221;r&#8221;);<br />
$enquete=fread($pointeur,filesize($fichier));<br />
fclose($pointeur);<br />
$enquete=explode(&#8220;,&#8221;,$enquete);</p>
<p>Como o arquivo já foi lido, e a string divida em strings  individuais contendo  os votos de cada opção da enquete. Crie uma variável ($total) para soma todos os votos,  lembrando que as estrings estão dividias e nosso exemplo tem quatros opções.</p>
<p id="codigo"> $total=$enquete[0]+$enquete[1]+$enquete[2]+$enquete[3];</p>
<p>Crie outra variável ($longueur) para definir a largura  máxima do gráfico.</p>
<p id="codigo"> $longueur=200;</p>
<p>Para criar os gráficos em colunas devemos trabalhar com uma  coluna para cada opção da enquete, essa coluna será calculada através do total de votos da opção  multiplicado pelo total geral de todas as opções, como a  largura do gráfico será delimitada, divida a largura do gráfico pelo total de votos. Crie  uma variável ($longueur) para cada opção da enquete essa variavel será a largura  do grafico.</p>
<p id="codigo">   $longueur0=$enquete[0]*$longueur/$total;<br />
$longueur1=$enquete[1]*$longueur/$total;<br />
$longueur2=$enquete[2]*$longueur/$total;<br />
$longueur3=$enquete[3]*$longueur/$total;</p>
<p>Como  o numero com  certeza ficou muito quebrado devemos arredondar utilizando a<a href="http://br.php.net/manual/pt_BR/function.round.php" target="_blank"> função round</a>.</p>
<p id="codigo">   $longueur0=round($longueur0);<br />
$longueur1=round($longueur1);<br />
$longueur2=round($longueur2);<br />
$longueur3=round($longueur3);</p>
<p>Crie uma nova variável ($pourcent), uma para cada opção da enquete, para pode calcular a porcentagem de cada opção e depois arredondá-las igual a anterior.</p>
<p id="codigo">$pourcent0=100*$enquete[0]/$total;  //Calcular porcentagem<br />
$pourcent0=round($pourcent0,0);  // Arredonda o a porcentagem</p>
<p>$pourcent1=100*$enquete[1]/$total;<br />
$pourcent1=round($pourcent1,0);</p>
<p>$pourcent2=100*$enquete[2]/$total;<br />
$pourcent2=round($pourcent2,0);</p>
<p>$pourcent3=100*$enquete[3]/$total;<br />
$pourcent3=round($pourcent3,0);</p>
<p>Estamos na reta final.   Crie uma nova tabela com 3 coluna e com 4 linhas uma linha para cada opção.<br />
Na primeira coluna coloque a constante que armazena o nome  da opção, lembre-se que ela esta no arquivo de configuração (config.php). Na  segunda coluna coloque uma cor de sua preferência como fundo, e  a largura  dessa coluna  coloque a variável que armazena a largura do gráfico ($longueur) . E na  terceira coluna coloque o resultado em porcentagem que esta armazenado na  variável  $pourcent.<u></u></p>
<p id="codigo">  &lt;table border=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;80&#8243;&gt;&lt;b&gt;&lt;?php echo  OPCAO1; ?&gt;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;&lt;?php echo $pourcent0;?&gt;&#8221;  bgcolor=&#8221;red&#8221;&gt; &lt;/td&gt;<br />
&lt;td&gt; &lt;?php echo  &#8220;$pourcent0%&#8221;;?&gt;<br />
(&lt;i&gt;&lt;?php echo  $enquete[0];?&gt;&lt;/i&gt;)&lt;/td&gt;<br />
&lt;/tr&gt;&lt;/table&gt;<br />
&lt;table border=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;80&#8243;&gt;&lt;b&gt;&lt;?php echo  OPCAO2; ?&gt;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;&lt;?php echo $pourcent1;?&gt;&#8221;  bgcolor=&#8221;green&#8221;&gt; &lt;/td&gt;<br />
&lt;td&gt; &lt;?php echo  &#8220;$pourcent1%&#8221;;?&gt;<br />
(&lt;i&gt;&lt;?php echo $enquete[1];?&gt;&lt;/i&gt;)&lt;/td&gt;<br />
&lt;/tr&gt;&lt;/table&gt;<br />
&lt;table border=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;80&#8243;&gt;&lt;b&gt;&lt;?php echo  OPCAO3; ?&gt;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;&lt;?php echo $pourcent2;?&gt;&#8221;  bgcolor=&#8221;black&#8221;&gt; &lt;/td&gt;<br />
&lt;td&gt; &lt;?php echo  &#8220;$pourcent2%&#8221;;?&gt;<br />
(&lt;i&gt;&lt;?php echo  $enquete[2];?&gt;&lt;/i&gt;)&lt;/td&gt;<br />
&lt;/tr&gt;&lt;/table&gt;<br />
&lt;table border=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td width=&#8221;80&#8243;&gt;&lt;b&gt;&lt;?php echo  OPCAO4; ?&gt;&lt;/b&gt;&lt;/td&gt;<br />
&lt;td width=&#8221;&lt;?php echo $pourcent3;?&gt;&#8221;  bgcolor=&#8221;#990000&#8243;&gt; &lt;/td&gt;<br />
&lt;td&gt; &lt;?php echo  &#8220;$pourcent3%&#8221;;?&gt;<br />
(&lt;i&gt;&lt;?php echo  $enquete[3];?&gt;&lt;/i&gt;)&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
Ver arquivos utilizados para constuir esse sistemas:<br />
<a href="http://marceloramos.blog.br/tutorial/php/enquete/index_php.html" target="_blank">index.php</a> | <a href="http://marceloramos.blog.br/tutorial/php/enquete/config.PHP.html">config.php</a> | <a href="http://marceloramos.blog.br/tutorial/php/enquete/resultado.php.html" target="_blank">resultado.php</a> | <a href="http://marceloramos.blog.br/tutorial/php/enquete/contar_votos.php.html" target="_blank">contar_votos.php</a><br />
Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=1144">clicando aqui</a><br />
Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a> e qualquer dúvida envie um e-mail para <a href="mailto:marcelo@!marceoramos.blog.br">marcelo@marceoramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___final/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sistema de enquete com ajax e sem bd &#8211; Parte 1</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___parte_1/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___parte_1/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Esse sistema de enquete utiliza Ajax para envio do formul&#225;rio e atualiza&#231;&#227;o do resultado . N&#227;o necessitar de banco de dados, pois ser&#225; utilizado um ficheiro em TXT para armazenar os resultados.]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h1>Coluna Dreamweaver &#8211; Sistema de enquete com ajax e sem banco de dados &#8211; Parte 1</h1>
<h3>Pré-requisito</h3>
<p>Dreamweaver CS3, para baixar a versão trial <a href="http://superdownloads.uol.com.br/download/103/adobe-dreamweaver/" target="_blank">clique aqui</a><br />
<a href="http://www.marceloramos.blog.br/includes/spry/SpryUtils.js">Arquivo js do Spry.Utils.submitForm</a><br />
<a href="http://www.marceloramos.blog.br/includes/spry/SpryData.js">Arquivo js do SpryData</a> (opcional)</p>
<h3>Conceitos</h3>
<p>Esse sistema de enquete utiliza Ajax para envio do formulário e  atualização do resultado . Não necessitar de banco de dados, pois será utilizado ficheiro em TXT para armazenar os resultados.  E utilizará um cookie para que o usuário vote apenas uma vez. <a href="http://marceloramos.blog.br/tutorial/php/enquete/">Veja a enquete em funcionamento</a></p>
<h3>Conteúdo</h3>
<p>Crie uma nova página e salve com o nome de <strong>config.php</strong>. Essa página vai armazenar a pergunta e as opções de resposta que serão utilizadas na enquete, assim quando for mudar  o tema da enquete, vai ser necessário apenas mudar esse arquivo. Para armazenar as perguntas e opções, utilizaremos a função define()para definir uma constante. Uma constante é um identificador (nome) para um único valor. Como o nome sugere esse valor não pode mudar durante a execução do script. Para utilizar o comando define() é necessário dois argumentos, o primeiro é o nome da constante e o segundo é o valor.<u></u><br />
define(NOME_DA_CONSTANTE,? VALOR?)<br />
Então vamos defini a pergunta como ?<em>De onde você acessar o site?</em>? ficando a declaração assim: <strong>define(PERGUNTA,? De onde você acessar o site??)</strong> e o mesmo para a primeira opção (<strong>define(OPCAO1,?Casa?)</strong>) e para a segunda opção, terceira e quarta. O Código dessa página desse ser assim:<br />
&lt;?php<br />
define(ERGUNTA,&#8217;De onde você acessar o site?&#8217;);<br />
define(OPCAO1,&#8217;Casa&#8217;);<br />
define(OPCAO2,&#8217;Trabalho&#8217;);<br />
define(OPCAO3,&#8217;Escola&#8217;);<br />
define(OPCAO4,&#8217;Lan House&#8217;);<br />
?&gt;<br />
Crie mais uma nova página e salve com o nome de <strong>enquete.php</strong>. Agora com a página aberta e no modo de visualização no <strong>Show Design  View</strong>, clique na guia <strong>Layout</strong> e depois no botão <strong>Insert Div Tag, </strong>para criar uma div.<br />
<img src="http://www.mxstudio.com.br/imagens_artigos/teste_imagens/inserir_div.gif" alt="Inserir Div" height="57" /><br />
Na caixa de configuração do <strong>Insert Div Tag, </strong>coloque apenas a ID da div como <strong>enquete</strong><br />
<img src="http://www.mxstudio.com.br/imagens_artigos/teste_imagens/insert_div_tag.gif" alt="Insert Div Tag" height="208" /><br />
Agora clique na guia <strong>Formulários </strong>na barra inserir do Dreamweaver.e depois clique no botão <strong>Form</strong><br />
<img src="http://www.mxstudio.com.br/imagens_artigos/teste_imagens/inserir_form.gif" alt="Guia Formulário" height="54" /><br />
No painel de propriedades, localizado na parte inferior do Dreamweaver, coloque como <strong>action </strong>a página <strong>contar_votos.php</strong> e o método como <strong>POST</strong><br />
<img src="http://www.mxstudio.com.br/imagens_artigos/teste_imagens/propt_form.gif" alt="Propriedade do Formulário" height="108" /><br />
Mude o modo de visualização para o modo <strong>Show  Code View</strong> (modo de visualização do código). Dentro da TAG HEAD vamos adicionar o arquivo do Spry <strong>SpryUtils.js </strong>que será responsável pelo envio do formulário utilizando Ajax.<br />
&lt;script src=&#8221;/includes/spry/SpryUtils.js&#8221;type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;<br />
Também vamos adicionar o arquivo do Spry SpryData.js para que atualize a enquete com os resultados, sem a necessidade de atualizar a página.<br />
&lt;script src=&#8221;/includes/spry/SpryData.js&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;<br />
Vamos criar uma função  chamada <strong>updateResponseDiv </strong> que será executa após o envio do formulário.  Essa função vai atualizar a div carregando o resultado da enquete. A função updateResponseDiv utiliza o  Spry.Utils.setInnerHTML que está no arquivo SpryData.js  e que já foi incluído anteriormente. Para utilizar o Spry.Utils.setInnerHTML basta apenas informar a div e a requisição<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
function updateResponseDiv(req)<br />
{<br />
Spry.Utils.setInnerHTML(&#8216;enquete&#8217;, req.xhRequest.responseText);<br />
}<br />
&lt;/script&gt;<br />
Dentro da TAG BODY vamos incluir a pagina <strong>config.php </strong>que contém a pergunta e as opções<u></u><br />
&lt;?php include(&#8216;config.php&#8217;); ?&gt;<br />
Vamos adicionar a pergunta, para isso basta apenas  incluir a constante que está armazenado a pergunta (PERGUNTA).<br />
&lt;?php echo PERGUNTA; ?&gt;<u></u><br />
Agora  dentro da TAG FORM vamos  adicionar quatro Radio Button, um para cada opção da enquete. Primeiro adicione a constante que armazena a primeira opção (OPCAO1).<br />
&lt;?php echo OPCAO1; ?&gt;<br />
Depois  adicione o primeiro radio button que deve ter o nome de <strong>reponse </strong>(name=&#8221;reponse&#8221; )<strong> </strong>e o valor de 0 para a primeira opção(value=&#8221;0&#8243;).<br />
<u>&lt;input type=&#8221;radio&#8221; name=&#8221;reponse&#8221; value=&#8221;0&#8243;&gt;</u><br />
E agora consecutivamente adicione a constante que armazena a segunda opção (OPCAO2) e um radio button de valor 1 , a constante com a terceira opção (OPCAO3) e o radio button de valor  2 e a constante com  quarta opção  (OPCAO4) com  radio button de valor 3 . Seu código deve está assim:<br />
&lt;div id=&#8221;enquete&#8221;&gt;<br />
&lt;?php echo PERGUNTA; ?&gt;<br />
&lt;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; action=&#8221;contar_votos.php&#8221; method=&#8221;post&#8221;&gt;<br />
&lt;?php echo OPCAO1; ?&gt;<br />
&lt;input type=&#8221;radio&#8221; name=&#8221;reponse&#8221; value=&#8221;0&#8243;&gt;&lt;br&gt;<br />
&lt;?php echo OPCAO2; ?&gt;<br />
&lt;input type=&#8221;radio&#8221; name=&#8221;reponse&#8221; value=&#8221;1&#8243;&gt;&lt;br&gt;<br />
&lt;?php echo OPCAO3; ?&gt;<br />
&lt;input type=&#8221;radio&#8221; name=&#8221;reponse&#8221; value=&#8221;2&#8243;&gt;&lt;br&gt;<br />
&lt;?php echo OPCAO4; ?&gt;<br />
&lt;input type=&#8221;radio&#8221; name=&#8221;reponse&#8221; value=&#8221;3&#8243;&gt;&lt;br&gt;<br />
&lt;/div&gt;<br />
E para finalizar vamos inserir o botão submit para envio do formulário. Só que como vamos enviar o formulário utilizando Ajax, devemos adicionar a chamada da função Spry.Utils.submitForm  e passa os três parâmetros de configuração: identificação do formulário, função a ser executada depois do envio e a terceira para opções especiais.<br />
Spry.Utils.submitForm(&#8216;identificacao_do_formulario&#8217;, funcao_executada_final, {method:&#8217;get&#8217;, url:&#8217;pagina.php&#8217;});<br />
Ficando o botão Submit Assim:<u></u><br />
&lt;input name=&#8221;Enviar&#8221; value=&#8221;Enviar&#8221; onClick=&#8221;Spry.Utils.submitForm(&#8216;form1&#8242;, updateResponseDiv, {method:&#8217;post&#8217;, url:&#8217;contar_votos.php&#8217;});&#8221; type=&#8221;button&#8221;&gt;<br />
Agora vamos criar um link para que as pessoas possam ver o resultado da enquete<br />
&lt;p style=&#8221;cursor:pointer&#8221;&gt; &lt;a &gt;Ver resultado&lt;/a&gt; ]&lt;/p&gt;<br />
Para que os resultados da enquete seja carregado sem a atualização da página vamos utilizar a função Spry.Utils.updateContent, que necessita de dois parâmetros a ID da DIV que será atualizada e a URL da página que vai ser atualizada.<br />
Spry.Utils.updateContent(&#8216;id_da_div&#8217;,'pagina.html&#8217;);<br />
Como a página que vai armazenar os resultados vai ser chamar resultados.php o link vai ficar assim:<br />
&lt;p style=&#8221;cursor:pointer&#8221;&gt; [ &lt;a onclick="Spry.Utils.updateContent('enquete','resultado.php');"&gt;Ver resultado&lt;/a&gt; ]&lt;/p&gt;<br />
Na próxima parte continuaremos&#8230;</p>
<h3>Considerações Finais</h3>
<p>Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=1144">clicando aqui</a><br />
Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a> e qualquer dúvida envie um e-mail para <a href="mailto:marcelo@marceloramos.blog.br">marcelo@marceloramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/sistema_de_enquete_com_ajax_e_sem_bd___parte_1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Envio de formulário com Ajax</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/envio_de_formulario_com_ajax/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/envio_de_formulario_com_ajax/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Com Framework Spry &#233; poss&#237;vel enviar um formul&#225;rio sem a necessidade de atualizar a p&#225;gina atual. Isso &#233; poss&#237;vel utilizando a fun&#231;&#227;o Spry.Utils.submitForm que necessita apenas da inclus&#227;o do]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h3>Coluna Dreamweaver &#8211; Envio de formulário com ajax</h3>
<h3>Introdução</h3>
<p>Salve Pessoal! Tinha prometido que o próximo artigo seria uma galeria de fotos utilizando varios funções do Spry, mais vai ter quer ficar para a próxima, pois achei esse artigo mais importante pois permiter enviar formulário com ajax e é super facíl de utiliza. <a href="http://www.marceloramos.blog.br/tutorial/spry/enviar_form/index.php">Veja</a> <a href="http://www.marceloramos.blog.br/tutorial/spry/enviar_form/index.php">os exemplo e como funciona clicando aqui  </a></p>
<h3>Pré-requisito</h3>
<p>Dreamweaver CS3, para baixar a versão trial <a href="http://superdownloads.uol.com.br/download/103/adobe-dreamweaver/" target="_blank">clique aqui</a><br />
<a href="http://www.marceloramos.blog.br/includes/spry/SpryUtils.js">Arquivo js do Spry.Utils.submitForm</a><br />
<a href="http://www.marceloramos.blog.br/includes/spry/SpryData.js">Arquivo js do SpryData</a> (opcional)</p>
<h3>Conceitos</h3>
<p>Com Framework Spry é possível enviar um formulário sem a necessidade de atualizar a página atual. Isso é possível utilizando a função<strong> Spry.Utils.submitForm</strong> que necessita apenas da inclusão do arquivo JS e o adicionamento de um comportamento para a chamada da função. O comportamento responsável pela chamada pode ser adicionado no próprio formulário ou utilizado outros elementos HTML.<br />
Com a função Spry.Utils.submitForm é possível realizar cadastro em banco de dados, fazer a requisição dos dados e ainda visualizar o resultado do formulário na própria página sem a necessidade de ser atualizada.<br />
O Spry.Utils.submitForm têm três parâmetros de configuração: identificação do formulário, função a ser executada depois do envio e a terceira para opções especiais. Suporta os métodos POST e GET. Formulários que têm enctype=&#8221;multipart/form-data&#8221; são submetidos usando default do comportamento do browser. Suporta PHP, ASP e Coldfusion</p>
<h3>Conteúdo</h3>
<p>Para enviar o formulário faça a inclusão do arquivo SpryUtils.js dentro da TAG Head.</p>
<p id="codigo">&lt;script src=&#8221;/SpryUtils.js&#8221;type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;</p>
<p>E depois adicione a chamada da função e pronto.</p>
<p id="codigo">Spry.Utils.submitForm(&#8216;identificacao_do_formulario&#8217;, funcao_executada_final, {method:&#8217;get&#8217;, url:&#8217;pagina.php&#8217;});</p>
<p>Veja como ficaria se a chamada fosse adicionada dentro do formulário no evento onClick</p>
<p id="codigo">&lt;input name=&#8221;teste&#8221; value=&#8221;Enviar&#8221; onclick=&#8221;Spry.Utils.submitForm(&#8216;form&#8217;, updateResponseDiv2, {method:&#8217;post&#8217;, url:&#8217;pagina.php&#8217;});&#8221; type=&#8221;button&#8221;&gt;</p>
<p>Veja como ficaria se a chamada fosse adicionada  em um link de texto</p>
<p id="codigo">&lt;a onclick=&#8221;Spry.Utils.submitForm(&#8216;form1&#8242;, updateResponseDiv, {method:&#8217;post&#8217;, url:&#8217;enviar.php&#8217;}); &#8220;&gt;Enviar Formulário &lt;/a&gt;</p>
<p><strong>Carregar os dados dos formulários na propria página</strong><br />
Para que os dados do formulário sejam carregados dentro da própria pagina, igual ao exemplo vamos criar uma função que será executa após o envio, essa função vai atualizar o conteúdo da DIV (response_form1) com o conteúdo da página (pagina.php) que recebeu os dados do formulário.<br />
A função <strong>updateResponseDiv</strong> utiliza o <strong>Spry.Utils.setInnerHTML</strong>é responsável pelo retorno do dados na própria página sem a necessidade de atualização. Para utilizá-la e necessário incluir o arquivo SpryData.js dentro da tag HEAD</p>
<p id="codigo">&lt;script src=&#8221;.. /SpryData.js&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;</p>
<p>E depois chamar a função Spry.Utils.setInnerHTML passando dois parametros: a DIV que será atualizada e a função utilizada</p>
<p id="codigo">&lt;script type=&#8221;text/javascript&#8221;&gt; function updateResponseDiv(req) { Spry.Utils.setInnerHTML(&#8216;response_form1&#8242;, req.xhRequest.responseText); } &lt;/script&gt;</p>
<p>Agora vamos chamar a função <strong>Spry.Utils.submitForm:</strong></p>
<p id="codigo">&lt;form name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;pagina.php&#8221; onsubmit=&#8221;return Spry.Utils.submitForm(this, updateResponseDiv);&#8221;&gt;</p>
<p>A chamada da função foi adicionada no onSubmit que realizara o envio do próprio formulário e retornará na própria página os dados que foram submetidos. Para isso foi declarado dois parâmetros, a identificação do formulário que é o próprio (this) e a função <strong>updateResponseDiv</strong><br />
Caso você queira somente enviar determinados campos do formulário a chamada deve ser:</p>
<p id="codigo">Spry.Utils.submitForm(&#8216;identificacao_do_formulario&#8217; funcao_executada_final, {elements: ['id_do_campo1', 'id_do_campo2']});</p>
<p>Para enviar o formulário com variáveis terceiro parâmetro deve ser adicionado a string &#8216;additionalData&#8217; informando as variaveis &#8216;variavel=valor&#8217; assim:</p>
<p id="codigo">Spry.Utils.submitForm(&#8216;identificacao_do_formulario&#8217; , funcao_executada_final, {url:&#8217;pagina.php&#8217;, additionalData:&#8217;ajaxSubmit=true&amp;from=samples&#8217;</p>
<h3>Considerações Finais</h3>
<p>Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=1144">clicando aqui</a><br />
Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a> e qualquer dúvida envie um e-mail para <a href="mailto:marcelo@!marceoramos.blog.br">marcelo@marceoramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/envio_de_formulario_com_ajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Auto Sugestão</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/auto_sugestao/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/auto_sugestao/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[O Auto Sugest&#227;o permite que seja visualizado uma sugest&#227;o de nomes conforme o usu&#225;rio for preenchendo um formul&#225;rio]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h3>Coluna Dreamweaver &#8211; Auto Sugestão</h3>
<h3>Introdução</h3>
<p>Salve Pessoal! Nesse tutorial vamos aprender a utilizar o Auto Sugestão do Framework Spry e no próximo vamos fazer uma galeria de fotos utilizando tudo que vimos até agora. Para ver um exemplo <a href="http://www.marceloramos.blog.br/tutorial/spry/auto_sugestao/index.php">clique aqui.</a></p>
<h3>Pré-requisito</h3>
<p>Dreamweaver CS3, para baixar a versão trial <a href="http://superdownloads.uol.com.br/download/103/adobe-dreamweaver/" target="_blank">clique aqui</a>, e os arquivos <a href="http://www.marceloramos.blog.br//includes/spry/SpryAutoSuggest.js">SpryAutoSugestão.js </a>, <a href="http://www.marceloramos.blog.br/includes/spry/SpryAutoSuggest.css">SpryAutoSugestão.css</a> e <a href="http://www.marceloramos.blog.br/tutorial/spry/auto_sugestao/products.xml">products.xml<br />
</a></p>
<h3>Conceitos</h3>
<p>O Spry.Widget.AutoSuggest permite que seja visualizado uma sugestão de nomes conforme o usuário for preenchendo um formulário. Para configura o Spry.Widget.AutoSuggest são necessário quatro valores e mais um adicional para opões especiais como por exemplo limitar a quantidade de resultado exibidos e ou, ativar o auto sugestão somente quando digitado um mínimo de caracteres.</p>
<h3>Conteudo</h3>
<p><strong>Criando um XML Data Set</strong><br />
Crie e salve uma nova página, pode ser em qualquer formato, não se esqueça de fazer o download do arquivos XML. Com a página aberta e salva clique na <strong>Guia Spry</strong> da <strong>Barra Inserir</strong> do dreamweaver, e depois clique no botão <strong>Spry XML Data Set</strong>, e uma nova janela se abrirá para que seja configurado o XML Data Set.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/botao_data_set.gif" height="56" /></p>
<p id="destaque">
<strong>Configuração do Spry XML Data Set:</strong><br />
<strong>Data Set Name: </strong>Nome do conjunto de dados (Data Set), vamos dar o nome de dsAutoSugestao.<br />
<strong>XML Source:</strong> Local onde está salvo o arquivo XML, clique no botão <strong>Browse</strong> para localizar o arquivo.<br />
<strong>Botão Get schema:</strong> Botão para extrair a estrutura do arquivo XML e exibir na caixa <strong>Row element</strong>, clique nele.<br />
<strong>Caixa Row element: </strong>Caixa para exibir a estrutura do arquivo XML, onde poderá ser selecionada as tags que serão utilizadas, em nosso exemplo vamos selecionar a tag product que esta dentro da tag principal também chamada products.<br />
<strong>XPath:</strong> exibir o caminho da tag selecionada, clique no botão Preview para visualizar os dados que estão dentro dentro da tag selecionada, em nosso exemplo deve está products/product<br />
<strong>Data Set columns:</strong> Exibir as colunas que estão dentro da tag selecionada e qual o tipo de dados das colunas, para alterar o tipo de dados utilize a caixa <strong>Data type</strong><br />
<strong>Data type:</strong> Classifica os tipo de dados podendo ser, uma string, um numero, uma data o um link de imagen.<br />
Pronto Clique no botão OK para fachar a janela</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/xml_data_set.gif" height="444" /></p>
<p>Vamos criar uma DIV onde será colocado o formulário. Na <strong>Barra Inserir</strong> do Dreamweaver, selecione a <strong>Guia Layout</strong> e depois no botão<strong> Insert Div Tag</strong>,</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/barra_inseir_div.jpg" height="59" /></p>
<p align="left">Na janela de configuração da DIV coloque como ID o nome <strong>autosugetao</strong></p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/insert_div_tag.jpg" height="171" /></p>
<p>Agora dentro da DIV vamos adicionar o formulário. Na<strong> Barra Inserir</strong> selecione a <strong>Guia Formulario</strong> e clique no botão <strong>Form</strong></p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/formulario_form.jpg" height="53" /></p>
<p align="left">Agora na <strong>Barra Inser</strong>ir clique no <strong>Botão Text Field</strong>, e a janela de configuração do campo Text Field vai se abrir</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/formulario_textfield.jpg" height="53" /></p>
<p align="left">Na janela de configuração coloque a ID eo Label com o nome de<strong> produto</strong></p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/imput_tag_acessibility.jpg" height="381" /></p>
<p>No <strong>painel Application </strong>clique na <strong>Guia Bindings</strong> e veja se o <strong>Data Set dsAutoSugestao</strong> esta aberto exibindo as colunas, caso não esteja clique no sinal de mais que esta a direita do <strong>Data Set dsAutoSugestao</strong> para que seja mostrada as colunas. Clique na coluna <strong>name</strong> que esta armazenando os nomes dos software da adobe e arraste para dentro do formulario</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/adicionando_name.jpg" height="142" /></p>
<p align="left">Selecione o<strong> {name} </strong>que foi acabado de ser adicionado no formulário e na <strong>Barra Inserir</strong> selecione a <strong>Guia Spry</strong> e clique no botão <strong>Spry Region</strong>, para inserir uma região do Spry, e a janela de configuração do <strong>Spry Region </strong>vai se abrir.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/botao_spry_region.gif" height="56" /></p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/insert_spry_region_autosuges.jpg" height="242" /></p>
<p><strong>Container: </strong>Local onde será inserido a região, escolha a opção <strong>Div</strong> ou seja a região ficará dentro da div<br />
<strong>Type:</strong> Tipo de região, escolha a opção <strong>Region</strong><br />
<strong>Spry Data Set:</strong> Data Set de onde será extraído os dados, selecione o Data Set <strong>dsAutoSugestao</strong><br />
Selecione novamente o campo<strong> {name} </strong>e na <strong>Barra Inserir</strong> do dreamweaver selecione a<strong> Guia Spry</strong> e clique no botão <strong>Spry Repeat,</strong> para inserir uma região de repetição do Spry,  mostrando assim todos os nomes que estão no arquivo XML, e a janela de configuração do Spry Repeat vai se abrir.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/botao_spry_repetion.gif" height="56" /></p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_autosugestao_imagens/insert_spry_repeat_autosuges.jpg" height="247" /></p>
<p><strong>Container: </strong>Local onde será inserido a região de repetição, escolha a opção <strong>Div</strong> ou seja a região ficará dentro da div<br />
<strong>Type:</strong> Tipo de região, escolha a opção<strong> Repeat</strong><br />
<strong>Spry Data Set:</strong> Data Set de onde será repetido os dados, selecione o Data Set <strong>dsProducts</strong><br />
Agora mude a visualização para o<strong> modo de visualização do código</strong>, e a partir daqui vai ser tudo na unha. Vamos primeiro adiciona o arquivo JSpryAutoSuggest.js dentro da tag Head<br />
&lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;./includes/spry/SpryAutoSuggest.js&#8221;&gt;&lt;/script&gt;<br />
Ainda com o Dreamweaver no modo de visualização do código, localize a div criada para adicionar a região e acrescente a tag ID com o valor de <strong>regiao_dataset </strong>e depois na DIV criada para repetição adicione o comando <strong>spry:suggest</strong> e como valor coloque o campo<strong> {name}</strong><br />
&lt;div id=&#8221;autosugestao&#8221;&gt;<br />
&lt;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; method=&#8221;Post&#8221; action=&#8221;"&gt;<br />
&lt;label&gt;Produto&lt;/label&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;Produto&#8221; id=&#8221;Produto&#8221; tabindex=&#8221;1&#8243; /&gt;<br />
&lt;div <strong>id=&#8221;regiao_dataset&#8221;</strong> spry:region=&#8221;dsAutoSugestao&#8221;&gt;<br />
&lt;div spry:repeat=&#8221;dsAutoSugestao&#8221; <strong>spry:suggest=&#8221;{name}&#8221;</strong>&gt;{name}&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;<br />
Dentro da DIV de repetição tem o campo {name}, coloque ele dentro de outra DIV com a classe <strong>list</strong><br />
&lt;div id=&#8221;autosugestao&#8221;&gt;<br />
&lt;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; method=&#8221;Post&#8221; action=&#8221;"&gt;<br />
&lt;label&gt;Produto&lt;/label&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;Produto&#8221; id=&#8221;Produto&#8221; tabindex=&#8221;1&#8243; /&gt;<br />
&lt;div id=&#8221;regiao_dataset&#8221; spry:region=&#8221;dsAutoSugestao&#8221;&gt;<br />
&lt;div spry:repeat=&#8221;dsAutoSugestao&#8221; spry:suggest=&#8221;{name}&#8221;&gt;<strong>&lt;div class=&#8221;list&#8221;&gt;</strong>{name}<strong>&lt;/div&gt;</strong>&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;<br />
Agora vamos criar uma variável que vai ser reponsável de chamar o Spry.Widget.AutoSuggest e lhe passar os valores de configuração. Inicie um novo bloco de código para JavaScript e adicione uma nova variável (var) de nome as1 (as1) e com o valor igual (=) a uma nova (new) Spry.Widget.AutoSuggest e com o seu valor sendo primeiro a ID da DIV onde está armazenado o formulario (autosugestao), depois a ID da DIV onde está a regiao do DataSet do Spry (regiao_dataset), depois o nome do Data Set Xml (dsAutoSugestao) e por ultimo o nome do campo que será repetido (name)<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
var as1 = new Spry.Widget.AutoSuggest(&#8216;autosugestao&#8217;, &#8216;regiao_dataset&#8217;, &#8216;dsAutoSugestao&#8217;, &#8216;name&#8217;);<br />
&lt;/script&gt;<br />
Para limitar o resultado exibidos pelo Spry.Widget.AutoSuggest acrescenter como ultimo valor o comando<strong> {containsString: true, maxListItems: 3},</strong> ou seja será mostrado somente 3 resultados<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
var as1 = new Spry.Widget.AutoSuggest(&#8216;autosugestao&#8217;, &#8216;regiao_dataset&#8217;, &#8216;dsAutoSugestao&#8217;, &#8216;name&#8217;, {containsString: true, maxListItems: 3});<br />
&lt;/script&gt;<br />
Para ativar o auto sugestão somente quando for digitado uma certa quantidade de caracters acrescenter como ultimo valor o comando<strong> {containsString: true, minCharsType: 3},</strong> ou seja será mostrado somente quando forem digitado no minimo 3 caracteres<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
var as1 = new Spry.Widget.AutoSuggest(&#8216;autosugestao&#8217;, &#8216;regiao_dataset&#8217;, &#8216;dsAutoSugestao&#8217;, &#8216;name&#8217;, <strong>{containsString: true, minCharsType: 3}</strong>);<br />
&lt;/script&gt;</p>
<h3>Considerações Finais</h3>
<p>Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a>. Qualquer dúvida envie um e-mail para <a href="mailto:marcelo@marceloramos.blog.br">marcelo@marceloramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/auto_sugestao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Animações com o Effects do Framework Spry</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/animacoes_com_o_effects_do_framework_spry/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/animacoes_com_o_effects_do_framework_spry/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 00:00:00 +0000</pubDate>
		<dc:creator>Marcelo Ramos</dc:creator>
				<category><![CDATA[Dreamweaver]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[O Effects &#233; um conjunto de efeitos visuais do Frameworks Spry, que pode ser adicionado em diversos elementos do HTML. No Dreamweaver os efeitos podem ser adicionados no modo Design, sem a necessidade de trabalhar diretamente com c&#243;digo]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td id="colunaTexto" valign="top">
<h3>Coluna Dreamweaver &#8211; Framework Spry: Effects</h3>
<h3>Introdução</h3>
<p>Salve Pessoal! Recebi alguns e-mail querendo algo mais complexo, que possa integrar as varias funções do Spry. Mais para que possamos fazer isso devemos conhecer antes todas as funções do Spry. Vale ressalta também a dificuldade em encontrar documentação sobre a utilização do Spry pelo Dreamweaver. Então nesse tutorial vamos conhecer o Effects do Spry, fiz alguns exemplos que podem ser visto <a href="http://www.marceloramos.blog.br/tutorial/spry/effects/index.php" target="_blank">clicando aqui.</a></p>
<h3>Pré-requisito</h3>
<p>Dreamweaver CS3, para baixar a versão trial <a href="http://superdownloads.uol.com.br/download/103/adobe-dreamweaver/" target="_blank">clique aqui</a></p>
<h3>Conceitos</h3>
<p>O Effects é um conjunto de efeitos visuais do Frameworks Spry, que pode ser adicionado em diversos elementos do HTML. No Dreamweaver os efeitos podem ser adicionados no modo Design, sem a necessidade de trabalhar diretamente com código, falicitando ainda mais a adição desses efeitos. O Effects fica localizado no Painel de Behaviors (Windows &gt; Behaviors) como um comportamento normal, podendo ser ativado com diversos eventos.</p>
<h3>Conteúdo</h3>
<h2><strong>Appear/ Fade</strong></h2>
<p>Esse efeito faz o elemento selecionado ir aparecendo ou surgindo na tela. Pode usar este efeito com todos os objetos do HTML exceto o applet, body, iframe, tr, tbody, ou th.Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Appear/Fade. A janela de configuração do efeito fade ira se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/fade.gif" height="203" /></p>
<p id="destaque">
<strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.<u> </u><br />
<strong>Effect duration:</strong> Tempo de duração do efeito em milissegundos.<br />
<strong>Effect:</strong> Tipo de efeito podendo ser o Fade onde a camada vai sumindo aos poucos, ou Appear onde a camada vai aparecendo.<br />
<strong>From:</strong> Tamanho da camada em porcentagem quando o efeito iniciar.<br />
<strong>To:</strong> Tamanho da camada porcentagem quando o efeito terminar<u></u></p>
<h2><strong>Blind</strong></h2>
<p>Esse efeito faz a camada selecionada subir ou descer lentamente semelhante a uma cortina que sendo aberta ou fechada. Pode ser usado somente com estes objetos do HTML: address, dd, div, dl, dt, form, h1, h2, h3, h4, h5, h6, p, ol, ul, li, applet, center, dir, menu, ou pré. Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Blind. A janela de configuração do efeito Blind vai se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/blind.gif" height="205" /></p>
<p id="destaque">
<strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito.<br />
<strong>Effect duration:</strong> Tempo de duração do efeito em milisegundos.<br />
<strong>Effect:</strong> Tipo de efeito podendo ser o Blind Up aonde a camada vai subindo, ou Blind Down aonde a camada vai descendo na tela.<br />
<strong>From:</strong> Tamanho da camada porcentagem ou pixel quando o efeito iniciar.<br />
<strong>To:</strong> Tamanho da camada porcentagem ou pixel quando o efeito terminar.</p>
<h2><strong>Grow/ Shrink</strong></h2>
<p>Esse efeito faz o elemento selecionado crescer ou diminuir. Pode ser usado com estes objetos do HTML: address, dd, div, dl, dt, form, p, ol, ul, applet, center, dir, menu, o pre. Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Grow/ Shrink. A janela de configuração do efeito Grow/ Shrink vai se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/grow.gif" height="227" /></p>
<p id="destaque">
<strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.<u></u><br />
<strong>Effect duration:</strong> Tempo de duração do efeito em milisegundos.<br />
<strong>Effect:</strong> Tipo de efeito podendo ser Grow aonde a camada vai crescer, ou Shrink aonde a camada vai diminuir na tela.<br />
<strong>From:</strong> Tamanho da camada porcentagem ou pixel quando o efeito iniciar.<br />
<strong>To:</strong> Tamanho da camada porcentagem ou pixel quando o efeito terminar.<br />
<strong>To:</strong> Para que local a camada deve ir quando o efeito for selecionado podendo ser ao centro ou a esquerda superior.</p>
<h2><strong>Shake</strong></h2>
<p>Esse efeito faz o elemento selecionado dar uma tremida. Você pode usar este efeito com estes objetos do HTML: address, blockquote, dd, div, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, iframe, img, object, p, ol, ul, li, applet, dir, hr, menu, pre, ou table. Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Shake. A janela de configuração do efeito Shake vai se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/shake.jpg" height="100" /></p>
<p id="destaque"><strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.</p>
<h2><strong>Squish</strong></h2>
<p>Esse efeito faz o elemento selecionado desaparecer. Você pode usar este efeito com estes objetos do HTML: address, dd, div, dl, dt, form, img, p, ol, ul, applet, center, dir, menu, or pre. Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Squish. A janela de configuração do efeito Squish vai se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/squish.gif" height="97" /></p>
<p id="destaque"><strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.</p>
<h2><strong>Slide</strong></h2>
<p>Esse efeito faz uma transição podendo ser para cima ou para baixo. Você pode usar este efeito com estes objetos do HTML: blockquote, dd, div, form, or cente. Esse efeito requer uma única tag  ID  e os efeitos dentro do elemento com  tag ID. Para aplicá-lo você deve selecionar aonde será ativado, podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Shake. A janela de configuração do efeito Shake vai se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/slide.gif" height="204" /></p>
<p id="destaque">
<strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.<u></u><br />
<strong>Effect duration:</strong> Tempo de duração do efeito em milisegundos<br />
<strong>Effect:</strong> Tipo de efeito podendo ser Slide UP  aonde a camada vai subir, ou Slide Down aonde a camada vai descendona tela.<br />
<strong>From:</strong> Tamanho da camada porcentagem ou pixel quando o efeito iniciar<br />
<strong>To:</strong> Tamanho da camada porcentagem ou pixel quando o efeito terminar</p>
<h2><strong>Highlight</strong></h2>
<p>Esse efeito faz o elemento selecionado ir trocando as cores. Pode ser usado com todos os objetos do HTML exceto o applet, body, frame, frameset, ou noframes. Para aplicá-lo você deve selecionar aonde será ativado,  podendo ser o próprio elemento, depois ir ao Painel Behaviors do Dreamweaver (Windows &gt; Behaviors), clicar no botão adicionar comportamento (+), selecionar a opção Effects e depois o Highlight. A janela de configuração do efeito Highlight ira se abrir para podemos configurá-lo.</p>
<p align="center"><img src="http://www.mxstudio.com.br/imagens_artigos/marceloramos_jul07_spryeffects_imagens/highlight.gif" height="201" /></p>
<p id="destaque">
<strong>Target Element:</strong> Selecionar o ID do objeto ou elemento onde será aplicado o efeito. Se você já estiver selecionado o objeto, pode escolher &lt;Current Selection&gt;.<u></u><br />
<strong>Effect duration:</strong> Tempo de duração do efeito em milisegundos.<br />
<strong>Start Color:</strong> Cor com qual o efeito vai iniciar.<br />
<strong>End Color:</strong> Cor com qual o efeito vai terminar.<br />
<strong>Color after Effect: </strong>Esta cor dura somente durante a duração do efeito</p>
<h3>Considerações Finais</h3>
<p>Qualquer comentário que vocês deixarem será bem vindo. Deixem seus pedidos de tutorias para as próximas colunas <a href="http://www.mxstudio.com.br/forum/index.php?showtopic=1144">clicando aqui</a><br />
Autor: Marcelo Souza Ramos &#8211; Colunista Dreamweaver do Portal MXSTUDIO<br />
Visite meu blog <a href="http://www.marceloramos.blog.br">www.marceloramos.blog.br</a>. Qualquer dúvida envie um e-mail para <a href="mailto:marcelo@marceloramos.blog.br">marcelo@marceloramos.blog.br</a> ou acesse o nosso <a href="http://forum.mxstudio.com.br/">fórum</a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/animacoes_com_o_effects_do_framework_spry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

