$ _GET загрузка содержимого перед тегом head вместо указанного div - PullRequest
0 голосов
/ 31 марта 2010

Проблема в том, что при загрузке контента он отображается перед тегом, прежде чем я добавил <!DOCTYPE>, <html> <head></head> в файл index.php. ТЕПЕРЬ $ контент загружается перед тегом Body ... когда он должен быть загружен в div "contents" .

(1 Я пытаюсь получить file_get_contents для загрузки ссылок? = About? = Services и т. Д. В body.tpl в содержимом div, который я указал с # CONTENTS #

(2 Дерево Дир выглядит следующим образом

 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>';
    }
}
?>

если кто-то может урезать это так, ТОЛЬКО это шаблон требуемого кода, и файл получает содержимое.

/ * index.php * /

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">
<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"></script>
</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>

Мой Firefox показывает проблему в действии

Ответы [ 3 ]

0 голосов
/ 31 марта 2010

Я немного сбит с толку, так как ваш код index.php совпадает с вашим кодом file.class.php (это ошибка?).Но если бы мне пришлось угадать, ваша проблема может быть в строке печати функции $ file-> p ():

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

Эта функция хороша, в зависимости от того, когда вы ее вызываете.Если вы еще ничего не выводили на экран, и вы вызываете p () и передаёте ему содержимое body.tpl, это может привести к неверному выводу HTML, который вы получаете.

0 голосов
/ 31 марта 2010

get firebug и проверьте стили, примененные к содержимому div и тексту. похоже на position проблему.

0 голосов
/ 31 марта 2010

Отредактированный ответ: Первоначально я предполагал, что метод p() был случайным методом, который вы вызывали, но он выглядит (согласно обновлению, которое вы сделали, чтобы исправить тот факт, что обе страницы были одинаковыми), как красная сельдь. Возможно, проблема похожа.

Когда вы: include('classes/file.class.php'); как часть вашего index.php, он выполняет определение методов, а затем запускает несколько операторов if, в рамках этого изменения он включает в себя файл .txt. (например, include("main.txt");).

Мне кажется, вы видите, что содержимое этого включаемого файла отображается на экране. Какой смысл их включать? Вы можете просто удалить их? Вы действительно должны просто читать содержимое в переменную вместо того, чтобы включать его (и эффективно выводить / выводить на экран)?

Попробуйте удалить их и посмотреть, решит ли это вашу проблему, но в противном случае убедитесь, что файлы вашего шаблона содержат то, что, по вашему мнению, они содержат. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...