2015-07-01 49 views
2

我创造我的第一个(基本)PHP应用程序,并想开始我的意思是去是关于文件路径和全局CSS - 这是相当新的给我。但是我现在有工作,我想,如果有一个更有效的方式来通知(对于未来的打样/扩展)包括每个PHP页面INC子

我有一个简单的文件结构如下:

- css 
-- bootstrap.css 
- lib 
-- display.php 
- template 
-- header.php 
-- footer.php 
- admin 
-- login.php 
- globals.php 
- index.php 

我想包括我的CSS(bootstrap.css)在每页上。我已在我的global.php中声明了一个全局单元格,如下所示:

<?php define('URL', 'http://localhost/myLocalSite'); ?> 

在我的display.php我已经包括了CSS;

<link href="<?php echo URL ?>css/styles.css" rel="stylesheet"> 
<link href="<?php echo URL ?>css/bootstrap.min.css" rel="stylesheet"> 

我使用以下方法将这些包括在我的index.php中;

<?php include('globals.php') ?> 
<?php include('template/header.php') ?> 
<?php include('lib/display.php') ?> 

我包括这在我的login.php通过以下(不子文件夹的位置);

<?php include('../globals.php') ?> 
<?php include('../template/header.php') ?> 
<?php include('../lib/display.php') ?> 

子目录内的文件工作每当(如上login.php)做我总是需要包括以包含的文件或者是有没有更好的办法了../

就像我说的它的工作原理,我是新来这个如此唉建议表示赞赏。

+0

拿一个lo ok在作曲家的依赖框架的PHP https://getcomposer.org/ – ConMan

回答

1

相反,如果你想删除PHP处理逻辑,我会在你的HTML <head>部分使用HTML <base>标签提示,你可以看到例如使用here

<base href="http://www.yoursite.com/" target="_blank"> 

然后,你必须改变这些低于行

<link href="<?php echo URL ?>css/styles.css" rel="stylesheet"> 
<link href="<?php echo URL ?>css/bootstrap.min.css" rel="stylesheet"> 

<link href="css/styles.css" rel="stylesheet"> 
<link href="css/bootstrap.min.css" rel="stylesheet"> 

这将消除PHP处理部分

+0

主要的好处是,在所有网页你不必处理包括网址,考虑'CSS/styles.css'这将是所有页面,''预先登录到您网页中的所有网址 – Viral

+0

不,它的一切都很好,试试吧! – Viral

+0

谢谢你的工作。但是我仍然需要在我的'login.php'页面添加'<?php include('../ lib/display.php')?>'以便CSS呈现。 –

4

你可以让你的index.php路由器,然后重写请求它。
然后,您可以在索引文件中声明一个常量,并从中加载其他文件。

define('ROOT', dirname(__FILE__)); 

,然后到处可以这样

require(ROOT.'/globals.php'); 
require(ROOT.'/template/header.php'); 
require(ROOT.'/lib/display.php'); 

只是为了举例路由器包括文件: .htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

然后,你可以做任何事情的索引。PHP,例如:

<?php 
    $uri = $_SERVER["REQUEST_URI"]; 
    require "templates/header.php"; 
    switch ($uri) { 
     case "/": 
      include "views/index.php"; 
      break; 
     case "/login": 
      include "admin/login.php"; 
      break; 
     case "/something": 
      include "views/something.php"; 
      break; 
     default: 
      include "views/404.php"; 
      header("HTTP/1.0 404 Not Found"); 
      break; 
    } 
    require "template/footer.php"; 

未来的改进:

  • 你可以在某些方面它自动,不为每个 文件

  • Some tutorial on php routing创建一个case,但要小心安全原因 - 不包括秘密文件

+0

这是什么意思,它不工作?错误或stragne行为?你不需要'<?php include('../ globals.php')?> <?php include('../ template/header.php')?>'in login.php只需要索引。 php – Toumash

+0

感谢您提供非常详细的答案+1。然而,我必须接受@Viral的答案,因为在这一点上对我更有意义(新手)。然而,我会阅读更多关于路由的内容 –