Какой метод я должен использовать для последующей установки переменной, а затем повторить заголовок страницы

Я пытаюсь избежать запроса моей базы данных дважды: для набора <title> атрибут, а также для отображения заголовка страницы. Я хочу сделать запрос только один раз:

Пример:

<html>
  <head>
  <?php
    // how should I use here ob_start() ? Is there any other possible way to achieve this?
    $title = "";
    echo '<title>', $title, '</title>'; // this should be in the end <title>value of $row['page_title']</title>
  ?>
  </head>
  <body>
     <?php
       $sql = $mysqli->query("MY QUERY");
       $row = $sql->fetch_assoc();
       $title = $row['page_title']; // I want that this assignment to set the variable in the top
       // I know that for this job I can use ob_start() but I didn't used it until now
       // and I will really appreciate any help from you.

     ?>
     <h1><?php echo $title; ?></h1>
  </body>
</html>

Я знаю, что могу сделать запрос, прежде чем эхо title атрибут, но я не хочу делать это так. Есть ли у вас предложения? или вы можете показать мне, как использовать это ob_start() / ob_clean() функции?

Спасибо!

2 ответа

Решение

Переместите запрос в начало кода и используйте переменные повторно!

<?php
       $sql = $mysqli->query("MY QUERY");
       $row = $sql->fetch_assoc();
       $title = $row['page_title']; 
?>
<html>
  <head>
  <?php echo '<title>', $title, '</title>'; ?>
  </head>
  <body>
     <h1><?php echo $title; ?></h1>
  </body>
</html>

ob_start(); в обычном смысле не поможет вам. Тем не менее, вы можете использовать некрасивое решение, как это:

ob_start();
echo '
  <html>
    <head>
      <title>{title}</title>
    </head>
  <body>
    ';
$header = ob_get_clean();

// and then, when you know your title
echo str_replace('{title}', $known_title, $header);

Но я настоятельно рекомендую использовать другой подход. Вам нужно выбрать и заполнить шаблон после того, как все данные были собраны, и вы знаете все детали о том, какой шаблон вы хотите. Если вы начнете эхом отдавать разные части, у вас будет все больше проблем. Теперь вам нужно изменить заголовок для некоторых страниц. Затем вам нужно будет добавить файл CSS для конкретной страницы, и вам придется снова заняться этим уродливым делом. Почему бы не сделать это правильно?

Другие вопросы по тегам