2010-06-29 16 views
1

我只是想知道在PHP web項目中將邏輯組件與佈局分開的最​​佳方式是什麼?在PHP中正確分離邏輯/風格

內容存儲在MySQL中,邏輯是PHP,模板是HTML/CSS當然。 我的問題是,如何最好地解決這個問題(不使用CMS)。

格爾茨,poeschlorn

+1

*(tipp)*環顧四周,尋找** MVC **。 – Gordon 2010-06-29 12:55:00

回答

2

使用一個Template Engine,例如Smarty

另外,只要使用HTML與嵌入式PHP的模板,只是要小心,不要把太多的邏輯放入模板。

1

只需使用一些模板引擎。
最熟悉的是PHP本身。

這裏是CRUD應用程序的非常簡單的例子:
邏輯部分只做數據操作

<? 
mysql_connect(); 
mysql_select_db("new"); 
$table = "test"; 
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part: 
    $name = mysql_real_escape_string($_POST['name']); 
    if ($id = intval($_POST['id'])) { 
    $query="UPDATE $table SET name='$name' WHERE id=$id"; 
    } else { 
    $query="INSERT INTO $table SET name='$name'"; 
    } 
    mysql_query($query) or trigger_error(mysql_error()." in ".$query); 
    header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); 
    exit; 
} 
if (!isset($_GET['id'])) { //listing part: 
    $LIST=array(); 
    $query="SELECT * FROM $table"; 
    $res=mysql_query($query); 
    while($row=mysql_fetch_assoc($res)) $LIST[]=$row; 
    include 'list.php'; 
} else { // form displaying part: 
    if ($id=intval($_GET['id'])) { 
    $query="SELECT * FROM $table WHERE id=$id"; 
    $res=mysql_query($query); 
    $row=mysql_fetch_assoc($res); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
    } else { 
    $row['name']=''; 
    $row['id']=0; 
    } 
    include 'form.php'; 
} 
?> 

,並負責輸出兩個簡單的模板,
form.php的

<? include TPL_TOP ?> 
<form method="POST"> 
<input type="text" name="name" value="<?=$row['name']?>"><br> 
<input type="hidden" name="id" value="<?=$row['id']?>"> 
<input type="submit"><br> 
<a href="?">Return to the list</a> 
</form> 
<? include TPL_BOTTOM ?> 

和list.php

<? include TPL_TOP ?> 
<a href="?id=0">Add item</a> 
<? foreach ($LIST as $row): ?> 
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a> 
<? endforeach ?> 
<? include TPL_BOTTOM ?> 

雖然有很多其他模板引擎,不同類型和意識形態。

+0

作爲一個旁觀者,PHP代碼是否只能存在於正在提供的頁面中,還是可以被分離出來,像支持類庫一樣? – 2010-06-29 13:02:01

+0

@jdk PHP可以包含()或require()其他文件,例如函數或類的庫 – 2010-06-29 13:21:31