2012-09-14 33 views
5

Tôi có tệp header.php chứa liên kết tệp .css.Cách sử dụng đường dẫn tương đối cho các tệp được bao gồm như .css

Khi tôi đưa header.php vào một tệp php khác trong thư mục khác, tệp .css href trong header.php không đúng trong tệp php mới.

Tôi nên từ chối .css href, vì vậy tôi có thể đưa header.php vào thư mục đó trong bất kỳ thư mục nào?

+0

Tại sao không sử dụng đường dẫn liên quan đến miền của bạn, chẳng hạn như '/ styles/your.css' –

+1

Sử dụng liên kết đầy đủ cho CSS trong tệp header.php của bạn – Adsy2010

Trả lời

1

Như thế này:

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

Các / đầu tiên nói "Đi vào thư mục gốc và tìm kiếm từ đó". Đó là một con đường tương đối.

0

Viết đường dẫn tuyệt đối của file css như:

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

13

Đây là một lý do rất nhiều các ứng dụng lớn sẽ cố gắng thiết lập một 'root URI' liên tục/biến khi cài đặt.

Trong khi /css/style.css sẽ có tác dụng nếu ứng dụng của bạn nằm trong thư mục gốc của tên miền/tên miền phụ, nó sẽ thất bại nếu nó không phải là (/appName/css/style.css)

Store tuyệt đối URI đến 'root' thư mục kịch bản cùng với các hằng số cấu hình/biến khác và xây dựng liên kết tuyệt đối trở nên dễ dàng.

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

Nếu tôi lưu trữ URI tuyệt đối vào config.php, thì tôi cần phải bao gồm tệp config.php vào header.php. Như tôi đã nói header.php và php mới không có trong cùng một thư mục, tệp php mới bây giờ không thể tìm thấy tệp config.php thay vì tệp .css. Điều đó không làm cho mọi thứ trở nên dễ dàng hơn. –

+0

Nếu mã của bạn không biết 'nó ở đâu' trong bất kỳ cấu trúc thư mục nào, tôi không chắc tôi có thể giúp bạn. Bạn không thể mã hóa cứng một vị trí tương đối với tệp cấu hình? – discomatt

7

Bạn có vài lựa chọn, mà tôi đã cố gắng để thu thập đây

cơ sở href

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

gì nó làm, là bộ tất cả hrefs để trỏ đến con đường nhất định. Với thiết lập này, bạn có thể sử dụng <link rel='stylesheet' href='css/mycss.css' /> và tải thành công tập tin mycss.css ngay cả khi bạn trang là sâu thẳm trong http://www.mysite.com/pages/2012/public/secret_folder/myownphpfile.php

đường dẫn tuyệt đối

Bạn luôn có thể sử dụng aboslute đường dẫn như, nhưng nó có thể là một nỗi đau để thay đổi thư mục của các tập tin sau này.

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

định nghĩa vỗ

Như @Discomatt nói, sử dụng PHP định nghĩa đường dẫn là một cách dễ dàng để giữ cho mọi thứ làm việc. Nhược điểm; bạn phải sử dụng PHP. nếu bạn sử dụng nó dù sao, không có vấn đề ^^

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

tôi có thể nhìn thấy một lý do muốn có thế hệ con đường năng động và tương đối cho các liên kết href, và đó là nếu bạn chạy dự án của bạn trên nhiều tên miền hoặc trang web có những con đường khác nhau. (Ví dụ: dự án của bạn có sẵn trên http://myproject.example.org/ và cũng trên http://example.org/myprojecttest/).Nếu đây không phải là trường hợp, tôi sẽ đề nghị trực tiếp xác định css của bạn bao gồm tương đối so với thư mục gốc:

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

Nếu điều này không áp dụng đối với bạn, hãy thử này:

Trong mọi tài liệu cấp cao nhất yêu cầu header.php, thêm biến $ ROOT cho biết vị trí của tài liệu cấp cao nhất so với gốc. ví dụ:

$ROOT = './'; 

hoặc

$ROOT = '../'; 

hoặc

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

Bây giờ, trong file header.php của bạn, bạn có thể sử dụng:

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

Điều này cho phép bạn thực hiện tệp header.php sẽ hoạt động cho bất kỳ trang nào tại bất kỳ đường dẫn tương đối nào.

Full Ví dụ

bao gồm tập tin (/path/header.php)

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

Tập 1 (/path/index.php):

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

Tập 1 (/path/admin/index.php):

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

Tập 3 (/path/admin/test/magic.php):

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

Dựa trên Tom's answer Tôi đã làm một sự kết hợp của base url và PHP define (cho ít đánh máy).

Một nơi nào đó trong PHP:

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

Sau đó, trong tập tin tiêu đề:

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

Thẻ căn cứ là mới với tôi và tôi đã lo lắng về khả năng tương thích, nhưng nó dường như làm việc tốt. Có more info about it at MDN.

Các vấn đề liên quan