Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load php files into layout template?

Tags:

php

I'm working on my first php site, I'm running into an issue I can't see to figure out. I'm trying to have one php page that contains my structure, and others that inject their html inside, while retaining url changes so I can still direct link pages.

So far this is what I'm doing, but it doesn't seem efficient:

index.php

<html xmlns="http://www.w3.org/1999/xhtml">
    <?php include("head.php"); ?>

    <body>
        <div class="container">
            <!-- Navigation header -->
            <?php include("navigation.php"); ?>

            <!-- Main container -->
            <div id="MainContainer">
                <?php include("home.php"); ?>
            </div>

            <!-- Footer -->
            <?php include("footer.php"); ?>
        </div>
    </body>
</html>

about.php

<html xmlns="http://www.w3.org/1999/xhtml">
    <?php include("head.php"); ?>

    <body>
        <div class="container">
            <!-- Navigation header -->
            <?php include("navigation.php"); ?>

            <!-- Main container -->
            <div id="MainContainer">
                About me!
            </div>

            <!-- Footer -->
            <?php include("footer.php");  ?>
        </div>
    </body>
</html>

This feels totally wrong, if I ever want to change my container class, or change the structure, I now have to do it in two places instead of one.

In ASP.net MVC I would have a Layout_Head.cshtml file that would contain my HTML structure and inside I can render views from different pages, the url changes but the layout is always rendered first and then the controller/actions take care of injecting the html of the needed views.

How do I replicate that in PHP?

like image 342
LanFeusT Avatar asked Feb 16 '14 01:02

LanFeusT


1 Answers

Usually people use php includes for templating more like this:

header.php

<html>
  <head>
    <title></title>
  </head>
  <body>
    <div class="container">

footer.php

    </div> <!-- .container -->
  </body>
</html>

about.php

<?php include('header.php'); ?>
  ... content goes here ...
<?php include('footer.php'); ?>

This is so you don't need to continuously repeat the start/end tags on every template you make.

like image 106
Christian Avatar answered Sep 25 '22 22:09

Christian