2014-09-27 21 views
1

我已經從「PHP和mySQL新手到忍者」一書中做了一個測試數據庫......現在我正在測試通過使用模板輸出html來使結構更好。這是模板...用asterixes記錄部分。這是根據傳遞給它的頁面應該改變的動態內容。如何在模板中有效地加載頁面

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<link href= "/project/includes/style.css" rel="stylesheet" type="text/css"> 
<meta charset="utf-8"> 
<title>Joke Database Project</title> 
</head> 
<body> 
<div id="topheader"> 
<p>Joke Database Project</p> 
</div> 
<div id="navigation"> 
    <?php include $_SERVER['DOCUMENT_ROOT'] .'/project/includes/navbar.html.php'; ?> 
</div> 
<div id="container"> 

**<?php include '/'.$content;?>** 


</div> 

</body> 
</html> 

,當我在我的PHP腳本使用下面的代碼,它工作正常:

$content="authors.html.php"; 
include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php'; 

但是我想使它不那麼笨重,所以我決定創建我helpers.inc以下功能。這包括在主PHP腳本php文件:

function showpage($content) 
{ 
    include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php'; 
} 

所以,我只是想用SHOWPAGE(「author.html.php」)顯示在日的內容e模板。我遇到的問題是當我使用這個函數時,它不再識別主腳本中的變量。

如何以優雅的方式解決這個問題?

+0

你有沒有使用類似刀片的模板引擎?你的應用程序太過於矯枉過正了嗎? – 2014-09-27 18:09:43

回答

0

你對範圍的問題:當u要從出來的函數調用變量u應使用此代碼:

var $myvar ; 

function myfunct() { 
    $GLOBALS['myvar'] 
} 
0

要包括在該函數的範圍模板因而超出了變量是不無障礙。你可以創建一個類,將舉行SHOWPAGE()函數,並用魔術方法__set__get分配變量給它:

class Controller { 
    private $data = array(); 

    public function __set($name, $value) 
    { 
     $this->data[$name] = $value; 
    } 

    public function __get($name) 
    { 
     if (array_key_exists($name, $this->data)) 
     { 
      return $this->data[$name]; 
     } 

     //else handle errors 
    } 

    public function showpage($path) 
    { 
     include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/' . $path; 
    } 

} 

$ctrl = new Controller(); 
$ctrl->var1 = $var1; 
$ctrl->var2 = $var2; 
$ctrl->showpage("path/to/page"); 

然後你可以使用$這個 - > varName的在模板中。

你應該在php中閱讀約MVC

相關問題