Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ahsc

[Resolvido] Função php executada dentro de função javascipt

Recommended Posts

Olá a todos.

 

Andei fuçando na net mais num achei nada que pudesse ajudar. Seguinte: tenho um programinha que usa prototype para gerar janelas arrastáveis, redimensionáveis.... No framework você passa parâmetros direto para que tamanho/altura da janela sejam usados para inicialização, assim como página que será carregada e o título da página. Até aí beleza a coisa é bem fácil de fazer. Linha de comando abaixo:

 


win = new Window({className: "mac_os_x", title: "aqui vai o título", width: 333, height: 255, destroyOnClose: true, recenterAuto:false, top:10, url: "aqui vai a url que você deseja ver"});
win.showCenter();

E aqui é como esse evento é chamado

 

onclick="Application.evalCode('contato')"

Mais aí eu tenho um problema. O aplicativo utilizará desse framework para carregar várias janelas que por sua vez terão vários tamanhos e se "linkarão" a várias páginas. Então eu tive a idéia de utilizar o php para passar parâmetros para o framework. desta forma eu poderia utilizá-la com apenas o código acima e em diversas situações.

 

criei uma classe que seria utilizada por uma função javascript. Essa classe seria responsável em passar os parâmetros que eu necessito de acordo com cada situação.

 

eis a classe

 


class janelas
	{
		public $pag;
		public $largura;
		public $altura;
		public $titulopagina;
		
		public function __construct($pag, $largura, $altura, $titulopagina)
		{
			$this->pag 		= $pag;
			$this->largura 		= $largura;
			$this->altura		= $altura;
			$this->titulopagina 	= $titulopagina;
		}
	}

A classe tem um método construtor que é usado para pegar os parâmetros que eu quisesse. O código abaixo é utilizado no link ou botão. Esse código é a função "carregaJanela" que é feita em javascript.

 

carregaJanela('http://www.globo.com', '300', '300', 'site')"

A classe carregaJanela do javascript que chama a função construtora do php é a seguinte

 

<script>

	function carregaJanela(pag, largura, altura, titulojanela)
	{
		alert(pag);
		document.write(<?php $parametro = new janelas(pag, largura, altura, titulojanela);?>);
	}
	
	
</script>

a classe do carregaJanela, cria o objeto $parametro da classe janelas (PHP) e tem como parâmetros as variáveis passadas no evento onclick que é executado quando o usuário clica em algum botão. Desta forma, pelo menos era o que esperava, os parâmetros para a criação das janelas através do framework deveriam funcionar. Mais isso não ocorre. O erro informado é que o parâmetro "largura" não foi definido no script, ou seja, as variáveis passadas não são "reconhecidas".

 

Pelo que li, esse procedimento não pode ser feito já que o php é uma linguagem server-side e o javascript não. Não gostaria de ter refresh na página. Acredito que passando parâmetros via javascript para um arquivo php essa situação já teria resolvido e essa não é a intenção. Também não sei se é possível passar os mesmos parâmetros via javascript mesmo. Será que alguém consegue me dar um helps para esse problema?

 

Abaixo está o script que deveria pagar os valores do objeto criado atraves da função do javascript.

 


win = new Window({className: "mac_os_x", title: "<?php echo $parametro->titulopagina;?>", width: <?php echo $parametro->largura;?>, height: <?php echo $parametro->altura;?>, destroyOnClose: true, recenterAuto:false, top:10, url: "<?php echo $parametro->pag;?>"});
win.showCenter();

Quando carrego a página e olho o código fonte esse é o erro apresentado.

 

[code}

 

function carregaJanela(pag, largura, altura, titulojanela)

{

write(<br />

<b>Notice</b>: Use of undefined constant pag - assumed 'pag' in <b>F:\wamp\www\sistema cristofoletti\administracao\templates\default\index.php</b> on line <b>123</b><br />

<br />

<b>Notice</b>: Use of undefined constant largura - assumed 'largura' in <b>F:\wamp\www\sistema cristofoletti\administracao\templates\default\index.php</b> on line <b>123</b><br />

<br />

<b>Notice</b>: Use of undefined constant altura - assumed 'altura' in <b>F:\wamp\www\sistema cristofoletti\administracao\templates\default\index.php</b> on line <b>123</b><br />

<br />

<b>Notice</b>: Use of undefined constant titulojanela - assumed 'titulojanela' in <b>F:\wamp\www\sistema cristofoletti\administracao\templates\default\index.php</b> on line <b>123</b><br />

);

}

[/code]

 

Agradeço a quem puder me dar uma ajudinha...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, o problema de passagem de parâmetros eu consegui resolver usando uma função que passa parâmetros para um objeto criado dentro desta função. e no evento onclick eu chamo a função passando os parâmetros. Essa dúvida era referente a um framework que utilizei para a criação de janelas tipo popup redimensionáveis, dragáveis e que podem ser minimizadas. O link é esse pra quem se interessar: http://www.linksweb.com.br/janelas-e-desktop-em-ajax-com-prototype/

 

O objetivo era ao invés de eu criar vários objetos na página (várias chamadas para objetos) eu fazer apenas uma chamada e ir passando parâmetros para essa chamada. Assim eu poderia criar quantas janelas eu quisesse e do tamanho que eu quisesse chamando qual arquivo eu quisesse.

 

Eis a solução

 

1ª inserir os arquivos js e css dentro da tag <head></head>


<script type="text/javascript" src="js/prototype.js"> </script> 
<script type="text/javascript" src="js/effects.js"> </script>
<script type="text/javascript" src="js/window.js"> </script>
<script type="text/javascript" src="js/window_effects.js"> </script>
<script type="text/javascript" src="js/application.js"> </script>

<link href="css/winlight.css" rel="stylesheet" type="text/css" />
<link href="css/default.css" rel="stylesheet" type="text/css" />
<link href="css/alphacube.css" rel="stylesheet" type="text/css" />

Esses arquivos são utilizados para o funcionamento. Ao baixar os arquivos você vai encontrar a documentação e exemplos de uso.

 

Agora o pulo do gato. A função que criei para passagem de parâmetros

 


<script type="text/javascript">

	function abreJanela(titulopagina, largura, altura, pag)
	{
		
        	win = new Window({className: "mac_os_x", title: titulopagina, width: largura, height: altura, destroyOnClose: true, recenterAuto:false, top:10, url: pag}); //aqui são os parâmetros para a criação da janela
			win.showCenter(); //aqui é para a janela aparecer centralizada
		
			Application.evalCode('janela');//aqui é para efetuar o carregamento da janela. Sem esse cara nada funciona. Note que há um parâmetro dentro dele. O próximo trecho mostra de onde vem
	}

</script>

Para a janela aparecer na tela será necessário criar uma div oculta com uma tag especial utilizada pelo framework. Segue código.

 


<div id="janela" style="display:none">//div que fica oculta
    
  
  		<xmp id="janela">//tag especial utilizada pelo framework. Olha o parâmetro que é chamado pelo método Application.evalCode('janela')
        	
   		</xmp>
        
        
  	</div>

A sua chamada no link é a seguinte:

 

  onclick="abreJanela('Abrir janela de arquivo teste',550,400,'teste.php')"

como esse código chama um arquivo chamado teste.php com oos tamanhos de largura e altura (550 e 400 respectivamente) e o nome da janela definido em "abrir janela arquivo teste", você pode querer que esse arquivo tb abra outra janela com outra especificação. Nesse caso chame a função na raiz utilizando:

 

onclick="parent.abreJanela('outro nome de janela',350,500,'nome de outro arquivo')"

desta forma você pode chamar quantas janelas achar necessário.

 

Ps. Comente a linha 65 do arquivo application.js. isso evita uma mensagem de "erro" que ainda não descobri o que é. Essa mensagem não interrompe o funcionamento do script mais estéticamente pega mal. Ao comentar essa linha, esse "erro" não aparece e suas janelas ficam mais elegantes.

 

acho que é isso. Bom proveito!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.