正确分离PHP中的逻辑/样式

时间:2010-06-29 12:47:02

标签: php templates layout

我只是想知道在PHP Web项目中将逻辑组件与布局分开的最​​佳方法是什么?

内容存储在MySQL中,逻辑是PHP,模板当然是HTML / CSS。 我的问题是,如何最好地解决这个问题(不使用CMS)。

greetz,poeschlorn

3 个答案:

答案 0 :(得分:2)

使用Template Engine,例如Smarty

或者只使用带嵌入式php的HTML模板,注意不要在模板中加入过多的逻辑。

答案 1 :(得分: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 ?>

虽然还有很多其他模板引擎,不同种类和意识形态。

答案 2 :(得分:1)

尝试像

这样的MVC框架

笨: http://codeigniter.com/

或CakePHP: http://cakephp.org/

(Cake的学习曲线越来越陡峭,但自动化的东西却越来越多)

以下是MVC的内容: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller