Имейте несколько фрагментов HTML, которые я хочу включить в «родительский» файл.
Родительский файл содержит относительные пути.
Эти фрагменты также содержат относительные пути относительно их расположения - не относительно файла, который они будутбыть включенным в.
Например, один фрагмент - это заголовок, общий для всех страниц сайта.
<div style='background:url(img/bg.jpg)'>
<img src='img/logo.png'>
</div>
Это будет вставлено в существующую страницу следующим образом:
<div style='background:url(img/gradient.jpg)'>
<?php include '../includes/header.txt'; ?>
</div>
Пример: очень сильно упрощен , реальные файлы имеют много путей.
Я НЕ контролирую файлы, которые будут включены.
Это означает, что я не могу добавить переменные PHP в URL.
Я также не могу сделать пути абсолютными в любом случае.
Длявключенные файлы - потому что я не контролирую html.
Для всех файлов - потому что последние страницы создаются на нескольких машинах и должны работать либо на http://www.mysite/myfile, http://localhost/mysite/myfile,, либо дажеhttp://127.0.0.1/~/anyuser/...
Некоторые идеи, которые у меня были:
- php include :
include '../includes/header.txt';
- Пути выходят относительно файлаэто было включено в.
- Включение каждого фрагмента в виде iFrame:
- Макет страницы не очень удобен для iFrame.Помимо SEO и проблем с загрузкой страницы.
- Анализ страницы и замена всех путей с помощью парсера.
- Страницы не являются на 100% действительными HTML (без контроля над ними), и анализатор кашляет и переворачивается замертво.Помимо нелепой загрузки сервера.
- Использование базовых тегов
- Прекрасно работает в любом реальном браузере.
Но Internet Explorer 7, 8,и 9 просто игнорируют базовый тег (вне головы).Один базовый тег может быть объявлен в заголовке, но тогда все остальные пути на странице (и, вероятно, в файлах CSS) будут неверными.
BaseTag Использование:
<?php
echo "<base href='$path_to_includes_folder' />";
include '../includes/header.txt';
echo "<base href='$path_based_on___file__' />";
?>
Как я понимаю, именно поэтому базовый тег был создан и поддерживается во всех приличных браузерах - так чтомы можем в середине одного HTML-файла сообщить браузеру, что я собираюсь включить второй HTML-файл, и все пути должны быть относительно нового местоположения.Это прекрасно работало в IE6, и я предполагаю, что, должно быть, была какая-то логика в отбрасывании его поддержки.Некоторая логика, которая ускользнула от Opera, Webkit и Mozilla.Единственные сообщения, которые я могу найти на эту тему, хвалят Microsoft за отказ от поддержки, не давая даже намека на причину, почему отказывается от поддержки для чего-то, что является принятым стандартом (используется во всехбраузеры того времени) и полезно - это хорошо.
Теперь я ненавижу разработку для IE со страстью, но не могу игнорировать это.У них все еще есть почти треть пользователей!
Итак, как включить фрагменты php с относительными путями и сохранить их относительно включаемого файла?
И кто-нибудь может сказать мне, если есть какая-то причина вообще поддержки MS отброшенной базыили что можно сделать, чтобы вернуть его?