2012-09-14 9 views
5

Mam plik header.php, który zawiera link do pliku .css.Jak używać względnych ścieżek dla dołączonych plików, takich jak .css

Kiedy dołączam plik header.php do innego pliku php w innym folderze, plik .css href w pliku header.php nie jest poprawny w nowym pliku php.

jak powinienem odrzucić .css href, więc mógłbym dołączyć do niego header.php w dowolnym folderze?

+0

Dlaczego nie używać ścieżek względem Twojej domeny, takich jak '/ styles/your.css' –

+1

Użyj pełnego linku dla CSS w pliku header.php – Adsy2010

Odpowiedz

1

Jak to:

<link rel="stylesheet" href="/css/style.css" /> 

Pierwszy / mówi "Idź do katalogu głównego i spojrzeć stamtąd". To względna ścieżka.

0

Napisz bezwzględną ścieżkę do pliku css jak:

<link href="http://site.com/css/style.css" />

13

Jest to powodem wielu dużych aplikacji będzie próbował ustawić stałą/zmienną 'root' URI podczas instalacji.

Podczas /css/style.css będzie działać, jeśli aplikacja znajduje się w katalogu głównym domeny/subdomeny, nie powiedzie się, jeśli nie jest (/appName/css/style.css)

Store absolutny URI do folderu skryptu „root” wzdłuż z innymi stałymi/zmiennymi konfiguracji, a budowanie bezwzględnych łączy staje się proste.

define('SCRIPT_ROOT', 'http://localhost/yourApplication'); 
// ... 
echo '<link rel="stylesheet" type="text/css" href="'.SCRIPT_ROOT.'/css/style.css">'; 
+0

Jeśli przechowuję absolutny URI do config.php, to ja należy dołączyć plik config.php do pliku header.php. Jak już powiedziałem, header.php i nowy php nie znajdują się w tym samym folderze, nowy plik php nie może teraz znaleźć pliku config.php zamiast .css. To nie ułatwia sprawy. –

+0

Jeśli twój kod nie jest świadomy "gdzie jest" w dowolnej strukturze katalogów, nie jestem pewien, czy mogę ci pomóc. Czy nie możesz zakodować w sztywno względnej lokalizacji pliku konfiguracyjnego? – discomatt

7

Masz kilka opcji, które starałem się zebrać tutaj

base href

<head> 
<base href="http://www.mysite.com/" /> 
</head> 

co robi jest ustawia wszystkie HREF wskazać na pewne ścieżki. Z tego zestawu można użyć <link rel='stylesheet' href='css/mycss.css' /> i pomyślnie załadować mycss.css plik nawet jeśli strona jest głęboko w http://www.mysite.com/pages/2012/public/secret_folder/myownphpfile.php

bezwzględnych ścieżek

zawsze można użyć aboslute ścieżek, takich jak, ale może być trudny do zmiany folderów plików później.

<link rel='stylesheet' href='http://www.mysite.com/css/mycss.css' /> 

zdefiniowane klepie

Jak powiedział @Discomatt, używając PHP zdefiniowane ścieżki to łatwy sposób, aby utrzymać wszystko działa. Wadą; musisz używać PHP. jeśli używasz go tak czy inaczej, nie ma problemów ^^

define('CSSDIR', 'http://www.mysite.com/css/); 
<link rel='stylesheet' href='<?= CSSDIR ?>mycss.css' /> 
4

widzę jeden powód, dla którego chce mieć dynamiczny i względną ścieżkę dla generacji href linki, a to jest po uruchomieniu projektu na wielu domen lub witryn, które mają różne ścieżki. (Na przykład Twój projekt jest dostępny pod numerem http://myproject.example.org/, a także pod numerem http://example.org/myprojecttest/).Jeśli tak nie jest, to chciałbym zaproponować bezpośrednio podając swój css zawiera w stosunku do głównego folderu:

<link href="/css/style.css" /> 

jeśli to ma zastosowanie do ciebie, spróbuj tego:

W każdym dokumencie najwyższego poziomu która wymaga header.php, dodaj zmienną $ ROOT, która wskazuje położenie dokumentu najwyższego poziomu w porównaniu z katalogiem głównym. np:

$ROOT = './'; 

lub

$ROOT = '../'; 

lub

$ROOT = '../../'; 

Teraz w pliku header.php, można użyć:

<link href="<?php echo $ROOT; ?>css/style.css" /> 

ten pozwala na dokonywanie plik header.php, który będzie działał dla dowolnej strony o dowolnej ścieżce względnej.

Pełna Przykład

dołączonego pliku (/path/header.php)

<html><body> 
<head> 
    <link href="<?php echo $ROOT; ?>css/style.css" /> 
[...] 

pliku 1 (/path/index.php)

<?php 
$ROOT = './'; 
include 'header.php'; 
?>  

pliku 1 (/path/admin/index.php):

<?php 
$ROOT = '../'; 
include '../header.php'; 
?>  

pliku 3 (/path/admin/test/magic.php):

<?php 
$ROOT = '../../'; 
include '../../header.php'; 
?>  
0

podstawie Tom's answer Zrobiłem połączenie base url i PHP define (krócej pisania).

Gdzieś w PHP:

define("HOST_BASE", "http://example.com/"); 

Następnie w pliku nagłówka:

<base href="<?php echo HOST_BASE ?>"> 

Znacznik base było dla mnie nowe i martwiłem się o kompatybilności, ale wydaje się działać dobrze. Jest more info about it at MDN.

Powiązane problemy