Здравствуйте. Очень хотелось бы узнать ваше мнение по поводу разделения кода и дизайна. Начиная создавать форум, я задался этим вопросом. Стал читать по этой теме и несколько запутался. Есть пассивные и активные шаблоны, мощные шаблонизаторы по типу Smarty, компонентный подход.. Смарти выглядит для меня громоздким и я не очень в нем на данный момент разобрался. Какой подход вы бы использовали в случае форума? Что бы вы мне посоветовали?
Некоторые сложности еще с понятиями. Пусть будет шаблон проектирования. Что бы вы мне посоветовали по теме?
Hight А шаблонизатор то какой, свой который: PHP: <?php $replaces = array('%name%' => 'Hight', '%time%' => time()); $template = 'templates/main.template.html'; echo str_replace(file_get_contents($template), array_keys($replaces), $replaces); ?> ?
Padaboo У меня шаблонизатор по принципу как в твоём коде. Только покруче конечно =) А так да, html и пхп надо друг от друга отделять. Всякие смарти со своими псевдо языками нафиг не нужны.
Hight это еше флоппик отжег http://www.php.ru/forum/viewtopic.php?p=213758#213758 я вот другую штуку задумал... phpdude жесткая функция
Хочешь быть — будь! Не надо зарываться в изучение монструозов. Просто напиши добычу данных отдельно, а отрисовку страницы отдельно — всё на чистом PHP. Потом поймешь как тебе удобнее развиваться. Я этих шаблонизаторов написал уже большой пучок. У каждого свои плюсы.
Спасибо за советы Со смарти действительно решил не связываться. Буду пробовать написать своё, пусть намного проще, но хоть разберусь.
Вот простенький класс для работы с шаблонами. PHP: <? class template { var $ver = "1.0"; var $filelist = array(), $assign = array(); var $root, $arr, $delimiters; function init($arr = "", $root = "", $delimit = "") { if (empty($arr) || !is_array($arr)) $this->killme("init(): Gimme an associative array first"); $this->setroot($root); $this->listit($arr); if (!empty($delimit)) { if (preg_match ("/^.{2}$/i",$delimit)) { $this->delimiters = $delimit[0]; $this->delimiters = $delimit[1]; } else $this->killme("Specify only two chars for delimiter!"); } else $this->delimiters(); } function exist($arr) { while (list($var1, $file) = each ($arr)) if (!file_exists($file)) $this->killme("exist(): Error: File doesn't exist: \"$file\"!\n"); } function setroot($root = "") { if (is_string($root)) { $this->root = preg_replace ("/([^\/])$/", "\\1/", (empty($root) ? "./" : $root)); if (!is_dir($this->root)) $this->killme("setroot(): $this->root is not a directory!"); } else $this->killme("setroot(): Specified parameter for setroot() is not a string!\n"); } function killme($msg = "") { die ((empty($msg)?"killed":$msg)."<br>\n".$this->ver); } function assign($arr = "", $val = "") { if (empty($arr)) $this->killme("assign(): no given parameters"); if (!is_array($arr)) $this->assign["$arr"] = $val; else while (list($key, $val) = each ($arr)) if (!empty($key)) $this->assign["$key"] = $val; } function listit($list = "") { if (!is_array($list) || empty($list)) $this->killme("listit(): template filelist is empty!"); else { while(list($descr, $file) = each($list)) if (!empty($descr)) $this->filelist["$descr"] = $this->root.$file; $this->exist($this->filelist); } } function parseit($data = "", $temp = "") { if (empty($data)) $this->killme("parseit(): Dunno what to do!"); $f = (!empty($this->filelist["$data"])) ? file($this->filelist["$data"]) : $data; if (!empty($temp)) $this->assign["$temp"] .= $this->getparsed($f); else $this->arr .= $this->getparsed($f); } function getparsed($data = "") { if (empty($data)) $this->killme("getparsed(): Gimme some data to parse it :)"); if (is_array($data)) $data = implode("", $data); reset($this->assign); while (list($key, $val) = each ($this->assign)) { $data = preg_replace("/".$this->delimiters[0]."\s*". preg_quote($key)."\s*".$this->delimiters[1]."/", "$val", $data); } return $data; } function delimiters($d1 = "", $d2 = "") { if (!empty($d1) && !empty($d2)) { $this->delimiters[0] = preg_quote($d1); $this->delimiters[1] = preg_quote($d2); } else { $this->delimiters[0] = preg_quote("{"); $this->delimiters[1] = preg_quote("}"); } } function addtolist ($d = "", $name = "") { if (empty($d) || !is_string($name)) $this->killme("addtolist: Descriptor or filename is not a string!"); else { if (!empty($d) && !empty($name)) { $this->filelist["$d"] = $this->root.$name; $this->exist($this->filelist); } else $this->killme("addtolist: Descriptor or filename is empty!"); } } function freshall() { while(list($descr, $file) = each($this->filelist)) unset($this->filelist["$descr"]); while(list($descr, $tag) = each($this->assign)) unset($this->filelist["$tag"]); unset($this->root); unset($this->arr); } function fresh() { unset($this->arr); } function printit($me = "") { echo (empty($me)?$this->arr : $this->assign["$me"]); } } ?> Использование: PHP: <? $t = new template; $t->init(array(index => "index.tpl")); $t->delimiters("{", "}"); // Далее забиваем теги $t->assign("MENU",@file_get_contents($CONFIG['TEMPLATE']."menu.tpl")); $t->assign("HEAD",$head); $t->assign("TEXT",$text); $t->assign("TITLE",$CONFIG['TITLE']); $t->assign("TEMPLATE_PATH",$CONFIG['TEMPLATE']); $t->parseit(index); $t->printit(); $t->freshall(); ?
Ensiferum Не фига себе простенький. =)) Вот простенький: http://www.php.ru/forum/viewtopic.php?p=201089#201089
Чтобы иметь представление о том, как делается нормальное MVC на PHP, надо взять ZendFramework и поверхностно с ним ознакомиться.