Правильное разделение логики и стиля в PHP - PullRequest
1 голос
/ 29 июня 2010

Мне просто интересно, как лучше отделить логические компоненты от макета в веб-проекте PHP?

Содержимое хранится в MySQL, логика - PHP, а шаблоны - HTML / CSS.конечно.Мой вопрос, как решить эту проблему лучше всего (без использования CMS).

greetz, poeschlorn

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Использовать Template Engine , например Smarty .

В качестве альтернативы просто используйте HTML со встроенным php для шаблонов, просто будьте осторожны, чтобы не добавлять слишком много логики в шаблон.

1 голос
/ 29 июня 2010

Попробуйте MVC-фреймворк, например

CodeIgniter: http://codeigniter.com/

или CakePHP: http://cakephp.org/

(Cake имеет более крутую кривую обучения, но делает намного больше вещей автоматически)

Вот что такое MVC: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

1 голос
/ 29 июня 2010

Просто используйте какой-нибудь шаблонизатор.
Самым знакомым является сам 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 ?>

Хотя существует множество других шаблонизаторов различных типов и идеологий.

...