tags:

views:

135

answers:

3

The problem is that when the content loads it displays before the tag before i added the <!DOCTYPE>, <html> <head></head> in the index.php file NOW $content loads before the Body tag... when it should beloaded in the "contents" div.

(1 I'm trying to get file_get_contents to load the links ?=about ?=services etc into to body.tpl in the contents div i have specified with #CONTENTS#

(2 The Dir Tree is as follows

 htdocs>
    classes> file.class.php
    contents> where i want #CONTENTS# (file_get_contents) to grab data from
    images> content (changing images)
    templates> where the templates are hosted
            clean>main template (Files are header.tpl, body.tpl, footer.tpl, styles.css, menu_style.css, and the images folder for images relating to the template itself.)
            other templates>(to come)

/* file.class.php */

<?php

$file = new file();

class file{
    var $path = "templates/clean";
    var $ext = "tpl";

    function loadfile($filename){
  return file_get_contents($this->path . "/" . $filename . "." . $this->ext);
 }

 function setcontent($content,$newcontent,$vartoreplace='#CONTENT#'){
  $val = str_replace($vartoreplace,$newcontent,$content);
  return $val;
 }

 function p($content) {
  $v = $content;
  $v = str_replace('#CONTENT#','',$v);
  print $v;
 }
}
if(!isset($_GET['page'])){
    ob_start();
    // if not, lets load our index page(you can change home.php to whatever you want:
    include("main.txt");
    // else $_GET['page'] was set so lets do stuff:
    } else {
    // lets first check if the file exists:
    if(file_exists($_GET['page'].'.txt')){
    // and lets include that then:
    include($_GET['page'].'.txt');
    $content = ob_get_contents();
    ob_end_clean();

    // sorry mate, could not find it:
    } else {
        echo 'Sorry, could not find <strong>' . $_GET['page'] .'.txt</strong>';
    }
}
?>

if some one could trim that down so it JUST is the template required code and file get contents.

/* index.php */

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<meta name="robots" content="index,follow"/>
<meta name="distribution" content="global"/>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<link href="templates/clean/style.css" rel="stylesheet" type="text/css" media="screen" />
<link rel="stylesheet" href="templates/clean/menu_style.css" type="text/css" />
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"&gt;&lt;/script&gt;
</head>
<body> //everything before this USED to be in header.tpl but i moved it here until fix so that w3c validator would validate my code
<?php
    include('classes/file.class.php');

    // load the templates
    $header = $file->loadfile('header');
    $body = $file->loadfile('body');
    $footer = $file->loadfile('footer');

    // fill body.tpl #CONTENT# slot with $content
    $body = $file->setcontent($body, $content);

    // cleanup and output the full page
    $file->p($header . $body . $footer);

?>

/* header.tpl */

 <div id="header">
  <div id="logo"><a href="index.php" style="height:30px;width:150px;"><img src="images/logo.png" border="0" alt=""/></a></div>
   <div id="menuo"> 
    <div class="menu">
     <ul id="menu">
      <li><a href="?page=home">Home</a></li>
      <li><a href="?page=about">About Us</a></li>
      <li><a href="?page=services">Services</a>
       <ul>
        <li><a href="?page=instore">InStore Repairs</a></li>
        <li><a href="?page=inhome">InHome Repairs</a></li>
        <li><a href="?page=website">Website Design</a></li>
        <li><a href="?page=soon">Comming Soon.</a></li>
         </ul>
       </li>
      <li><a href="?page=products">Products</a>
                   <ul>
                   <li><a href="?page=pchard">Computer Hardware</a></li>
                   <li><a href="?page=monitor">Monitor's</a></li>
                   <li><a href="?page=laptop">Laptop + Netbooks</a></li>
                   <li><a href="?page=soon">Comming Soon.</a></li>
                   </ul>
             </li>
      <li><a href="?page=contact">Contact</a></li>
     </ul>
    </div>
   </div>
 </div>
 <div id="headerf">
 </div>

/* body.tpl */

   <div id="bodys">
    <div id="bodt"></div>
        <div id="bodm">
            <div id="contents">
                #CONTENT#
                </div>
    <div id="bodb"></div>
        </div>
</div>

/* footer.tpl */

<div id="footer">
<div style="position:absolute; top:4px; left:4px;"><img src="images/ff.png" alt="ok"></div> <div style="position:absolute; top:4px; right:5px; color:#FFFFFF;">&copy;2010 <a href="mailto:">Company Name</a></div>
</div>
</body>
</html>

My Firefox Showing The Problem In Action

A: 

Edited answer: I'd originally assumed that the p() method was an accidental method you were calling, but that appears (according to the update you made to fix the fact that both pages were the same) to be a red herring. The issue is similar maybe though.

When you: include('classes/file.class.php'); as part of your index.php, one of the things it does is define the methods and then run a few if statements, as part of this change it includes a .txt file. (e.g. include("main.txt");).

My guess is what you are seeing is the contents of this include file being displayed to screen. What's the point of them being included? Can you just remove them? Should you really just be reading the content to a variable instead of including it (and effectively echo'ing/printing it to screen)?

Try removing them and seeing if that solves your issue - but otherwise, check to make sure your template files contain what you think they contain. :)

Amadiere
how do you suggested i go about implementing it properly and i fixed the index.php file as stated in above post
s32ialx
Updated answer. I think you may have different functions outputting content, which is your problem :)
Amadiere
A: 

I'm a little confused, as your index.php code is the same as your file.class.php code (is that a mistake?). But if I had to guess your problem might be in the print line of the $file->p() function:

function p($content) {
  $v = $content;
  $v = str_replace('#CONTENT#','',$v);
  print $v;
 }

This function is fine, depending on when you call it. If you haven't output anything to the screen yet, and you call p() and pass it the contents of body.tpl, it could result in the incorrect HTML output you're getting.

Eric
sorry i'll update the correct index file now
s32ialx
A: 

get firebug and check the styles applied to the content div and the text. it seems like a position problem.

pixeltocode