tinwakr Posted January 3, 2012 Share Posted January 3, 2012 Hi Everyone, I just joined today and I am hoping to make some friends as well as obtain a lot of help as needed I am starting to design a site for a friend and I am hoping to do it with pages that utilize a Page class with an instance of the class(object) on each page and then modify the necessary methods/properties as needed on each page by extending the Page class. My first question is this: If I do this, will search engines, namely Google, be able to scrape the pages and retrieve the necessary information to add the pages or must I put all the markup in each page? If I do the latter, I am creating something that will be a nightmare to update/modify as all the pages are similar if not identical except for the "main content". Thanks in advance for any and all directions/suggestions. Chuck Quote Link to comment Share on other sites More sharing options...
scootstah Posted January 3, 2012 Share Posted January 3, 2012 You want some kind of template system. You define your static pages (like your header and footer) and then include that pages template. Something like: function load_template($template, $data=array()) { // does the template exist and is readable? if (is_readable($template)) { // turn data array into variables extact($data); // fetch the template require $template; } } Then your templates directory may look like: templates/ header.php footer.php somepage.php Your header and footer files are basically the entire layout minus that specific page's content. somepage.php would look like: <?php require 'header.php'; ?> Content goes here. We can use variables that we passed in earlier. <?php echo $foo; ?> <?php require 'footer.php'; ?> And usage: load_template('somepage.php', array('foo' => 'bar')); Quote Link to comment Share on other sites More sharing options...
tinwakr Posted January 3, 2012 Author Share Posted January 3, 2012 Thanks for the quick reply scootstah! The way you suggest doing this, I have done it that way before, I just thought I would do it the OOP way. Including header and footer, etc., still doesn't contain the markup on each individual page so really, what would be the difference? I guess what I am trying to ask is this: Does a search engine look at a page as it is rendered by the browser no matter if the markup is contained in the page or generated by the way I am suggesting? Thanks again, Chuck Quote Link to comment Share on other sites More sharing options...
scootstah Posted January 3, 2012 Share Posted January 3, 2012 You can use that function in OOP. Just because you use OOP doesn't mean you can't use procedural functions as well. If you want the template system to be more advanced feel free to implement an OOP solution. In the end your markup is sent to the browser one way or another, and this is what Google will see. It doesn't matter if you write the entire layout on every page or section it off like this. The advantage to doing it the way I suggested is that you don't duplicate code. If you have your entire layout on every single page, and then decide you want to change one little thing in the layout you have to edit every page. If you use my suggestion, you simply edit the header.php and you're done. Quote Link to comment Share on other sites More sharing options...
tinwakr Posted January 3, 2012 Author Share Posted January 3, 2012 Thanks scootstah you've been a great help. I see you are a regular contributor here, keep up the good work!!! Chuck Quote Link to comment Share on other sites More sharing options...
scootstah Posted January 3, 2012 Share Posted January 3, 2012 By the way, if you want to do something similar to what I suggested, bear in mind that you can also pass variables to the header and footer...so you can dynamically slip in meta keywords and stuff. load_template('somepage.php', array('keywords' => 'keyword, keyword2, keyword3')); in header.php: <meta name="keywords" content="<?php echo $keywords; ?>" /> Quote Link to comment Share on other sites More sharing options...
ignace Posted January 3, 2012 Share Posted January 3, 2012 scootstah's way in OOP would be something like: class Template { private $engine; // Smarty, Twig, PHPTAL, .. private $title; private $stylesheets; private $scripts; private $headers; private $variables; public function render($script, $variables = array()) { print $this->engine->render($script, $this->_mergeAndReturnVariables($variables)); } } In the $script you would like to render you write: <?php $this->render('header'); ?> Content goes here. We can use variables that we passed in earlier. <?php echo $foo; ?> <?php $this->render('footer'); ?> Take this a step further and implement a Two-Step View. The idea is that you have one file that defines your header and footer and puts a placeholder for the content ("Content goes here. We can use variables that we passed in earlier. <?php echo $foo; ?>") The view is rendered in two-step view: 1) the content 2) the template (header + footer). Basically the inverse of the above. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.