-2

データベースに2回クエリを実行することを避けようとしています<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()関数の使用方法を教えてもらえますか?

ありがとうございました!

4

2 に答える 2

1

クエリをコードの先頭に移動し、変数を再利用します。

<?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>
于 2012-12-05T13:29:34.407 に答える
0

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ファイルを追加する必要があり、その醜いビジネスをもう一度行う必要があります。正しい方法でやってみませんか?

于 2012-12-05T14:13:50.027 に答える