#php #html #.htaccess #if-statement
Вопрос:
Я использую один файл заголовка для каждой страницы, на которой будет отображаться заголовок HTML(который включает мета-теги и другие ссылки CSS).
Здесь я использовал все так динамично, как мне нравится, в случае канонических тегов, которые я использовал $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_HOST']
, и все другие ссылки на CSS также доступны, даже если это может быть любой файл из любого каталога.
Теперь я хочу создать одноразовый мета-тег заголовка и теги описания, подобные этому, будут выглядеть как мой основной файл
<!DOCTYPE html>
<html lang="en">
<head>
<title><?php echo $page_title; ?></title>
<meta name="description" content="<?php echo $page_content; ?>" />
//Other meta tags amp; linking to css amp; js files
</head>
<body>
// Content ........
</body>
</html>
Теперь вот в чем загвоздка: многие люди скажут, что просто используйте
$page_title = "Here is the title of the specific page";
$page_content = "Here goes the long-form description describing the page of specific page";
Да, это сработало бы, если бы страницы были разными и имели одно и то же место для размещения всего этого, прежде чем включать файл заголовка.
Но моя страница индекса выглядит так, позвольте мне тоже это объяснить. (Используя Bulma в качестве основы)
<?php
require 'include/db_connect.php';
require 'include/header.php';
?>
<form name="submitform" method="POST">
<div class="columns is-multiline" id="wrapper">
<div class="column is-6-desktop is-12-tablet" id="main_content">
<div class="box">
<?php
if($country)
{
?>
<?php require 'inc/country.php'; ?>
<?php
}
else if($country amp;amp; $state)
{
?>
<?php require 'inc/country_state.php' ?>
<?php
}
else if($country amp;amp; $state amp;amp; $district)
{
?>
<?php require 'inc/country_state_district.php'; ?>
<?php
}
else
{
?>
<?php require 'inc/other_than.php'; ?>
<?php
}
?>
</div>
</div>
</div>
</form>
<?php require 'footer.php'; ?>
</body>
</html>
Главное здесь в том, что я использую раскрывающуюся кнопку, которая автоматически отправляется с помощью js, что здесь не имеет значения, но сверху я только что объяснил, какова структура моего кода.
Теперь, как вы можете видеть, структура if-else включает в себя другие файлы, которые создают динамические страницы, но их код начинается только с тела, а не непосредственно с головы, поэтому я не могу добавить эти теги заголовков и описания.
Теперь, как добавить теги заголовка и описания уникально на каждую из этих страниц.
Любые решения, пожалуйста… заранее спасибо
Комментарии:
1. поместите vars раньше
require 'include/header.php';
или используйте лучшую структуру , такую как mvc2. У меня нет четкого представления о MVC, и теперь я почти закончил с этим проектом, кроме этого.
3. тогда попробуйте другое предложение
4. Я думаю, что вы загоняете себя в угол, потому что у вас нет четкого разделения логики и содержания. В этом часть красоты MVC. Но даже без MVC старайтесь выполнять ВСЮ свою логику, прежде чем выводить что-либо одно. Другими словами, что делать, если ваш индексный скрипт собирает все необходимые ресурсы (html-шаблон, заголовок, html-страница, html-нижний колонтитул), а затем в самом конце отображает их? Вы окажетесь вне того угла, в который сами себя загнали, потому что не имеет значения, когда вы получите информацию, главное, чтобы в конце вы собрали ее в правильном порядке.
Ответ №1:
Как уже было написано в комментариях. Вы должны определить переменные перед require 'include/header.php';
или использовать структуру MVC.
Если вы все еще хотите придерживаться существующего кода ob_get_contents()
, это может вам помочь.
Используйте ob_start();
в начале, чтобы сказать PHP, чтобы он не печатал никаких выходных данных, а вместо этого записывал выходные данные в буфер.
Затем вы можете позже использовать ob_get_contents();
для извлечения выходного буфера и его печати.
Затем вам нужно выполнить поиск в выходном буфере идентификатора, такого как %page_title%, и заменить его фактическим значением перед отправкой вывода.
Это может выглядеть следующим образом:
echo str_replace(%page_title%, $page_title, ob_get_contents());
Тем не менее я бы предпочел предложить реструктуризировать ваш код, так как решение с выходным буфером работает медленнее, использует больше памяти и плохо отлаживается.
Комментарии:
1. Спасибо за дополнительные знания, которые я принял во внимание, и я уже решил проблему с помощью функций, так что никаких проблем, это также хороший ресурс для меня и других программистов спасибо