2012-09-14 36 views
5

Tengo un archivo header.php que contiene un enlace de archivos .css.Cómo utilizar rutas relativas para los archivos incluidos como Css

Cuando incluyo header.php en otro archivo PHP en otra carpeta, el archivo .css href en header.php no es correcto en el nuevo archivo php.

¿Cómo debo decleare href Css, así que podría incluir header.php con él en cualquier carpeta?

+0

¿Por qué no utilizar rutas relativas a su dominio, como '/ styles/your.css' –

+1

Utilice el enlace completo para el CSS en su archivo header.php – Adsy2010

Respuesta

1

De esta manera:

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

La primera / dice "Ir al directorio raíz, y mira desde allí". Es un camino relativo.

0

Escribir la ruta absoluta del archivo css como:

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

13

Ésta es una razón muchas aplicaciones grandes tratarán de establecer una constante 'root URI'/variable cuando la instalación.

Mientras /css/style.css funcionará si la aplicación se encuentra en el directorio raíz del dominio/subdominio, se producirá un error si no lo es (/appName/css/style.css)

tienda el URI absoluto a la carpeta script 'root' a lo largo de con otras constantes de configuración/variables y enlaces absolutos edificio se convierte en una brisa.

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

Si guardo el URI absoluto en config.php, entonces necesita incluir config.php en header.php. Como dije, el header.php y el nuevo php no están en la misma carpeta, el nuevo archivo php ahora no puede encontrar el config.php en lugar del archivo .css. Eso no hace las cosas más fáciles. –

+0

Si su código no tiene conocimiento de 'dónde está' en una estructura de directorios determinada, no estoy seguro de poder ayudarle. ¿No puedes codificar una ubicación relativa al archivo de configuración? – discomatt

7

usted tiene pocas opciones, que he tratado de reunir aquí

de base href

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

Lo que hace, es conjuntos de todos los hrefs para apuntar a cierto camino. Con este conjunto, puede utilizar <link rel='stylesheet' href='css/mycss.css' /> y cargar correctamente mycss.css archivo, incluso si usted es la página es el fondo de http://www.mysite.com/pages/2012/public/secret_folder/myownphpfile.php

rutas absolutas

Siempre se puede usar aboslute caminos tales como, pero puede ser un dolor para cambiar las carpetas de archivos más adelante.

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

palmaditas definidos

Como dijo @Discomatt, utilizando rutas de PHP definida es una manera fácil de mantener las cosas funcionando. Abajo; tienes que usar PHP. si lo usa de todos modos, no hay problemas ^^

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

puedo ver una de las razones para querer tener la generación de ruta dinámica y relativa de los enlaces href, y es que si se ejecuta el proyecto en varios dominios o sitios que tienen diferentes caminos (Por ejemplo, el proyecto está disponible en http://myproject.example.org/ y también en http://example.org/myprojecttest/).Si este no es el caso, sugeriría directamente especificando el CSS incluye relativa a la carpeta raíz:

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

Si esto se aplica a usted, intente esto:

En cada documento de nivel superior que requiere header.php, agrega una variable $ ROOT que indica la ubicación del documento de nivel superior en comparación con la raíz. por ejemplo:

$ROOT = './'; 

o

$ROOT = '../'; 

o

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

Ahora, en el archivo header.php, puede utilizar:

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

Esto le permite hacer un archivo header.php que funcionará para cualquier página en cualquier ruta relativa.

Ejemplo completa

archivo incluido (/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

Basado en Tom's answer hice una combinación de base url y un PHP define (por menos mecanografía).

En algún lugar de PHP:

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

A continuación, en el archivo de cabecera:

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

El tag de base era nuevo para mí y yo estaba preocupado por la compatibilidad, pero parece funcionar bien. Hay more info about it at MDN.

Cuestiones relacionadas