我只是想知道在PHP Web项目中将逻辑组件与布局分开的最佳方法是什么?
内容存储在MySQL中,逻辑是PHP,模板当然是HTML / CSS。 我的问题是,如何最好地解决这个问题(不使用CMS)。
greetz,poeschlorn
答案 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框架或CakePHP: http://cakephp.org/
(Cake的学习曲线越来越陡峭,但自动化的东西却越来越多)
以下是MVC的内容: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller