Мне просто интересно, как лучше всего отделить логические компоненты от макета в веб-проекте PHP?
Содержимое хранится в MySQL, логика – PHP, а шаблоны – HTML / CSS, конечно. Мой вопрос в том, как лучше решить эту проблему (без использования CMS).
greetz, poeschlorn
Используйте механизм шаблонов , например Smarty .
Кроме того, просто используйте HTML со встроенным php для шаблонов, будьте осторожны, чтобы не вводить слишком много логики в шаблон.
Просто используйте механизм шаблонов.
Самым известным является сам 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 ?>
Хотя есть много других движков шаблонов, разных видов и идеологий.
Попробуйте создать MVC-структуру, например
CodeIgniter: http://codeigniter.com/
или CakePHP: http://cakephp.org/
(Cake имеет более крутую кривую обучения, но делает намного больше материала автоматически)
Вот что такое MVC: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller