Stalling code until something else has been done

I know the title of the post is a bit vague, but I did not know how to best phrase this.

I want the title of a page, which is in something like “header.php” to be determined by something that comes later in the code, like something in “content.php”. In particular, I am trying to make the title of a page dynamically generated, through something like:

<title><?php echo $title ?></title>

But this yields an undefined variable if I assign something to title AFTER this line of code on a page. I’d appreciate any solutions or best practices to use when handling with this issue.

There’s simply no way for you to do it.

The proper method, is to process all the values before the HTML.

It’s called separation of logic and view.

I’m guessing you have something like

<html>
    <head><title><?=$title?></title></head>
    <body><?php include 'content.php' ?></body>
</html>

In which case there’s not really an easy solution, except to rewrite the logic so it’s processed (and hold the data in a variable) before the <html>. Then within content.php, you would simply output the processed variable instead of doing the logic there. This is the essence of a template system.

Alternatively you could use output buffering. Very rough example:

view.php


<?php
$title = 'This is the HTML title!';
echo 'Hello world!';

template.php


<html>
<head>
  <title><?php echo $title; ?></title>
</head>

<body>
  <?php echo $content; ?>
</body>

index.php


<?php
ob_start();
include('view.php');
$content = ob_get_clean();
include('template.php');

Basically this will first execute the file view.php (which sets $title) and store the result in $content. The variable $content can then be used in the template.php.

Again, the example is very rough but I hope you get the idea. If not I’d be happy to elaborate :slight_smile:

I think that’s enough for me to go on for now. I will come back here if I need more help. Thanks. :smiley: