MVC: View

Понедельник, 25 января 2010

Многие обожествляют MVC и думают, что если не использовать какой-нибудь фреймворк, View реализовать очень сложно. А уж тем более с поддержкой layout-а и возможностью использовать вложенные шаблоны. На самом деле это совсем не так.



// Путь до папки с шаблонами
define('VIEWS_BASEDIR', dirname(__FILE__).'/views/');

class View {
// получить отренедеренный шаблон с параметрами $params
function fetchPartial($template, $params = array()){
extract($params);
ob_start();
include VIEWS_BASEDIR.$template.'.php';
return ob_get_clean();
}

// вывести отренедеренный шаблон с параметрами $params
function renderPartial($template, $params = array()){
echo $this->fetchPartial($template, $params);
}

// получить отренедеренный в переменную $content layout-а
// шаблон с параметрами $params
function fetch($template, $params = array()){
$content = $this->fetchPartial($template, $params);
return $this->fetchPartial('layout', array('content' => $content));
}

// вывести отренедеренный в переменную $content layout-а
// шаблон с параметрами $params
function render($template, $params = array()){
echo $this->fetch($template, $params);
}
}



Даже с таким минимальным кодом работать уже довольно удобно:


$view = new View();
$posts = get_posts();
$view->render('postList', array('posts' => $posts));



layout.php


<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Мой суперпроект</title>
</head>
<body>
<h1>Мой суперпроект</h1>
<?=$content?>
</body>



postList.php


<ul>
<?foreach($posts as $post):?>
<li><?=$post['title']?></li>
<?endforeach?>
</ul>

Тэги: , ,

Комментарии

#1 Dr.Death 25.01.10, 23:05

отлично! уже применил :D

#2 Neyronius 25.01.10, 23:09

Как-то стиль Yii очень напоминает :-)

Не спорю очень удобно. Сам часто так делаю.
Вообще, достаточно функциональный шаблон MVC реализуется очень просто.
Сложнее всего дела обстоят с Front Controller и определения соответствия между URL и парой action/controller.

#3 Ekstazi 26.01.10, 14:36

Вот вот, еще бы статейку про создание контролеров!

#4 Nayjest 28.01.10, 01:16

Боян, аналогичный код 100 раз везде обсасывался

#5 cooper 08.02.10, 10:58

Действительно, очень уж на yiiпохоже. Мне кажется, интереснее было бы если вы описали свою реализацию url manager'а из того же yii. То есть как из

array(
'posts'=>'post/list',
'post/<id:d+>'=>'post/read',
'post/<year:d{4}>/&lt;title&gt;'=>'post/read',
)


собирать и разбирать урлы. Этот момент нигде в интернете не описан( А способ очень удобный. Заранее спасибо =)

Оставить комментарий




Подписаться на RSS

Интересное

Разделы

  1. (5)
  2. (11)
  3. (6)
  4. (9)
  5. (6)
  6. (6)
  7. (16)
  8. (59)
  9. (264)
  10. (51)
  11. (16)
  12. (12)
  13. (37)
  14. (5)
  15. (10)
  16. (14)
  17. (18)
  18. (12)
  19. (6)
  20. (8)
  21. (7)
  22. (29)
  23. (62)
  24. (18)
  25. (64)
  26. (5)
  27. (193)
  28. (56)
  29. (6)
  30. (18)
  31. (72)
  32. (27)
  33. (65)
  34. (32)
  35. (10)
  36. (5)
  37. (6)
  38. (5)
  39. (309)
  40. (11)
  41. (6)
  42. (12)
  43. (8)
  44. (18)
  45. (6)
  46. (15)
  47. (114)
  48. (18)
  49. (6)
  50. (8)
  51. (66)
  52. (16)
  53. (6)
  54. (17)
  55. (5)
  56. (26)
  57. (7)
  58. (27)
  59. (7)
  60. (12)
  61. (11)
  62. (118)
  63. (31)
  64. (5)
  65. (18)
  66. (22)
  67. (9)
  68. (6)
  69. (8)
  70. (41)
  71. (10)
  72. (6)
  73. (12)
  74. (8)
  75. (5)

Друзья