Ir para conteúdo

POWERED BY:

Arquivado

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

Aender

Includes php : Incluir arquivo (paginas) somente uma vez .

Recommended Posts

Boa noite pessoal!!! Estou com uma dúvida sobre includes php, gostaria de saber se é possivel incluir um elemento apenas uma vez , como um Banner e um rodapé por exemplo usando php.O layout do meu site é bem simples, tem um Banner com um menu horizontal ,o meio onde as páginas são abertas e o rodapé.Acontece que uma das páginas chamadas no Banner tem outro menu vertical do lado esquerdo usando navegação QueryString php, quando ativo um link desse menu, a página abre corretamente com o menu, mas o banner e o rodapé são perdidos.Teria como incluir esses arquivos apenas uma vez no index.php de modo que não seja necessário dar um include neles de novo em cada página ?

Desde já obrigado pessoal.

[Edit] :Bom descobri agora o include_once que teoricamente iria garantir que o arquivo fosse incluído apenas uma vez, mas não resolveu, teria que arranjar um meio de fazer com que uma vez que arquivo foi incluído ele não seja eliminado quando chmar outra página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor solução para isso é que você coloque todo o tráfego no seu index.php usando o módulo mod_rewrite do .htaccess.

 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (home|sobre|contato) /index.php?pag=$1 [L]
</IfModule>

Observe que home, sobre e contato são exemplos de páginas que seriam acessadas pelos endereços: exemplo.com/home, exemplo.com/sobre e exemplo.com/contato, sendo redirecionado respectivamente para index.php?pag=home, index.php?pag=sobre e index.php?pag=contato.

 

No index.php, onde ficaria apenas o seguinte:

<?php
// A página que será carregada, por padrão: home
$page = "home";
if (isset($_GET['pag'])) {
   $page = $_GET['pag'];
}


// o cabeçalho (header), com banner e menu, é incluído uma única vez
include "header.php";


// Aqui carregasse o "meio" da página de acordo com a URL
switch ($page) {

   // carrega um dos arquivos home.php, sobre.php ou contato.php, de acordo com a requisição
   case 'home':
   case 'sobre':
   case 'contato':
      include "{$page}.php";
   break;

   default:
      include "404.php"; // página de erro "404 - Página não encontrada"
   break;

}

// o rodapé (footer), também uma única vez
include "footer.php";

 

Deu pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor solução para isso é que você coloque todo o tráfego no seu index.php usando o módulo mod_rewrite do .htaccess.

.....

mangakah valeu Brolther !!! Pôxa auto nível seu código, vou ter estudar um pouquinho para implemetar, mas vai ser bom que eu aprendo.Bom é o seguinte meu index.php já possui um sistema de includes com Switch , quando chamo index.php ele monta a página da seguinte forma :

index.php

 
<?php 
         include ("topo.php");
  include ("paginas.php"); //Aqui possui o switch com os includes do menu horizontal do topo
  include ("rodape.php");	  
?> 

O problema ocorre porque um desses links do menu do topo abre uma página que também possui um menu com navegação QueryString ,esse menu abre suas próprias páginas mas aí perco a referencia do topo e do rodapé.Com esse squema que você me passou resolveria o problema ? Vou implementar agora.

Agradeço mais uma vez pela boa vontade, um grande abraço.

 

mangakah consegui chamar o topo, a home e o rodape mas não consegui chamar as páginas do menu do topo .Como ficaria isso ? Um exemplo de como estou colocando no menu é o seguinte :

  <li> <a href="?page=projetos" ><strong>PROJETOS </strong></a> </li> 

e no index a parte dos links está assim :

  
// carrega um dos arquivos home.php, sobre.php ou contato.php, de acordo com a requisição
   case 'home':
include ('home.php');
   break; 
   case 'projetos':
   include ('projetos.php');
   include "{$page}.php";   //Não entendi isso
   break;
   default:
   include "404.php"; // página de erro "404 - Página não encontrada"
   break;

} 

Além do mais qual a função desse código ? Onde ele deve ficar ? como devo edita-lo ?

<IfModule mod_rewrite.c>
//......
</IfModule>

Me desculpe pela ignorância, mas eu nunca tinha trabalhado dessa forma e estou com um pouco de dúvida.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema ocorre porque um desses links do menu do topo abre uma página que também possui um menu com navegação QueryString ,esse menu abre suas próprias páginas mas aí perco a referencia do topo e do rodapé.Com esse squema que você me passou resolveria o problema ?

 

O correto é ter apenas um sistema de navegação, embora na página possa haver um menu principal -- no topo ou á esquerda com os links das páginas mais importantes -- e um outro menu no rodapé com links suplementares, com informações sobre o site, como o link "Sobre nós", "Parcerias", "Perguntas mais frequentes", etc. Mas tudo em um único sistema de navegação.

 

mangakah consegui chamar o topo, a home e o rodape mas não consegui chamar as páginas do menu do topo .Como ficaria isso ?

 

Há um erro no seu código. Vou explicar melhor o código e creio que você poderá corrigi-lo:

 

case 'home':

include ('home.php');

break;

case 'projetos':

include ('projetos.php');

Você não precisa ficar repetindo o comando de include, pode usar como eu fiz no código acima que é o mesmo que:

switch ($page) {

   case 'home':
      include "home.php";
   break;

   case 'sobre':
      include "sobre.php";
   break;

   case 'contato':
      include "contato.php";
   break;

   default:
      include "404.php";
   break;
}

 

Ou seja, se você colocar um 'case' atrás do outro, o comando antes do 'break' será executado se um deles for verdadeiro, caso contrário, 'default' é chamado. Assim você pode aproveitar e fazer uma rápida validação dos parâmetros e usar o valor da variável diretamente no caminho do 'include' sem medo.

 

Para deixar ainda mais claro, é o mesmo que:

if ($page == "home" or $page == "sobre" or $page == "contato") {
  include "{$page}.php";
}

 

 

Veja mais na documentação da instrução Switch.

 

include "{$page}.php"; //Não entendi isso

 

Com...

"{$page}.php"

Eu estou inserindo o valor da variável $page dentro de um string que termina com ".php". É o mesmo que fazer uma concatenação:

$page . ".php"

As chaves ('{' e '}') servem para delimitar o nome da variável, para que o interpretador não fique confuso.

 

 

Além do mais qual a função desse código ? Onde ele deve ficar ? como devo edita-lo ?

<IfModule mod_rewrite.c>
//......
</IfModule>

Isso é um comando de reescrita de URL que deve ser colocado em um arquivo com o nome ".htaccess" (Observe que o arquivo não tem um nome base, apenas uma extensão ".htaccess").

 

Se você estiver usando Windows, baixe o Notepad++ ou use o seu editor de código favorito para salvar o arquivo com este nome.

 

Com essa regra que coloquei acima, ele irá redirecionar uma URL para um arquivo, sem que o usuário tome conhecimento disso, simplesmente

 

Se você colocar exemplo.com/contato, ao invés do servidor procurar um diretório chamado 'contato', ele irá chamar o arquivo index.php e passar o valor "contato" no parametro QueryString 'pag', ou seja, exemplo.com/contato ficaria o mesmo que exemplo.com/index.php?pag=contato.

 

Observe que neste trecho é onde estão os nomes das páginas que podem estar presentes no QueryString, separados por '|'.

(home|sobre|contato)

Se você quiser adicionar alguma coisa, editar, etc. basta ter em mente que os nomes devem estar separados por '|' e que tudo deve estar dentro dos parenteses.

 

Para entender melhor, você também precisa aprender sobre Expressões Regulares.

 

Quanto tiver um tempinho, pesquise no Google por "URLs Amigáveis" e "Reescrita de URL"

 

Me desculpe pela ignorância, mas eu nunca tinha trabalhado dessa forma e estou com um pouco de dúvida.

 

Não há o que desculpar, é só ir aprender.

 

Bons estudos e boa sorte! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não porque há um código onde 'home' está definido como padrão:

 

$page = "home";
if (isset($_GET['pag'])) {
   $page = $_GET['pag'];
}

 

O valor de $page é "home". Se o request não for um daqueles citados no arquivo .htaccess, então o valor de page não é alterado, pois $_GET['pag'] não estará definida.

 

 

-

 

EDIT:

 

Uma rápida alteração:

 

Onde está

RewriteRule (home|sobre|contato) /index.php?pag=$1 [L]

 

Coloque

RewriteRule (.*) /index.php?pag=$1 [L]

 

 

Assim não fica sendo mais preciso editar o .htaccess se precisar adicionar algum item à navegação e a parte do "404.php" passa a fazer mais sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mangakah vi agora sua msg , valeu de novo Brother :thumbsup: .Bom, realmente é bem novo pra mim esse tipo de navegação, mas vi que é extremamente funcional, de qualquer forma acho que vou ter que ler um pouco para assimilar bem .Logo mais vou tentar implementar.

Cara ,agradeço de coração pela boa vontade em ajudar, valeu mesmo. :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

mangakah bom dia . Por gentileza Brother me da mais uma ajudinha pois eu tô apanhando muito, tem uns 6 meses que estou trabalhando com Php e meu conhecimento ainda é de iniciante.Bom , está assim:

Esse arquivo está no mesmo diretório de index.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php?pag=$1 [L]
</IfModule>

Meu index.php está assim:

<?php
// A página que será carregada, por padrão: home
$page = "home";
if (isset($_GET['pag'])) {
   $page = $_GET['pag'];
}
// o cabeçalho (header), com banner e menu, é incluído uma única vez
include "topo.php";

// Aqui carregasse o "meio" da página de acordo com a URL
switch ($page) {

   // carrega um dos arquivos home.php, sobre.php ou contato.php, de acordo com a requisição
   //Essas são as páginas que vou abrir no meio:
   case 'home':
   case 'projetos':       
   case 'coordenacao':
   case 'contato':
   include "{$page}.php";  //Agora entendi o esquema
   break;
   default:
   include "404.php"; // página de erro "404 - Página não encontrada"
   break;
}
// o rodapé (footer), também uma única vez
include "rodape.php";

No menu do banner está assim :

<ul>
        <li> <a href="?page=home"><strong style=" color: #F27900  ;"> HOME </strong></a></li>
        <li> <a href="?page=projetos" ><strong>PROJETOS </strong></a> </li>
        <li><a href="?page=coordenacao"> <strong>COORDENAÇÃO </strong></a></li>
        <li><a href="?page=contato"> <strong>CONTATO </strong></a></li>
</ul>

Po último, a página projetos que possui um menu usando querystring e onde está o problema da perca de referência do banner e do rodapé quando chamo as páginas ,está assim:

</div>
 <div id="content"> 
         <div  class="paginas" id="paginas"> 
         <?php
   if (isset($_GET['local'])){
   switch ($_GET['local']){
       case 01:
         include "projetos/prevest.php";
         break;
       case 02:
         include "projetos/byte.php";
         break;
       case 03:
         include "projetos/gape.php";
         break;
   }
}else{
   include "projetos/prevest.php";
}
?> 
</div>

Nos links está assim:

<ul id="MenuBar1" class="MenuBarVertical">
                    <li><a href="projetos.php?local=01" id="link1">Pré-Vestibular</a></li>
                    <li><a href="projetos.php?local=02" id="link2"> Projeto Byte</a></li>
                    <li><a href="projetos.php?local=03" id="link2"> Projeto Gape</a></li>
</ul>

Obs : O Módulo mod rewrite já está ativado no apache, está tudo beleza mas não consigo incluir as demais páginas do menu do Banner,além disso a Url amigavel, não está funcionando veja um exemplo do link chamando a página projetos :

http://localhost/abads/index.php?page=projetos 

O page=projetos continua aparecendo.

Cara se você puder me dar mais uma força eu agradeço demais pois estou desde ontem e não achei o erro, já li bastante material tb, mas creio que vou pegar legal só com a prática mesmo.Desde já muito obrigado pela paciência.Um grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não porque há um código onde 'home' está definido como padrão:

 

$page = "home";
if (isset($_GET['pag'])) {
   $page = $_GET['pag'];
}

 

O valor de $page é "home". Se o request não for um daqueles citados no arquivo .htaccess, então o valor de page não é alterado, pois $_GET['pag'] não estará definida.

 

 

-

 

EDIT:

 

Uma rápida alteração:

 

Onde está

RewriteRule (home|sobre|contato) /index.php?pag=$1 [L]

 

Coloque

RewriteRule (.*) /index.php?pag=$1 [L]

 

 

Assim não fica sendo mais preciso editar o .htaccess se precisar adicionar algum item à navegação e a parte do "404.php" passa a fazer mais sentido.

 

você tem certeza que isso da certo ???

já testou isso ???

isso ai só vai cair no 404

 

os links tem que ser assim

 

http://www.seusite.com.br/home

http://www.seusite.com.br/projetos/1

 

e no htaccess colocar tb assim

RewriteRule (.*) /index.php?pag=$1&local=$2 [L]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está funcionando !!! Troquei o htaccess antigo por :

  
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pag=$1

Mesmo assim não funcionou.

Por gentileza, alguém que tem experiência com php poderia me ajudar a descobrir o erro ? não sei mais o que fazer e não consigo descobrir o problema, no código que eu postei na Antepenúltima mensagem ,eu não consigo fazer a inclusão das páginas ,só consigo incluir o Banner , o rodapé e a home nada mais funciona.

O código é esse :

switch ($page) {

   // carrega um dos arquivos home.php, sobre.php ou contato.php, de acordo com a requisição
   //Essas são as páginas que vou abrir no meio:
   case 'home':
   case 'projetos':       
   case 'coordenacao':
   case 'contato':
   include "{$page}.php";  //Agora entendi o esquema
   break;
   default:
   include "404.php"; // página de erro "404 - Página não encontrada"
   break;
}

Se não for pedir muito, poderiam dar uma olhada no código completo que eu passei, que é a antepenúltima msg desse tópico ? Estou começando agora no PHP e já fiz de tido mas não decubro o erro.

Valeu pessoal.

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.