Garantindo com PHP e Javascript que uma página abra dentro de frames
É verdade que nos últimos anos, com a evolução dos conceitos de desenvolvimento web e webdesign, as frames vêm tendendo a cair em quase completo desuso. Porém, em diversas aplicações o uso de frames ainda chega a ser bem útil, as vezes quase necessário. Seja em uma barra superior que dá acesso a varias páginas do mesmo domínio, ou sites em que seu uso delicado enriquece ou torna mais funcional o layout, ou em outras aplicações úteis em sistemas web. Enfim, o meu objetivo neste artigo não é discutir sobre a utilidade ou não dos frames, mas demonstrar uma solução simples para o problema apresentado, de forma o usuário seja redirecionado para a página com frames sem perder o link no qual ele entrou.
Para isso, vou utilizar dois elementos básicos:
- um arquivo PHP com os framesets (página que possui a definição dos frames), que vou chamar de "index.php"
- um arquivo js (javascript), que vou chamar de "frames.js".
A dinâmica vai ser a seguinte:
Javascript:
- O usuário entra na página
- O javascript verifica: se não existir a frame superior, redireciona o usuário para a página dos framesets, passando o link da página atual via url.
PHP:
- O arquivo dos framesets verifica se foi passado algum link via URL
- Se foi passado algum link, escreve no src (endereço da página) da frame de conteúdo o endereço que foi passado na url, se não, utiliza a página padrão, que vai ser sua página inicial.
Essa abaixo é minha página padrão com os framesets:
Obs.: Tomei a liberdade de usar um programa WYSISYG pra fazer essa parte... :-)
O arquivo javascript vai ficar da seguinte maneira:
Bem simples, não? a função "escape" é similar a urlencode do PHP: serve pra converter os caracteres de forma que possa ser passado como o conteúdo da variável em uma query string. Note que eu posso utilizar nesse if o nome de qualquer uma das outras frames que deveriam estar ali. No meu caso, tenho uma frame com o nome "titulo" (veja no código do frameset).
Agora, vamos mexer um pouco no arquivo com os framesets, pra fazer a segunda parte, considerando que a minha página padrão é a "principal.php":
E o arquivo javascript vai ser inserido em todas as páginas que devem aparecer dentro dos frames, desta forma:
Obs.: as páginas não precisam necessariamente rodarem PHP; apenas a página com os framesets.
Agora, pode experimentar. Vamos supor que você tenha uma página "fale conosco.php". Vai ficar assim:
Experimente agora entrar direto na "faleconosco.php".
Agora, fiquem a vontade pra comentar...
Para isso, vou utilizar dois elementos básicos:
- um arquivo PHP com os framesets (página que possui a definição dos frames), que vou chamar de "index.php"
- um arquivo js (javascript), que vou chamar de "frames.js".
A dinâmica vai ser a seguinte:
Javascript:
- O usuário entra na página
- O javascript verifica: se não existir a frame superior, redireciona o usuário para a página dos framesets, passando o link da página atual via url.
PHP:
- O arquivo dos framesets verifica se foi passado algum link via URL
- Se foi passado algum link, escreve no src (endereço da página) da frame de conteúdo o endereço que foi passado na url, se não, utiliza a página padrão, que vai ser sua página inicial.
Essa abaixo é minha página padrão com os framesets:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>Adriano.IsON.com.br - Seja Bem vindo a minha webpage pessoal...</title> <meta name="author" content="Adriano de Oliveira Gonçalves"> <meta name="generator" content="Namo WebEditor v3.0"> <style><!-- --> </style> </head> <frameset rows="74, 83%" cols="1*" border="0"> <frame src="about:blank" name="titulo" noresize scrolling="no" marginwidth="0" marginheight="0" namo_target_frame="contents"> <frameset rows="1*" cols="165, 80%"> <frame src="about:blank" name="contents" noresize scrolling="no" marginwidth="0" marginheight="0" namo_target_frame="detail"> <frame src="principal.php" name="detail" noresize scrolling="yes" marginwidth="2" marginheight="2"> </frameset> <noframes> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> <p>Viewing this page requires a browser capable of displaying frames.</p> </body> </noframes> </frameset> </html>
Obs.: Tomei a liberdade de usar um programa WYSISYG pra fazer essa parte... :-)
O arquivo javascript vai ficar da seguinte maneira:
if(!(parent.titulo)) parent.window.location="index.php?link="+escape(window.location);
Bem simples, não? a função "escape" é similar a urlencode do PHP: serve pra converter os caracteres de forma que possa ser passado como o conteúdo da variável em uma query string. Note que eu posso utilizar nesse if o nome de qualquer uma das outras frames que deveriam estar ali. No meu caso, tenho uma frame com o nome "titulo" (veja no código do frameset).
Agora, vamos mexer um pouco no arquivo com os framesets, pra fazer a segunda parte, considerando que a minha página padrão é a "principal.php":
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <?Php // Se foi passado algum link, escreve no src (endereço da página) da frame de conteúdo o endereço que foi passado na url, se não, utiliza a página padrão, que vai ser sua página inicial. if(!isset($_GET['link'])) $link="principal.php"; else $link=$_GET['link']; ?> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>Adriano.IsON.com.br - Seja Bem vindo a minha webpage pessoal...</title> <meta name="author" content="Adriano de Oliveira Gonçalves"> <meta name="generator" content="Namo WebEditor v3.0"> <style><!-- --> </style> </head> <frameset rows="74, 83%" cols="1*" border="0"> <frame src="about:blank" name="titulo" noresize scrolling="no" marginwidth="0" marginheight="0" namo_target_frame="contents"> <frameset rows="1*" cols="165, 80%"> <frame src="about:blank" name="contents" noresize scrolling="no" marginwidth="0" marginheight="0" namo_target_frame="detail"> <!-- Aqui eu coloco o código para inserir o link definido na frame. --> <frame src="<?=$link?>" name="detail" noresize scrolling="yes" marginwidth="2" marginheight="2"> </frameset> <noframes> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> <p>Viewing this page requires a browser capable of displaying frames.</p> </body> </noframes> </frameset> </html>
E o arquivo javascript vai ser inserido em todas as páginas que devem aparecer dentro dos frames, desta forma:
<head> ... <script language="Javascript" src="frames.js"></script> </head>
Obs.: as páginas não precisam necessariamente rodarem PHP; apenas a página com os framesets.
Agora, pode experimentar. Vamos supor que você tenha uma página "fale conosco.php". Vai ficar assim:
<HTML> <HEAD> <TITLE>Fale conosco</TITLE> <script language="Javascript" src="frames.js"></script> </HEAD> <BODY> Nosso e-mail: adriano.php4@gmail.com </BODY> </HTML>
Experimente agora entrar direto na "faleconosco.php".
Agora, fiquem a vontade pra comentar...
Novo Comentário: