Как получить страницу & lt; title & gt; из содержимого включить в фронт-контроллер

Я использую шаблон фронт-контроллера на основе PHP, так что index.php предоставляет структуру страницы и шаблон, а все содержимое каждой страницы находится во включаемых файлах в /pages/,

index.php
/pages/home.inc
/pages/about.inc
/pages/contact.inc

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

Проблема с этим макетом заключается в том, что, поскольку вся информация о странице на странице включает в себя, <title> элемент не может быть заполнен Я мог бы поставить $title переменные в каждом включают, но загружаются после головы, что слишком поздно:

<html>
<head>
<title><?php echo $title; ?></title>     #$title is not set yet!
</head>
<body>
<?php include($content); ?>              #now $title is set
</body>
</html>

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

Редактировать: типичная страница включения может выглядеть следующим образом.

<h1>Welcome</h1>
<p>blah</p>
<?php include("nav.php"); ?>
<p>more blah</p>
<p>more blah</p>
<p>more blah</p>
<?php
$pageJavascript = "alert('js!');";
$pageTitle = "Cyberdyne Welcome Page";
?>

1

Решение

Опции:

<?php
ob_start();
include($content);
$body = ob_get_contents();
ob_end_clean();
?>
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $body; ?>
</body>
</html>

Pros:

  • Браузер получает полностью визуализированную страницу
  • Более SEO-дружественный (чем обновление названия javascript)
  • JS не требуется

Cons:

  • Нужно буферизовать всю страницу в памяти
<script type="text/javascript">
with(document) {
window.title = <?php echo json_encode($title); ?>;
}
</script>

Pros:

  • Вы сохраняете тот же тип потока, который используете сейчас.

Cons:

  • Не оптимизирован для SEO
  • Требуется использование JavaScript
1

Другие решения

Если есть предположение, заголовок всегда находится в первой строке:
«Заголовок моей страницы»;

$filename = '/pages/home.inc';
$fileLines = file($filename, FILE_SKIP_EMPTY_LINES);
$title = yourFunctionThatStripsKomma($fileLines[0]);

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

1

По вопросам рекламы [email protected]