Ir para conteúdo

POWERED BY:

Arquivado

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

peterlink

[Resolvido] Estrutura site PHP

Recommended Posts

Boa noite

Estou desenvolvendo um site em PHP, e estou com a seguinte duvida (sem utilização de ajax para carregar paginas)

O layout nao vai mudar apenas o conteúdo dele

fiz um template com cabeçalho, menu lateral e rodapé cada um em um arquivo diferente.

Nas paginas do site irei da include desse template

Porem estou com um problema que ao usar o template na raiz funciona certo mas quando vou chamar o template em paginas

que estao dentro de subpastas ja recebo o erro dos includes dos arquivos que inclui no cabeçalho tais como :(classes, css, js, img).

 

gostaria de saber como faço para corrigir isso? pois tenho os arquivos da raiz que ficam certos os includes mas os que estao em subpastas nao.

 

 

Agradeço a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que erro aparece? Precisamos da mensagem pra tentar entender o que acontece. Os caminhos no include para os arquivos estão certos?

 

Se for o caso posta a mensagem de erro, e parte do código de como você estaria chamando os arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que erro aparece? Precisamos da mensagem pra tentar entender o que acontece. Os caminhos no include para os arquivos estão certos?

 

Se for o caso posta a mensagem de erro, e parte do código de como você estaria chamando os arquivos.

 

Entao assim tenho uma pasta que fica o template do meu site...

Chamo ela na index do meu site

 include("template/header.php");

Até ai tudo bem... Agora eu tenho uma outra pagina que esta dentro de uma subpasta EX: RAIZ/PAGES

 

no arquivo dentro da pasta PAGES eu do novamente include agora assim

 include("../template/header.php");

 

Porem la na pg header.php eu tenho outros include tais como (css,classes,js)

 

esses includes sao validos quando acessado pela index.php que esta na raiz do site agora quando acessado de um arquivo de uma subpasta eles nao sao mais validos, espero que tenha entendido +D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize caminhos absolutos ao invés de relativos.

 

No primeiro arquivo do sistema, que pode ser o index.php ou um possível config.php incluído dentro deste, defina uma constante:

 

Para PHP 5.3+

define( 'BASE_DIR', __DIR__ . DIRECTORY_SEPARATOR );

Para PHP 4.0.2+

define( 'BASE_DIR', dirname( __FILE__ ) . DIRECTORY_SEPARATOR );

Agora faça TODOS os seus includes iniciarem com essa constante e aponte o caminho do mesmo jeito que faz para quando no index, isto é, sem os ../:

 

include BASE_DIR . 'template/header.php';

E mesmo dentro dos arquivos incluídos:

 

include BASE_DIR . 'template/css/style.css';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize caminhos absolutos ao invés de relativos.

 

No primeiro arquivo do sistema, que pode ser o index.php ou um possível config.php incluído dentro deste, defina uma constante:

 

Para PHP 5.3+

define( 'BASE_DIR', __DIR__ . DIRECTORY_SEPARATOR );

Para PHP 4.0.2+

define( 'BASE_DIR', dirname( __FILE__ ) . DIRECTORY_SEPARATOR );

Agora faça TODOS os seus includes iniciarem com essa constante e aponte o caminho do mesmo jeito que faz para quando no index, isto é, sem os ../:

 

include BASE_DIR . 'template/header.php';

E mesmo dentro dos arquivos incluídos:

 

include BASE_DIR . 'template/css/style.css';

 

Entendi vou fazer os testes aqui... muito obrigado

Seria assim ?

define( 'BASE_DIR', C:/AppServ/www/site./);

 

E nos arquivos de css e js

<link rel="stylesheet" href="modulos/css/style.css" type="text/css" media="screen" />
<script type="text/javascript" src="modulos/js/jquery-1.7.1.min.js"></script>

 

Seria assim ?

 <link rel="stylesheet" href="<?".BASE_DIR."?>modulos/css/style.css" type="text/css" media="screen" />
   <script type="text/javascript" src="<?".BASE_DIR."?>modulos/js/jquery-1.7.1.min.js"></script>

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
define('ROOT_DIR', __DIR__ . DIRECTORY_SEPARATOR );

echo ROOT_DIR;
?>
   <script type="text/javascript" src="<?php echo ROOT_DIR?>Rmodulos/js/jquery-1.7.1.min.js"></script>

 

concatena certo! e ponha o ECHO ou use assim <?= ROOT_DIR?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caminhos absolutos é de uso exclusivo do servidor //define( 'BASE_DIR', __DIR__ . DIRECTORY_SEPARATOR );

 

Atenção: para incluir arquivos de .js .css e images usa-se

<base href="http://<?php echo $_SERVER['SERVER_NAME']; ?>"/>

 

entre as tags head

exemplo:

 

<head>

<base href="http://<?php echo $_SERVER['SERVER_NAME']; ?>"/>
<link href="view/css/stylePages.css" rel="stylesheet" type="text/css" />


</head>

 

Assim te dará o caminho da base da url

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caminhos absolutos é de uso exclusivo do servidor //define( 'BASE_DIR', __DIR__ . DIRECTORY_SEPARATOR );

 

Atenção: para incluir arquivos de .js .css e images usa-se

<base href="http://<?php echo $_SERVER['SERVER_NAME']; ?>"/>

 

entre as tags head

exemplo:

 

<head>

<base href="http://<?php echo $_SERVER['SERVER_NAME']; ?>"/>
<link href="view/css/stylePages.css" rel="stylesheet" type="text/css" />


</head>

 

Assim te dará o caminho da base da url

 

Valeu pelas dicas pessoal +D

 

Pelo que entendi ao usar

define('ROOT_DIR', __DIR__ . DIRECTORY_SEPARATOR );

ele pegaria o diretorio raiz certo ?

 

Sem a necessidade de escrever manualmente no lugar do __DIR__ correto ?

 

Mas nao esta funcionando pois ao fazer include usando a constante retorna assim

require_once(__DIR__\modulos/settings.php)

 

Sera que poder ser a versao do php ?

estou utilizando a versao 5.2.6

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caminhos absolutos é de uso exclusivo do servidor //define( 'BASE_DIR', __DIR__ . DIRECTORY_SEPARATOR );

Isso não é de todo verdade.

 

Eu me equivoquei sim quanto à forma utilizada. Essa constante não deve ser usada para arquivos CSS, JavaScript e quaisquer outros os quais o usuário pode ver no código-fonte e acessar manualmente, já que expõe a estrutura do seu servidor.

 

Mas indicar a localização de um arquivos CSS ou JavaScript desde o schema até a extensão também é um caminho absoluto.

 

Valeu pelas dicas pessoal +D

 

Pelo que entendi ao usar

define('ROOT_DIR', __DIR__ . DIRECTORY_SEPARATOR );

ele pegaria o diretorio raiz certo ?

 

Sem a necessidade de escrever manualmente no lugar do __DIR__ correto ?

Exato. Por isso ela é uma constante mágica.

 

Mas nao esta funcionando pois ao fazer include usando a constante retorna assim

require_once(__DIR__\modulos/settings.php)

 

Sera que poder ser a versao do php ?

estou utilizando a versao 5.2.6

Como eu disse, __DIR__ só existe a partir do PHP 5.3. No seu caso, você deve usar a segunda opção que faz a mesma coisa.

 

Se há alguma dúvida quanto às barras "normais" e invertidas, o certo seria usar a constante DIRECTORY_SEPARATOR, que representa barra invertida no Windows e barra "normal" em sistema *nix.

 

Porém, é um pé ficar usando elas toda hora. Então use apenas barras "normais", pois o Windows também as entende como separador de diretório.

 

Qual a diferença de usar o $_SERVER['DOCUMENT_ROOT'] e o recomendados acima?

DOCUMENT_ROOT aponta para o diretório principal onde o script está sendo executado.

 

Se cada uma de suas rotinas estão em um arquivo PHP diferente, em um diretório diferente, esse valor vai mudar de arquivo para arquivo e confiar nele será um problema.

 

Agora se todo seu sistema se apoia no index.php, seja com querystrings, seja através de roteamento de URL (muito comum com MVC), essa informação será sempre a mesma.

 

Porém, nem sempre todos os índices de $_SERVER poderão estar presentes, logo a técnica acima é mais segura de se usar, afinal você não precisará testar.

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.