Как я могу вызвать файл master.php из папки без потери всех путей? - PullRequest
0 голосов
/ 28 октября 2018

Я делаю сайт только с 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 вообще, потому что путь в основном файле находится в другом каталоге. Как я могу преодолеть это?

Это первый раз, когда я делаю что-то подобное, поэтому я не уверен, что то, что я сделал, является даже лучшим способом сделать это.

1 Ответ

0 голосов
/ 28 октября 2018

Если ваш сайт прост, вы можете использовать комбинацию относительных и абсолютных ссылок.Ваши ресурсы должны будут использовать абсолютную ссылку, такую ​​как <link href="/assets/css/sticky-footer-navbar.css" rel="stylesheet"/>, тогда как ссылки PHP могут быть относительными, как вы описали.

Однако, это плохо масштабируется для более сложных приложений и может быстро стать сложным для управления.Современные PHP-фреймворки используют PHP автозагрузку .

. Если вам не нравится заново изобретать колесо, изучите хороший фреймворк, такой как Laravel или Yii.Они заботятся об автозагрузке и многом другом.

...