Тайтл в движке на файлах в PHP

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

Поэтому помимо вставки контента, нашему движку нужно указать место для вставки тайтла. Придумаем соответствующую команду для этого:

<!DOCTYPE html> <html> <head> <title>{{ title }}</title> </head> <body> <header> header </header> <main> {{ content }} </main> <header> footer </header> </body> </html>

Давайте теперь рассмотрим варианты, как можно хранить и получать тайтлы страниц.

Тайтлы в массиве

Сделаем теперь файл, в котором в виде массива будем хранить урлы страниц и соответствующие им тайтлы:

<?php return [ '/page1' => 'page 1 title', '/dir/page2' => 'page 2 title', '/dir/sub/page3' => 'page 3 title', ]; ?>

На странице index.php получим массив тайтлов в переменную:

<?php $titles = require 'titles.php'; ?>

Получим тайтл запрошенной страницы:

<?php $title = $titles[$url]; ?>

Заменим в файле шаблона соответствующую команду на наш тайтл:

<?php $layout = str_replace('{{ title }}', $title, $layout); ?>

Реализуйте в вашем движке тайтлы, хранящиеся в массиве.

Тайтлы в контенте

Гораздо удобнее хранить тайтл странице в том же месте, где ее контент. Для этого в файле контента можно придумать какую-нибудь команду, задающую файл этой страницы.

Например, можно сделать вот так:

{{ title: "page 1 title" }} <div> content 1 </div>

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

Для начала получим тайтл из текста контента:

<?php preg_match('#{{ title: "(.+?)" }}#', $content, $match); $title = match[1]; ?>

А теперь в тексте контента удалим не нужную больше команду, чтобы она не попала в текст страницы:

<?php $content = preg_replace('#{{ title: "(.+?)" }}#', '', $content); ?>

Реализуйте в вашем движке тайтлы, хранящиеся в контенте страницы.