2012-09-14 8 views
5

Ho un file header.php che contiene un collegamento al file .css.Come utilizzare i percorsi relativi per i file inclusi come .css

Quando includo header.php in un altro file php in una cartella diversa, il file. Css href in header.php non è corretto nel nuovo file php.

come dovrei decleare .css href, quindi potrei includere header.php con esso in qualsiasi cartella?

+0

Perché non utilizzare i percorsi relativi al tuo dominio, come '/ styles/your.css' –

+1

Usa il link completo per i CSS nel file header.php – Adsy2010

risposta

1

Ti piace questa:

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

Il primo / dice "Vai alla directory principale e guardare da lì". È un percorso relativo.

0

Scrivi il percorso assoluto del file css come:

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

13

Questo è un motivo molte grandi applicazioni cercheranno di impostare costante/variabile a 'root URI' durante l'installazione.

Mentre /css/style.css funzionerà se l'applicazione si trova nella directory principale del dominio/sottodominio, fallirà se non è (/appName/css/style.css)

Conservare l'URI assoluto nella cartella script 'root' lungo con altre costanti/variabili di configurazione e costruire collegamenti assoluti diventa un gioco da ragazzi.

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

Se memorizzo l'URI assoluto su config.php, allora I è necessario includere il config.php in header.php. Come ho detto l'header.php e il nuovo php non sono nella stessa cartella, il nuovo file php ora non riesce a trovare il file config.php al posto di .css. Ciò non rende le cose più facili. –

+0

Se il codice non è a conoscenza di "dove si trova" in una determinata struttura di directory, non sono sicuro di poterti aiutare. Non è possibile codificare in modo rigido una posizione relativa nel file di configurazione? – discomatt

7

Si hanno poche opzioni, che ho cercato di raccogliere qui

base href

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

Ciò che fa, è imposta tutti HREF per puntare a certo percorso. Con questo set, è possibile utilizzare <link rel='stylesheet' href='css/mycss.css' /> e caricare con successo mycss.css file anche se siete pagina è nel profondo del http://www.mysite.com/pages/2012/public/secret_folder/myownphpfile.php

percorsi assoluti

È sempre possibile utilizzare aboslute percorsi come, ma può essere un problema cambiare le cartelle di file in seguito.

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

pacche definiti

Come detto @Discomatt, utilizzando percorsi definiti PHP è un modo semplice per mantenere le cose a lavorare. Svantaggio; devi usare PHP. se lo si utilizza in ogni modo, nessun problema ^^

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

riesco a vedere un motivo per voler avere generazione percorso dinamico e relativo per i collegamenti href, e cioè se si esegue il progetto su più domini o siti che hanno percorsi diversi. (Ad esempio, il progetto è disponibile su http://myproject.example.org/ e anche su http://example.org/myprojecttest/).Se questo non è il caso, vorrei suggerire direttamente specificando il vostro CSS include relativo alla cartella principale:

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

Se questo non applicarsi a voi, provate questo:

In ogni documento di livello superiore che richiede header.php, aggiungi una variabile $ ROOT che indica la posizione del documento di livello superiore rispetto alla radice. ad esempio:

$ROOT = './'; 

o

$ROOT = '../'; 

o

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

Ora, nel file header.php, è possibile utilizzare:

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

Questo ti permette di fare un file header.php che funzionerà per qualsiasi pagina in qualsiasi percorso relativo.

Esempio completa

Incluso File (/path/header.php)

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

File 1 (/path/index.php):

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

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

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

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

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

Sulla base di Tom's answer ho fatto una combinazione di base url e un PHP define (per meno di battitura).

Da qualche parte in PHP:

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

Poi nel file di intestazione:

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

Il tag base era nuovo per me ed ero preoccupato per la compatibilità, ma sembra funzionare bene. C'è more info about it at MDN.

Problemi correlati