peterlink 1 Denunciar post Postado Abril 21, 2012 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
Alaucho 5 Denunciar post Postado Abril 21, 2012 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
peterlink 1 Denunciar post Postado Abril 21, 2012 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
Bruno Augusto 417 Denunciar post Postado Abril 21, 2012 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
peterlink 1 Denunciar post Postado Abril 21, 2012 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
Luis Paullo 47 Denunciar post Postado Abril 21, 2012 <?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
Estud@nte 6 Denunciar post Postado Abril 21, 2012 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
peterlink 1 Denunciar post Postado Abril 22, 2012 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
Rafael Fiori 2 Denunciar post Postado Abril 22, 2012 Qual a diferença de usar o $_SERVER['DOCUMENT_ROOT'] e o recomendados acima? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 22, 2012 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
peterlink 1 Denunciar post Postado Abril 22, 2012 Poxa valeu msm Bruno muito boa explicação me ajudou muito todos voces =D Abraços Compartilhar este post Link para o post Compartilhar em outros sites