За последние 24 часа нас посетили 16113 программистов и 1513 роботов. Сейчас ищут 816 программистов ...

Модель MVC

Тема в разделе "Прочие вопросы по PHP", создана пользователем Atp, 21 июл 2010.

  1. Atp

    Atp Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте. :)
    Очень хотелось бы узнать ваше мнение по поводу разделения кода и дизайна.
    Начиная создавать форум, я задался этим вопросом. Стал читать по этой теме и несколько запутался.
    Есть пассивные и активные шаблоны, мощные шаблонизаторы по типу Smarty, компонентный подход..
    Смарти выглядит для меня громоздким и я не очень в нем на данный момент разобрался. Какой подход вы бы использовали в случае форума? Что бы вы мне посоветовали?
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Модель MVC? Не знаю такого.
    Знаю шаблон проектирования MVC и модель как компонент паттерна.
     
  3. Atp

    Atp Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    11
    Симпатии:
    0
    Некоторые сложности еще с понятиями. Пусть будет шаблон проектирования. :) Что бы вы мне посоветовали по теме?
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    он просто сегодня какой то не добрый ^^
    Hight форум пишет, ответит наверное)
     
  5. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Atp
    Начни писать как знаешь. Всё равно ещё 10 раз переписывать.
     
  6. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Hight
    А шаблонизатор то какой, свой который:
    PHP:
    1. <?php
    2.  $replaces = array('%name%' => 'Hight', '%time%' => time());
    3.  $template = 'templates/main.template.html';
    4.  echo str_replace(file_get_contents($template), array_keys($replaces), $replaces);
    5.  ?>
    ?:D
     
  7. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
  8. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    маленькая приятная функция с базовым функционалом :)
     
  9. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Padaboo
    У меня шаблонизатор по принципу как в твоём коде. Только покруче конечно =)

    А так да, html и пхп надо друг от друга отделять. Всякие смарти со своими псевдо языками нафиг не нужны.
     
  10. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  11. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    вай? )

    она даже экранировать умеет :))

    осталось форичам научить :D
     
  12. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    phpdude
    делай свой фреймворк xD
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Черт, как эпично заканчивается та тема :D
     
  14. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    [vs]
    обычная концовка :D

    ажакс, хуякс и нихуякс)
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Хочешь быть — будь! Не надо зарываться в изучение монструозов. Просто напиши добычу данных отдельно, а отрисовку страницы отдельно — всё на чистом PHP. Потом поймешь как тебе удобнее развиваться.

    Я этих шаблонизаторов написал уже большой пучок. У каждого свои плюсы.
     
  16. Atp

    Atp Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    11
    Симпатии:
    0
    Спасибо за советы :)
    Со смарти действительно решил не связываться. Буду пробовать написать своё, пусть намного проще, но хоть разберусь. :)
     
  17. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Вот простенький класс для работы с шаблонами.
    PHP:
    1. <?
    2. class template
    3. {
    4.     var $ver = "1.0";
    5.     var $filelist = array(), $assign = array();
    6.     var $root, $arr, $delimiters;
    7.    
    8.     function init($arr = "", $root = "", $delimit = "") {
    9.         if (empty($arr) || !is_array($arr)) $this->killme("init(): Gimme an associative array first");
    10.         $this->setroot($root); $this->listit($arr);
    11.         if (!empty($delimit)) {
    12.             if (preg_match ("/^.{2}$/i",$delimit)) {
    13.                 $this->delimiters = $delimit[0];
    14.                 $this->delimiters = $delimit[1];
    15.             } else $this->killme("Specify only two chars for delimiter!");
    16.         } else $this->delimiters();
    17.     }
    18.  
    19.     function exist($arr) {
    20.         while (list($var1, $file) = each ($arr))
    21.             if (!file_exists($file)) $this->killme("exist(): Error: File doesn't exist: \"$file\"!\n");
    22.     }
    23.    
    24.     function setroot($root = "") {
    25.         if (is_string($root)) {
    26.             $this->root = preg_replace ("/([^\/])$/", "\\1/", (empty($root) ? "./" : $root));
    27.             if (!is_dir($this->root)) $this->killme("setroot(): $this->root is not a directory!");
    28.         } else $this->killme("setroot(): Specified parameter for setroot() is not a string!\n");
    29.     }
    30.    
    31.     function killme($msg = "") {
    32.         die ((empty($msg)?"killed":$msg)."<br>\n".$this->ver);
    33.     }
    34.    
    35.     function assign($arr = "", $val = "") {
    36.         if (empty($arr)) $this->killme("assign(): no given parameters");
    37.         if (!is_array($arr)) $this->assign["$arr"] = $val;
    38.         else while (list($key, $val) = each ($arr)) if (!empty($key)) $this->assign["$key"] = $val;
    39.     }
    40.    
    41.     function listit($list = "") {
    42.         if (!is_array($list) || empty($list)) $this->killme("listit(): template filelist is empty!");
    43.         else {
    44.             while(list($descr, $file) = each($list)) if (!empty($descr)) $this->filelist["$descr"] = $this->root.$file;
    45.             $this->exist($this->filelist);
    46.         }
    47.     }
    48.    
    49.     function parseit($data = "", $temp = "") {
    50.         if (empty($data)) $this->killme("parseit(): Dunno what to do!");
    51.        
    52.         $f = (!empty($this->filelist["$data"])) ? file($this->filelist["$data"]) : $data;
    53.        
    54.         if (!empty($temp)) $this->assign["$temp"] .= $this->getparsed($f);
    55.         else $this->arr .= $this->getparsed($f);
    56.     }
    57.    
    58.     function getparsed($data = "") {
    59.         if (empty($data)) $this->killme("getparsed(): Gimme some data to parse it :)");
    60.         if (is_array($data)) $data = implode("", $data);
    61.         reset($this->assign);
    62.         while (list($key, $val) = each ($this->assign)) {
    63.             $data = preg_replace("/".$this->delimiters[0]."\s*".
    64.             preg_quote($key)."\s*".$this->delimiters[1]."/", "$val", $data);
    65.         }
    66.         return $data;
    67.     }
    68.  
    69.     function delimiters($d1 = "", $d2 = "") {
    70.         if (!empty($d1) && !empty($d2)) {
    71.             $this->delimiters[0] = preg_quote($d1);
    72.             $this->delimiters[1] = preg_quote($d2);
    73.         } else {
    74.             $this->delimiters[0] = preg_quote("{");
    75.             $this->delimiters[1] = preg_quote("}");
    76.         }
    77.     }
    78.    
    79.     function addtolist ($d = "", $name = "") {
    80.         if (empty($d) || !is_string($name)) $this->killme("addtolist: Descriptor or filename is not a string!");
    81.         else {
    82.             if (!empty($d) && !empty($name)) {
    83.                 $this->filelist["$d"] = $this->root.$name;
    84.                 $this->exist($this->filelist);
    85.             } else $this->killme("addtolist: Descriptor or filename is empty!");
    86.         }
    87.     }
    88.    
    89.     function freshall() {
    90.         while(list($descr, $file) = each($this->filelist)) unset($this->filelist["$descr"]);
    91.         while(list($descr, $tag) = each($this->assign)) unset($this->filelist["$tag"]);
    92.         unset($this->root);
    93.         unset($this->arr);
    94.     }
    95.    
    96.     function fresh() { unset($this->arr); }
    97.     function printit($me = "") { echo (empty($me)?$this->arr :  $this->assign["$me"]); }
    98. }
    99. ?>
    Использование:

    PHP:
    1. <?
    2. $t = new template;
    3. $t->init(array(index => "index.tpl"));
    4. $t->delimiters("{", "}");
    5.  
    6. // Далее забиваем теги
    7. $t->assign("MENU",@file_get_contents($CONFIG['TEMPLATE']."menu.tpl"));
    8. $t->assign("HEAD",$head);
    9. $t->assign("TEXT",$text);
    10. $t->assign("TITLE",$CONFIG['TITLE']);
    11. $t->assign("TEMPLATE_PATH",$CONFIG['TEMPLATE']);
    12.  
    13. $t->parseit(index);
    14. $t->printit();
    15. $t->freshall();
    16. ?
     
  18. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
  19. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    порадовало )
     
  20. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  21. Atp

    Atp Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    11
    Симпатии:
    0
    Padaboo
    Ого :) Как все сложно :) Сейчас исправлю.
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Чтобы иметь представление о том, как делается нормальное MVC на PHP, надо взять ZendFramework и поверхностно с ним ознакомиться.