nowayyy
nowayyy

Reputation: 917

Using better includes for pages?

As of right now, the way I use includes is to bring the header, footer, and some content for other pages.

This leads to more includes then I really want, because I need to add more content for the includes.

For example:

<!DOCTYPE html>
<?php include('header.php'); ?>
<body>

<?php include('body-top.php');
   custom html
</?php include('footer.php');
</body>

It would be nice if I could add variables to the includes and on the pages I want the includes to show.

I am not good at PHP at all, so is there a better way to use Includes?

Upvotes: 1

Views: 97

Answers (4)

middus
middus

Reputation: 9121

This can be easily done:

index.php

$title = 'Hello World!';
include 'content.php';

content.php

<!DOCTYPE html>
<html>
<head> 
<title><?php echo $title; ?></title>
</head>
<body></body>
</html>

The problem with this approach is, you'll soon run into problems keeping track what went where, so using functions as suggested in other answers might be a good idea. However, for small projects it's IMHO good enough.

Upvotes: 1

tacone
tacone

Reputation: 11441

Your includes are already very few, no need to optimize them.

Also don't pay attention to people suggesting Smarty or MVC's because that will increase dramatically the number of includes (in exchange for other benefits, of course)-

Upvotes: 1

Brigand
Brigand

Reputation: 86240

You can turn your included files into functions. PHP has a neat trick where anything between curly-brackets (i.e. { and }) is only executed when that part of the code is reached. This includes the HTML code outside of your PHP tags.

This could be our 'header.php' file, where we wrap our current code in a function.

<?php function doHeader($title) {  ?>
<html>
<head> 
<title><?php echo $title; ?></title>
</head>
<?php  }  ?>

Then we make a tester for it. Whatever our tester/caller chooses to pass as $title shows up in our output.

<?php 
// All included here
include_once('header.php');
?><!DOCTYPE html>
<?php doHeader('My page title'); ?>
<body></body>
</html>

This produces the output,

<!DOCTYPE html>
<html>
<head> 
<title>My page title</title>
</head>
<body></body>
</html>

Upvotes: 0

Jan Vorcak
Jan Vorcak

Reputation: 19999

sounds like a job for Smarty

It looks like this

<?php
require 'Smarty/libs/Smarty.class.php';

$smarty = new Smarty;

$smarty->assign('title','Hello World');
$smarty->assign('hello','Hello World, this is my first Smarty!');
$smarty->display('test.tpl');
?>

test.tpl

<html>
  <head>
    <title>{$title}</title>
  </head>
  <body>
    {$hello}
  </body>
</html>

Or even better way, use some of the PHP MVC frameworks, which will give you even more stuff (not just template system)

Upvotes: 1

Related Questions