Jump to content

Page Output and Templates


Recommended Posts

Hi,

 

I'm writing a CMS, using a MVC pattern. I initially wrote the styling quickly, basically it takes a html file with some replaceable tags.

 

Since then I've had a discussion about Wordpress and how that calls functions for the parts so that the page can process the information.

 

This got me wondering if there are any standard approaches to the page output, templating, etc?

 

 

Cheers

Link to comment
Share on other sites

Other options would be to integrate smarty or twig or at least look them over how they do it.

 

If you are using php as your template engine you can include all through the index page and all styling would be there as your template.

To clarify only your index page has the dividers with id's and class names, then include php scripts into those areas as needed.

You could include header,navigation,content,footer,sidebar or optional not something just as easily.

To expand upon that if wanted multiple themes to select from you could include specific ones.

 

I've made a few cms using this approach and works out well.

Creating a controller to include specific scripts depending on the navigation

 

A simple example of the index page

<?php
//define
$server_host    = "http://" . $_SERVER['HTTP_HOST'];
$document_root  = $_SERVER['DOCUMENT_ROOT'];
$directory_path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$site_url       = filter_var("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'], FILTER_SANITIZE_STRING);
if (!empty($_SERVER['QUERY_STRING'])) {
    $query_string = filter_var($_SERVER['QUERY_STRING'], FILTER_SANITIZE_STRING);
    $site_url .= "?" . $query_string;
}

require_once($directory_path . "/db-connect.php");
require_once($directory_path . "/includes/session.php");

?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width; initial-scale=1.0">

<title>Title</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<link href="style.css" rel="stylesheet" type="text/css">
<link href="media-queries.css" rel="stylesheet" type="text/css">

<!-- html5.js for IE less than 9 -->
<!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

<!-- css3-mediaqueries.js for IE less than 9 -->
<!--[if lt IE 9]>
    <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

</head>

<body>

<div id="background">
    <img src="images/image.jpg" class="stretch" alt="background" />
</div>

<div id="pagewrap">

    <header id="header">

        <hgroup>
<?php
require_once($directory_path . "/header.php");
?>
       </hgroup>

        <nav>
<?php
require_once($directory_path . "/nav.php");
?>
       </nav>

<?php
require_once($directory_path . "/search.php");
?>

    </header>
   
    <div id="content">

<?php
require_once($directory_path . "/content_controller.php");
?>

    </div>
   
   
    <aside id="sidebar">

<?php
require_once($directory_path . "/sidebar.php");
?>
                      
    </aside>

    <footer id="footer">
   
<?php
require_once($directory_path . "/footer.php");
?>

    </footer>
   
</div>

</body>
</html>

content_controller.php would determine which content to include depending on navigation/parameters in the url

<?php
if(!session_id()){
header("Location: http://".$_SERVER['HTTP_HOST']);
exit;
}
/*
actions and page controller
parameter and page inclusion protection
*/

//only allow these GET paramters to pass in code
$allowed_get = array(
    "action",
    "user",
    "id",
    "page"
);

//loop get requests and remove any unwanted ones
if (isset($_GET)) {
    foreach ($_GET as $key => $value) {
        if (!in_array($key, $allowed_get)) {
            unset($_GET[$key]);
        }
    }
}

//default page displayed if all else fails
$page = "home.php";

/*
loop through action array to determine destination
$action_array located in actions.php, if action value is not in the array it won't load
*/

if (isset($_REQUEST['action'])) {
    if (in_array($_REQUEST['action'], $action_array)) {
        
        switch ($_REQUEST['action']) {
            case "home":
                //$page = "home.php";
                header("Location: ".$server_host);
                exit;
                break;
            case "services":
                $page = "articles.php";
                break;
            case "articles":
                $page = "articles.php";
                break;
            case "help":
                $page = "articles.php";
                break;
	    case "help_post":
                $page = "help_post.php";
                break;
            case "register":
                $page = "register.php";
                break;
            case "account":
                $page = "account.php";
                break;
            case "support":
                $page = "support.php";
                break;
            case "users":
                $page = "users.php";
                break;			
            default:
                //$page = "home.php";
                header("Location: ".$server_host);
                exit;
        }
        
        
    }
}

//include the page only if it exists
$script = dirname(__FILE__) . DIRECTORY_SEPARATOR . $page;
if (file_exists($script)) {
    require_once($script);
} else {
    header("Location: ".$server_host);
    exit;
}
?>
Link to comment
Share on other sites

Thankyou for your reply, I see where you're coming from, however you're not pulling the content from the Model, just including different prepared parts of the page.

 

This is how far my notes / thinking extended:

 

 

PAGE PRESENTATION
=========================================================

METHOD 1

    - Read in a file of HTML, string replace some tags, echo out.
    
METHOD 2

    - Finally include a HTML / PHP file which dumps HTML and uses PHP functions to retrieve
        data from the Model.

*** In all cases here, the Model decides which page template to use. Also Model functions
    will be used to include other files, e.g. header, footer, etc.

* NB the Model is a singleton class with function wrappers

 

 

lol, don't slate the markup, this was my quick demo setup (but I LOVE TABLES!!!)

 

Here's the old demo (string replace method):

 

<html>
<head>
[INCLUDES]
</head>
<body>
<table class="tBasic">
<tr><td colspan="2">[HEAD]</td></tr>
<tr><td>[MENU]</td><td>[LOGIN]</td></tr>
<tr><td colspan="2">[BODY_HEAD]</td></tr>
<tr><td colspan="2">[BODY]</td></tr>
<tr><td colspan="2">[FOOT]</td></tr>
<tr><td colspan="2">[LOG]</td></tr>
</table>
</body>
</html>

 

And here's today's revision (page accesses the Model):

 

<html>
<head>
<?php echo nub_block('INCLUDES'); ?>
</head>
<body>
<table class="tBasic">
<tr><td colspan="2"><?php echo nub_block('HEAD'); ?></td></tr>
<tr><td><?php echo nub_block('MENU'); ?></td><td><?php echo nub_block('LOGIN'); ?></td></tr>
<tr><td colspan="2"><?php echo nub_block('BODY_HEAD'); ?></td></tr>
<tr><td colspan="2"><?php echo nub_block('BODY'); ?></td></tr>
<tr><td colspan="2"><?php echo nub_block('FOOT'); ?></td></tr>
<tr><td colspan="2"><?php echo nub_block('LOG'); ?></td></tr>
</table>
</body>
</html>

 

This will still change though, e.g. the use of echo will soon not be required and some blocks will get passed an array (of posts, menu items, etc)

 

 

 

Oh, I looked at Smarty and Twig last night. They are a step beyond what I'm after, I don't want to introduce another syntax to learn, I want to keep it simply HTML / CSS and a touch of PHP.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.