2014-12-21 6 views
-1

Я хочу использовать заголовок (включая css, js и images) и нижние колонтитулы, расположенные в папке с именем/template. Эти файлы затем получить включены в каждый файл вниз в каталоге, например:создание относительного пути для файлов include

/template/header.php + footer.php 
/home/index.php 
/products/products.php 
/products/hardware/types/hardware.php 
/css 
/js 
/images 

Когда я использую:

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

Файл включен (хотя мне нужно изменить каждый файл и объявление более «/. ./ «дальше вниз по каталогу i go), но все css, js и изображения сломаны.

вот мой заголовок (находится в header.php, один из включенных файлов):

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<link rel="shortcut icon" href="images/favicon.ico"> 
<link rel="icon" type="image/gif" href="images/favicon.ico"> 
<link rel="stylesheet" type="text/css" href="../css/layout.css"/> 
<link rel="stylesheet" type="text/css" href="../css/slider.css"/> 
<link rel='stylesheet' type='text/css' href='../css/menus.css'/> 
<link rel='stylesheet' type='text/css' href='../css/forms.css'/> 
<link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="all"/> 
<script type="text/javascript" src="../js/jquery.js"></script> 
<script type="text/javascript" src="../js/jquery.elastic.source.js"></script> 
<script type="text/javascript" src="../js/control.js"></script> 

<title>APEC Energy - <?php echo($PageTitle);?> </title> 
</head> 

Я сейчас пытаюсь использовать конфигурационный файл (который трудно получить работу и до сих пор не делает для меня).

config.php (помещается в корневой папке) (мне нужно поместить больше информации в массиве, путь к файлу или директории пути, если да, то как делать?):

<?php 

$paths = array(
    "root" => "./", 
     "controller" => "controller",    
     "stylesheets" => "css", 
     "images"  => array(...), 
     "javascript" => array(...), 

); 

$projectName = "/"; 
function fInc($filePath){ 
    global $projectName; 
    return '//'.$_SERVER['HTTP_HOST'].'/'.$projectName.'/'.$filePath; 
} 

?> 

и в каждом .php файла призывающие к включая им файла с помощью:

<?php 
$rootDir = $_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1]); 
require_once($paths['helper']['html']."template/header.php"); 
?> 

Когда я использую var_dump ($ пути), он печатает «NULL»

но просто пустой экран сейчас?

спасибо

ответ

0

я всегда включал в первой строке каждого PHP в config.php:

require_once($_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1])."/config.php"); 

Этот код всегда должен найти корневой каталог, а затем включить файл config.php. Обратите внимание, что вы можете поместить этот файл в любом месте - он всегда найдет свое местоположение самостоятельно. Если впоследствии вы переместите файл в другой каталог, вам ничего не нужно менять.

Этот конфигурационный файл затем определяет пути ко всем подкаталогов и других важных файлов, по отношению к корневому каталогу:

$paths = array(
    "root" => "", 
     "controller" => "controller",    
     "stylesheets" => "css", 
     "images"  => array(
      "icons" => "img/icons", 
      "controls" => "img/controls" 
      ), 
     "javascript" => array(...), 
     ... 
); 

Этот массив означает, что корневая папка (ваш public_html) содержит каталоги «контроллер» , «таблицы стилей», изображения IMG/иконок „или„Img/управления“

Все другие файлы включены так» и так далее изображения либо помещены внутри.“:.

require_once($paths['helper']['html']."/form.php"); 

Это может быть очень полезно, поскольку оно позволяет вам перестроить полный макет каталога, и вам нужно только обновить файл config.php.

И, наконец, но не в последнюю очередь, конфиг также содержит функцию:

$projectName = "YourProjectFolderName"; 
function fInc($filePath){ 
    global $projectName; 
    return '//'.$_SERVER['HTTP_HOST'].'/'.$projectName.'/'.$filePath; 
} 

Он может быть использован для преобразования пути, которые будут вставлены в HTML-документ.

Редактировать: Обратите внимание, что определение массива со всеми путями - всего лишь предложение. Это помогло мне в моих проектах, так как я часто меняю структуру своего проекта. Если вы не сделаете, что в вашем проекте, вы можете просто определить

$rootDir = $_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1]); 

, а затем включают в себя файлы с

require_once($rootDir . "/home/index.php"); 

Таким образом, вы не будете нуждаться в config.php больше.

+0

ok выглядит великолепно, просто нужно понять некоторые элементы. 1. в верхней части файла конфигурации, нужно ли мне перечислять файлы css или изображения (и т.д.)? или использовать код как есть? 2. в функции require_once (я полагаю, вы предлагаете использовать эту функцию вместо include), просто отредактируйте «./ form» в файле, который я хочу включить, и aev «helper» и «html», так как это , 3. И имя папки проекта - это имя верхнего корневого каталога «public_html»? – alwayslearning

+0

1. Это зависит от размера вашего проекта. Если у вас большой проект, может быть полезно определить массив со всеми существующими каталогами и их путями, а затем использовать его для включений. 2. Да, я recomment require_once(); 3. Я не уверен в этом. Либо это 'public_html', либо' .' (если это так, ваш может удалить его) – maja

+0

хорошо, большое спасибо! даст как попытку, так и дать вам знать. – alwayslearning

0

Try:

<?php 
$basePath = dirname(__FILE__); 
// Or __DIR__, since PHP 5.3.0 

require_once($basePath . "relative/path/from/basePath"); 
// replace the string with your real relative path 


редактирует:

Q1) Да. dirname(__FILE__) описывает абсолютный путь каталога, в котором находятся ваши файлы.

Q2) Не нужно. Если вы знаете, файл, который вы хотите включить только один уровень или два уровня вверх вы можете также использовать
Для одного уровня - include("../filename.php");
Для второго уровня - include("../../filename.php");
и так далее ..
Примечание: Но Я по-прежнему рекомендую использовать абсолютные пути.


Для справки:
PHP: Absolute vs. relative paths

+0

Путь лука должен быть на стороне сервера, например./Public_html /. И что включает в себя заявление с этим? было так много. – alwayslearning

+0

и буду ли я ставить это заявление каждый раз, когда я использую include? – alwayslearning

+0

Проблема заключается в том, что относительный путь зависит от местоположения файла. Когда вы перемещаете файл в другое место, вам нужно переписать его контент, чтобы он работал. – maja