+1

Garantindo com PHP e Javascript que uma página abra dentro de frames

criado por Adriano de Oliveira Gonçalves em 21/02/2006 8:11pm
É 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:

<!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&ccedil;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&ccedil;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...

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)