Jump to content


bimonti

Member Since 04/04/2004
Offline Last Active 18/08/2014, 16:48
*****

#968624 Puxar Dados De Um Xsl Via Php, é Possivel ?

Posted by bimonti on 27/05/2009, 02:30

É possível sim, mas você está tentando da forma errada. Coloca <?php ?> dentro do XSL vai dar erro mesmo já que o parser não entende isso. Você tem que definir todas as variáveis dentro do php e usar a função $foo-setParameter() para enviá-los ao XSL. Eu fiz isso a muuuuiiitoooo tempo atrás e não lembro exatamente a sintaxe. Abri aqui os arquivos mas eles são imensos e muitos complexos pra colar e você tentar entender então eu dei uma enxugada. Pode ser que não funcione mas você pelo menos saca a idéia.

PHP
// Load the XML source
			$xml = new DOMDocument( "1.0", "ISO-8859-1" );
			$xml->preserveWhiteSpace = false;
			$xml->formatOutput   = true;
			$xml->load('produtos/abc.xml');
			
			$xsl = new DOMDocument("1.0", "ISO-8859-1" );
			$xsl->preserveWhiteSpace = false;
			$xsl->formatOutput   = true;
			$xsl->load('produtos.xsl');
			
			// Configure the transformer
			$proc = new XSLTProcessor();
			$proc->importStyleSheet($xsl); // attach the xsl rules
			$proc->setParameter('','tempo',iconv("ISO-8859-1", "UTF-8",strftime('%A, %d/%m/%Y',strtotime('now'))));

			echo $proc->transformToXML($xml);

XSL
<xsl:template match="general" mode="indicar">
		 <dl>
			<dt>Enviada em:</dt>
			<dd><xsl:value-of select="$tempo" /></dd>
			<dt>De:</dt>
			<dd><span id="mail">xxx@xxx.com</span></dd>
		</dl>
</xsl:template>

Acho que dá pra entender. E como eu falei, copiar e colar não vai funcionar já que essa parte estava totalmente aninhada e relacionada a outro elementos. O que você precisa entender é que o php usa setParameter() para enviar e o XSL recebe isso como variável ($tempo).

Caso você queira usar essa variável dentro de algum parâmetro use colchetes:
<form action="{$path}indicar.php" method="post" onsubmit="post(this);return false;">

:click:


#908205 Máscara De Campos

Posted by bimonti on 11/04/2008, 12:15

maskIt

Sintaxe: maskIt (w,e,m[,r[,a]]);
Retorno: nenhum.
Descrição: Aplica uma máscara no campo do tipo texto.
Explicação adicional: Função para aplicação de máscara em campos input do tipo texto. Funções com formato pré definidos funcionam melhor (CPF) que formatos variáveis (moeda).

Os argumentos da função são:

  • w: Referência ao elemento. Normalmente é this.
  • e: Evento usado para cancelar o Backspace.
  • m: Máscara a ser aplicada.
  • r: Aplicar a mascara da direita para a esquerda. Opcional [true|false] - Dafault : false.
  • a: Objeto com informações para aplicar após a máscara. Use você precisar aplicar alguma informação sempre no começo ou no fim do valor independente da máscara, como exemplo "R$" em campos do tipo monetário. Sintaxe: {[pre:'value'[,pos:'value']]}.

Função:

/**

* Função para aplicar máscara em campos de texto

* Copyright (c) 2008, Dirceu Bimonti Ivo - http://www.bimonti.net

* All rights reserved.

* @constructor

*/



/* Version 0.27 */



/**

* Função Principal

* @param w - O elemento que será aplicado (normalmente this).

* @param e - O evento para capturar a tecla e cancelar o backspace.

* @param m - A máscara a ser aplicada.

* @param r - Se a máscara deve ser aplicada da direita para a esquerda. Veja Exemplos.

* @param a -

* @returns null

*/

function maskIt(w,e,m,r,a){



// Cancela se o evento for Backspace

if (!e) var e = window.event

if (e.keyCode) code = e.keyCode;

else if (e.which) code = e.which;



// Variáveis da função

var txt = (!r) ? w.value.replace(/[^\d]+/gi,'') : w.value.replace(/[^\d]+/gi,'').reverse();

var mask = (!r) ? m : m.reverse();

var pre = (a ) ? a.pre : "";

var pos = (a ) ? a.pos : "";

var ret = "";



if(code == 9 || code == 8 || txt.length == mask.replace(/[^#]+/g,'').length) return false;



// Loop na máscara para aplicar os caracteres

for(var x=0,y=0, z=mask.length;x<z && y<txt.length;){

if(mask.charAt(x)!='#'){

ret += mask.charAt(x); x++;

} else{

ret += txt.charAt(y); y++; x++;

}

}



// Retorno da função

ret = (!r) ? ret : ret.reverse()

w.value = pre+ret+pos;

}



// Novo método para o objeto 'String'

String.prototype.reverse = function(){

return this.split('').reverse().join('');

};

Exemplos de Uso:

1. CPF:


<form name="teste">

<input type="text" name="cpf" onkeyup="maskIt(this,event,'###.###.###-##')" />

</form>

2. Telefone:


<form name="teste">

<input type="text" name="fone" onkeyup="maskIt(this,event,'(##)####-####')" />

</form>

3. Dinheiro


<form name="teste">

<input type="text" name="dinheiro" onkeyup="maskIt(this,event,'###.###.###,##',true,{pre:'R$'})" />

</form>

3. Graus


<form name="teste">

<input type="text" name="graus" onkeyup="maskIt(this,event,'###,#',true,{pre:'',pos:'º'})" />

</form>

Em breve novas implementações.

 




#880224 Função Para Retirar Caracteres Especiais

Posted by bimonti on 06/11/2007, 12:44

Pode ser assim tbm:
texto.replace(/\W/g,"");

Subistitui tudo que não for letra, número ou underline.


#865885 Ajax - Como Colocar Noticias Em Um Slide Show?

Posted by bimonti on 15/08/2007, 16:20

Então cara, baixa lá o arquivo, até onde eu lembro vem junto uma página de demonstração com o slide funcionando e um manual de como configurar. É bem simples, coisa fina sacou ?!


#776893 Mudar A Cor Do Botão Submit!

Posted by bimonti on 30/08/2006, 16:42

Como mudar a cor do Botão Submit padrão do Flash ?? Ele é cinza e no over o botão fica com um contorno verde ....

Edit-----------

Consegui: crie uma instancia do botão e no action do frame coloque:
bt.setStyle("themeColor","0xEFEBEF");

Tem como modificar o próprio estilo do Flash pra que qualquer botão ao invés de usar o estilo padrão (haloGreen) usar o q você definir, mas o flash demora um pouco mais pra renderizar.


#738980 Pra Quem Ainda Não Entende Ajax.

Posted by bimonti on 11/05/2006, 12:37

Bom, sobre o AJAX eu não sou nem TRUE e nem FALSE, eu sou NULL, por isso não perguntem se eu sei usa-lo da melhor forma, se eu recomendo, ou se sou contra. Não sei, nunca fiz nenhuma aplicação de grande porte que necessitasse, portanto não vou comentar, simplesmente NULL. E quem garante que eu sei o que é AJAX ?? Nunca ouviram a frase: "Quem sabe faz, quem não sabe ensina!" ??

Antes de COMEÇAR a ler este post você se compromete aos seguintes termos:
- Eu tenho conhecimento pleno em HTML.
- Eu conheço JavaScript.
- Eu já usei um pouco algumas coisas de DOM.
- Sei o que é XML.
- Também sei que AJAX só funciona com requisições http, ou seja, não vou acessar assim: c://Documents and Settings/eu_mesmo/meu primeiro ajax.js e muito menos file:/// ...
- Sei que isso não é um código completo e não vou perguntar: "Como mudo 'isso' pra 'churisso' e coloco no meu site de video games ?? PLZzzorRR !!11!"

Eu avisei...

Esse post não é mais um dos vários exemplos de como utilizar o AJAX para fazer 2 selects, cadastrar alguma informação e etc.. porque vejo que normalmente são usuários que não tem tanto conhecimento sobre Javascript que utilizam os códigos dos tutoriais e querem fazer alterações, sem ao menos saber o porque daqueles 'comandos' dentro da função. Ou estou errado ?? Todo mundo que tem uma aplicação AJAX que seja no site sabe o porque do número 4 no "var.readyState == 4" ??? Garanto que quem fez o código do tutorial sabe, mas quem copiou o código e colou no dreamweaver salvando com o mesmos nomes não sabe. Pensando nisso eu vou dar um breve comentário sobre algumas coisas que fazem parte das funções mais conhecidas.

Primeiro de tudo você tem que inicar a requisição ao navegador. Para isso vamos inicar uma instância do objeto XMLHttpRequest. Mas como todo mundo tá careca de saber tem as diferenças de navegador. A família Safari, Mozilla usa de uma forma os os IElike usam de outra. Tá explicado o porque de:

var variavel;
if (window.XMLHttpRequest) {
variavel = new XMLHttpRequest();
} else if (window.ActiveXObject) {
variavel = new ActiveXObject("Microsoft.XMLHTTP");
}


No quote acima eu crio uma variavel com o nome de 'variavel', depois eu testo o objeto XMLHttpRequest(pra a família Mozilla, Safari), se ele retornar TRUE a variavel vai criar o objeto, senão vai pra proxima tentativa que é pra família IE. É comum ser usado junto com a inicialização do objeto o try..catch, que é uma função do Javascript (tá aí o porque era bom saber um pouco de Javascript). O try..catch serve para pegar o erro e não mostrar pro usuario aquela janelinha "There's an error, do you wish to debug ?". Apesar que o try..catch só é suportado a partir do IE5+ e Mozilla 1+ (Se você pensa que vai segurar o erro quando o cara estiver usando o IE4 pode esquecer, use onerror). O try..catch funciona assim, imagine que eu queria dar um alert e sem querer errei a digitação:

var msg;
function mostraAlerta(){
try{
aalert("Olá");
}
catch(erro)
{
msg = "Ocorreu um erro na página. \n";
msg+ = "Clica no OK pra continuar";
alert(msg);
}
}


Chega de try..catch, não é o objetivo do post. Bom, vamos ver agora os métodos do XMLHttpRequest. Estão nesse formato:

Nome = Descrição. Meu comentário.

abort() = Aborta a atual requisição. Precisa de comentários ? Então tá bom, você pode usar caso fique com medo do seu servidor demorar para devolver a requisição. Crie na função que manda a requisição um TimeStamp, caso ela demore muito você aborta e dá uma mensagem de erro.

open("método", "URL"[, assíncrono [, "usuario"[, "senha"]]]) = Define a URL, o método e os parâmetros adicionais da requisição a ser enviada. Provavelmente esse é o método que você mais verá, junto com o send(). ELe é responsável por definir os parâmetros da requisição. Os métodos podem ser POST ou GET, e o 'assíncrono' que tem na sintaxe do método é o que define se a execução do script é feita imediatamente após o método send() ser chamado ou se aguarda por uma resposta. Use as flags TRUE ou FALSE. O problema de usar o FALSE é que se o seu servidor ficar sem responder a tela do navegador vai ficar congelada, mais ou menos quando trava tudo no PC. Os outros parâmetros são opcionais.

send(conteúdo) = Transmite a requisição, opcionalmente com dados postados ou dados DOM. É isso mesmo, esse método que vai enviar a requisição. Se você usar GET e passar os dados pela URL use send(null), se usar POST é só colocar o conteúdo a ser passado aí dentro. Mas usando o POST você tem que enviar alguns cabeçalhos junto. Veja mais no outro método.

setRequestHeader("label","valor") = Define um label/valor para o cabeçalho que será enviado junto com a requisição. Nem traduzi o label porque fica feio.

Olhe os 2 exempos abaixo e veja se entende melhor:

var.onreadystatechange = functionPraTrabalharARequisicao;
var.open("GET", url, true);
var.send(null);


var.open("POST", url, true);
var.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
var.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
var.setRequestHeader("Pragma", "no-cache");
var.onreadystatechange = functionPraTrabalharARequisicao;
var.send("Nome=" + Nome);


Eu defini nos cabeçalhos que os dados serão enviados como se fossem um formulário normal. E no outro eu defini que não é pra armazenar as informações em cache, porque as vezes acontece de devolver a mesma requisição, ou outros problemas.

Agora vamos ver as propriedades. Neste formato:

Nome = Descrição. Meu comentário.

readyState = Número inteiro com o status da requisição. Devolve como um número inteiro o status da sua requisição. Só isso.
0 = Não inicializado
1 = carregando
2 = carregado
3 = Interagindo
4 = Completo

onreadystatechange = Gerenciador de eventos a cada mudança de estado. Agora ferrou hein ??. Nada mais é que uma função que será responsável por checar se a requisição já foi processada. Por isso a comparação "readyState == 4", toda vez que mudar de estado uma função que você definir será responsável por essa verificação, então no seu código quando o estado for 4 você continua. A menos que você queria seguir no 1 ...

var.onreadystatechange = workSend;
var.open("GET", url, true);
var.send(null);


No exemplo acima eu defini que a função workSend() será a responsável por trabalhar com os valores retornados por readyState. É comum ver nessas funções somente a comparação "var.readyState == 4", mas nada impede de ser assim:

var.readyState == 0 -> Peraí que já vai começar
var.readyState == 1 -> Aee, seguuurraaa peãaaoo
var.readyState == 2 -> UUUhhhhhuuuuu, vamo que vamo
var.readyState == 3 -> Vamo lá cabloco, tá chegano
var.readyState == 4 -> Aqui você trabalha seu resultado

responseText = Versão 'string' dos dados devolvidos pelo servidor após processar a requisição. É somente isso que ela faz, nada mais. Simples e cru.

responseXML = Idêntica a de cima, mas devolve os dados no modelo DOM.

status = Código numérico retornado pela requisição ao servidor. É diferente do readyState, esse código é 200, 404, etc.. que no caso um 200 é que a página foi encontrada e está tudo OK, o 404 é que não achou .. etc..

statusText = Mensagem que acompanha o código do status. Você pode usar para exibir ao usuário a mensagem de erro retornada. Ex.:

if (var.status == 200) {
// ...se funfar você faz aqui suas paradas...
} else {
alert("Ouve um problema com sua requisição:\n" + var.statusText);
}


Bom, é isso ae, acho que agora fica mais fácil pra quem ainda tinha dúvidas sobre AJAX para já ir resolvendo alguns dos seus problemas sozinhos, dá pra esclarecer um pouco sobre os comandos e como utiliza-los. Não são todos os métodos e propriedades, tem muito mais por esse mundo afora.

T+


IPB Skin By Virteq