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: