Intereting Posts
Как получить титул веб-страницы с CURL в PHP с веб-сайтов разных CHARSET? PHP не показывает никаких ошибок Стационарный метод в PHP имеет какую-либо разницу с нестационарным методом? как я могу получить вставленный id php и oracle Почтовая форма PHP не работает Скрипт для работы с файлами PHP: ненадежные загрузки? Как удалить определенные теги и определенные атрибуты из строки? Странный текст при преобразовании XML-массива в XML регулярное выражение для получения подстроки через php PHP Swift-почтовая программа: не удалось выполнить аутентификацию на SMTP, используя 2 возможных аутентификатора Вход в удаленный сайт с PHP cURL Определение прошедшего времени Как использовать две разные версии PHP на одном сервере mod_fcgid время ожидания чтения из канала, конец вывода сценария перед заголовками, несколько версий PHP Разделение разделителя строк в PHP на пары ключей / значений (ассоциативный массив)

Разделение логики / стиля в PHP должным образом

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

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

greetz, poeschlorn

Solutions Collecting From Web of "Разделение логики / стиля в PHP должным образом"

Используйте механизм шаблонов , например 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