Я делаю сайт только с 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. Они позаботятся об автозагрузке и многом другом.
Других решений пока нет …