Anna_Polyakovich
@Anna_Polyakovich
Начинающий дизайнер, осваиваю html, css, js

Как сделать разный title если header везде одинаковый?

Здравствуйте!
У меня есть папка с файлами сайта. Header и Footer вынесены в отдельные файлы php и шаблонизированы с помощью
<?php
include 'header.php';
?>

Но возникла проблема. Файл Header содержит информацию не только с контактами, но и с микроразметкой json, а также title и скрипт google tag manager, которые должны быть разные на всех страницах.
Вопрос: как мне шаблонизировать только контакты, чтобы title и микроразметка json были разные на всех страницах? Я могу поместить в файл Header только контактную инфомацию?
То есть в итоге получится, что в файле Header будет так:
<link rel="stylesheet" href="css/style-home.css">
<link rel="stylesheet" href="css/home-media.css">
<link rel="stylesheet" type="text/css" href="/slick-1.8.1/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="/slick-1.8.1/slick/slick-theme.css"/>
<link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox-1.3.4.css" media="screen">
<!-- <link rel="icon" href="https://мойсайт.ru/favicon.ico" type="image/x-icon"> -->
</head>
<body>
<div class="wrapper">
    <div class="container">
        <header class="header">
            <div class="container">
                <div class="header__body">
                    <a href="index.php" class="header__logo">
                        <img src="images/logo/logo-invert2.png" alt="#">
                    </a>
                    <div class="social-sm">
                        <a href="#">
                            <img src="images/icons/telegram.png" alt="#">
                        </a>
                        <a href="#">
                            <img src="images/icons/whatsapp.png" alt="#">
                        </a>
                    </div>

                    <div class="social">
                        <a href="#">
                            <img src="images/icons/telegram.png" alt="#">
                        </a>
                        <a href="#">
                            <img src="images/icons/whatsapp.png" alt="#">
                        </a>
                    </div>
                  
                    <div class="header__burger">
                        <span> </span>

                    </div>
                    <nav class="header__menu" >
                        *тут меню и контакты*
                    </nav>
                </div>
            </div>
        </header>


А остальные файлы будут начинатьс так:
<!DOCTYPE html>
<html lang="ru">
<head>
    <!-- Google tag (gtag.js) -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-W84CGY9YFS"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', 'G-W84CGY9YFS');
    </script>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
    <title>Уникальный заголовок</title>
    <!-- <script type="application/ld+json">
        {
            "@context": "http://schema.org/",
            "@type": "BreadcrumbList",
            "itemListElement": [
                {
                    "@type": "ListItem",
                    "position": 1,
                    "name": "Главная",
                    "item": "https://мойсайт.ru/index.html"
                }
            ]
        }
        </script> -->

    <meta name="robots" content="index, follow">
    <meta name="description" content="Наше утп">


Можно ли так делать? Я пока проблем не увидела, проверяла на Open Server. Но все-таки лучше спрошу, дабы избежать неприятных сюрпризов.
Благодарю всех заранее!
  • Вопрос задан
  • 802 просмотра
Решения вопроса 2
@Medvejonok86
Создаете 4 файла: template.php, header.php, content.php, footer.php.
Подключаете в файле template.php остальные 3 файла:

//template.php
<!DOCTYPE html>
<html lang="ru">
<?php
include_once 'header.php';
?>
<body>
<?php
include_once 'content.php';
include_once 'footer.php';
?>
</body>
</html>


Потом в том файле, который будет выводить содержимое страницы, сначала получаете нужные данные (допустим из базы), а далее подключаете файл template.php.

Допустим, для главной страницы будет примерно так:

//index.php
$data = [
   'title' => 'Главная страница',
   'content' => 'Содержимое главной страницы',
];
include_once 'template.php';


Ну и соответственно в файлах шаблона выводите переменные:

//header.php
<head>
<title><?=$data['title']?></title>
</head>


//content.php
<div>
<p><?=$data['content']?></p>
</div>


//footer.php
<footer>
<p>Подвал сайта</p>
</footer>
Ответ написан
nefone
@nefone
Junior PHP разработчик
PHP позволяет решить эту задачу множеством способов, использовать готовый шаблонизатор, например Twig.

Или реализовать свой с использованием функций ob_start() и ob-get-clean(): создаете файлы index.php и functions.php, каталог templates в котором будут храниться все файлы шаблонов. В каталоге templates создаете файлы: layout.php, header.php, footer.php, content.php.

Файл functions.php:
/**
 * Функция загрузки шаблона
 * 
 * @param string $template Путь до файлов шаблона
 * @param mixed[] $data Данные для подстановки в шаблон
 * @return string Возвращает готовый код шаблона
 */
 function render_template($template, $data = []) {
     ob_start();
     if (file_exists($template)) {
         extract($data);
         require($template);
     } else {
         print('Нет файла шаблона: '.$template);
     }
     $html = ob_get_clean();
     return $html;
 }

Файл index.php:
require_once __DIR__ .  '/functions.php';

$header = render_template('templates/header.php', ['title' => 'Главная страница']);
$footer= render_template('templates/footer.php');
$content = render_template('templates/content.php');
$page_layout = render_template('templates/layout.php',  
                               ['header' => $header, 'footer' => $footer,  'content' => $content]);
print($page_layout);

Файл templates/header.php:
<head>
<title><?=$title?></title>
</head>

Файл templates/layout.php (в котором вместо <?=$header?> будет выводиться содержимое из файла templates/header.php и т.д.):
<!DOCTYPE html>
<html lang="ru">
<?=$header?>
<body>
<?=$content?>
<?=$footer?>
</body>
</html>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы