PHP Template include () вызывает ошибки каталога - PullRequest
1 голос
/ 01 декабря 2011

У меня возникла эта проблема при использовании функции php include() или require(). Я постараюсь объяснить это как можно лучше здесь, но дайте мне знать, если это не имеет смысла. Я создаю систему тем, в которой у основного index.php есть include ('themes/main/header.php'), но при связывании таблиц стилей и изображений возникают ошибки. Вот как выглядит мой каталог.

  • HTDOCS
    • index.php
    • тема
      • основной
        • header.php
        • footer.php
        • изображения
        • 1054 * CSS *
        • JS

Вот содержимое моего header.php (чередующийся):

<html>
    <head>
        <link rel="stylesheet" href="css/layout.css" type="text/css" media="screen" />
    </head>
<body>
<div class="header">
<img src="images/logo.png" />
</div>

Когда я загружаю основной файл index.php, таблицы стилей и изображения не могут быть найдены. Я знаю, что это потому, что заголовочный файл занесен в файл index.php, но есть ли способ обойти это? Большое вам спасибо.

Ответы [ 7 ]

1 голос
/ 01 декабря 2011

Самое простое решение - добавить переменную template_path в файлы вашего шаблона и передать эту переменную в ваш анализатор шаблонов:

<html>
    <head>
        <link rel="stylesheet" href="{TEMPLATE_PATH}css/layout.css" type="text/css" media="screen" />
    </head>
<body>
<div class="header">
<img src="{TEMPLATE_PATH}images/logo.png" />
</div>
1 голос
/ 01 декабря 2011

PHP включает (находится в PHP) на стороне сервера, но ссылки в файле HTML на стороне клиента, поэтому они ссылаются на их воспринимаемый файл (index.php). Просто настройте путь в файле для размещения.

0 голосов
/ 01 декабря 2011

Я, для себя, использую что-то вроде этого:

define(SITE_ROOT, '/'); //client side root of website
define(SITE_PATH, '/var/www/mywebsite/htdocs/'); //serverside root of website 

function url($relative, $startingFrom = false, $echo = true) {
    $r = '';
    if($startingFrom === false) {
        $r = SITE_ROOT . $relative;
    } else {
        $forward = str_replace('\\', '/', $startingFrom);
        $path = substr($forward, 0, strrpos($forward, '/'));
        $r = SITE_ROOT . substr($path, strlen(SITE_PATH)) . '/' . $relative;
    }
    if($echo) {
        echo $r;
    } else {
        return $r;
    }
}

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

таким образом, в header.php вы можете написать:

<link rel="stylesheet" href="<?php url('css/layout.css', __FILE__);?>" type="text/css" media="screen" />

функция имеет несколько необязательных атрибутов, они должны быть самоочевидными.

0 голосов
/ 01 декабря 2011

Вам необходимо указать имена файлов со ссылкой на index.php.Другой способ обойти это - объявить некоторые переменные в файле конфигурации (или в небольшом проекте, подобном этому, просто в index.php), который содержит полный URL вашего сайта:

$site = http://www.example.com/

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

<img src="<?= $site ?>images/logo.png" />

Если я не ошибаюсь, я думаю, что использование абсолютных путей лучше для SEO (поисковая оптимизация).

0 голосов
/ 01 декабря 2011

я сделал правку после перечитывания ваших вопросов, чтобы - измените ваши пути так:

href="/themes/main/css/layout.css" 
src="/themes/main/images/logo.png" 

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

0 голосов
/ 01 декабря 2011

Обычно есть два варианта:

  • Во-первых, используйте абсолютные URL-адреса (то есть полные URL-адреса, включая http://.../css/layout.css или просто только путь от root, например, /themes/main/css/layout.css)
  • Во-вторых, создайте относительный путь из «основного» файла, из которого вы включаете другие файлы. В этом случае это будет /themes/main/css/layout.css.
0 голосов
/ 01 декабря 2011

, включая файл в php, не обрезает путь для браузера, в html он должен быть

<link rel="stylesheet" href="/themes/main/css/layout.css" type="text/css" media="screen" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...