Я делаю сайт только на php. Чтобы упростить обновление верхнего и нижнего колонтитулов, я создал файл master.php с таким содержимым:
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1, user-scalable=no">
<meta name = "description" content = "">
<meta name = "author" content = "">
<link rel = "icon" href = "../images/a-master-favicon.ico" alt = "a-master-favicon" >
<title>Testing site</title>
<link href = "assets/css/sticky-footer-navbar.css" rel = "stylesheet"/>
<link rel = "stylesheet" href = "assets/css/head_footer.css" />
</head>
<body>
<?php $signed_request = $_POST['signed_request']; ?>
<?php if (empty($signed_request)): ?>
<?php include('header.php'); ?>
<?php else: ?>
<div id = "eatSpace" style = "margin-bottom: -175px;"></div>
<?php endif; ?>
<?php include($content); ?>
<?php if (empty($signed_request)): ?>
<?php include('footer.php'); ?>
<?php endif; ?>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src = "js/jquery.easing.1.3.js"></script>
<script src = "js/jquery.animate-enhanced.min.js"></script>
</body>
</html>
Во-первых, часть $signed_request предназначена для того, чтобы я мог показывать определенный контент, когда он загружается через Facebook, это не проблема.
Проблема в том, что моя структура папок выглядит следующим образом:
root
|
|--assets
| |
| |--css
| |--js
|
|--faqs
| |
| |--faqs-content.php
| |--index.php
|
|
|--footer.php
|--header.php
|--index-content.php
|--index.php
|--master.php
Итак, когда я звоню, скажем, index.php, это выглядит так:
<?php
$content = 'index-content.php';
include('master.php');
Это, в свою очередь, вызывает master.php и загружает весь сайт.
Однако, если я попытаюсь сделать то же самое в другом каталоге (например, faqs/) и вызову там index.php, то код будет выглядеть немного иначе:
<?php
$content = 'faqs-content.php';
include('../master.php');
Это загружает все нормально, за исключением того, что CSS или js не загружаются вообще, потому что путь внутри главного файла находится в другом каталоге. Как я могу это преодолеть?
Это первый раз, когда я делаю что-то подобное, поэтому я не уверен, что то, что я сделал, даже лучший способ сделать это.






Если ваш сайт простой, вы можете обойтись сочетанием относительных и абсолютных ссылок. Ваши ресурсы должны использовать абсолютную ссылку, например <link href = "/assets/css/sticky-footer-navbar.css" rel = "stylesheet"/>, тогда как ссылки PHP могут быть относительными, как вы описали.
Однако он плохо масштабируется для более сложных приложений и может быстро стать трудным в управлении. Современные PHP-фреймворки используют Автозагрузка PHP.
Если вам не нравится изобретать колесо заново, изучите хороший фреймворк, например Laravel или Yii. Они позаботятся об автозагрузке и многом другом.
Я обязательно посмотрю на Laravel и Yii, спасибо!
Вы можете использовать абсолютные пути в своих ссылках, например.
<link href = "/assets/css/sticky-footer-navbar.css" rel = "stylesheet"/>