За последние 24 часа нас посетили 29823 программиста и 1763 робота. Сейчас ищут 916 программистов ...

Вопрос по формированию вывода

Тема в разделе "PHP для новичков", создана пользователем roversochi, 12 мар 2013.

  1. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Вот у меня есть альфа версия скрипта.
    в ней формируется в отдельном файле header, отдельно content, который подключается в зависимости от УРЛ-а, и отдельный footer. Инклюдятся они в том же порядке.
    Если я в области content вношу изменения в переменные, то они естесственно не отображаются в header - там старые данные до пересчетов.
    То есть я потихоньку подхожу к технологии MVC, но как ее реализовать на практике я так и не понял пока что. Один из вариантов все эти 3 блока загонять в переменные вроде $out[header] и прочее. И первым формировать content, потом хидер и футер, а echo делать в нормальном порядке. Но это как-то криво мне кажется.
    Да и когда я загоняю в переменную участки кода используя конструкции <<<EOT, внутри этой конструкции не раскрываются <?php echo WWWPATH;?> например.
    Как правильно организовать вывод? Как сделать этот MVC? :)
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну например у движка этого форума шаблоны на html чистом писаны и через блоки комментариев реализовано подключение других шаблонов. то есть логику шаблонов можно увидеть читая шаблон. когда выполняется шаблонизатор он создает php версию этого кода где переменные заменены на echo соответствующих индексов внутреннего массива, блоки условий на иф-элсы и так далее. то есть готовый php-скрипт который готов вывести данные встроив их в шаблон. условно это часть (C+)V
    далее собственно заполнение. в процессе прохождения запроса по внутренностям движка устанавливаются значения внутри класса шаблонизатора. это MC. когда скрипт завершает свое исполнение он дает указание шаблонизатору исполнить тот или иной шаблон. загружается php-файл (или компилируется если его еще нет), берет данные из внутреннего массива и отправляет результат выполнения этого скомпилированного шаблона.
     
  3. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Спасибо, но как-то пока сложно это все равно представляю. Наверное еще не дошел до этого.
    Пока что сделал формирование content в отдельную переменную $out, а потом вывожу все до кучи. Процедурный стиль, да, но так пока мне понятно. :)
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    зря, лучше сразу освоить более правильную технологию))
     
  5. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Ну я пока ее начну осваивать - всех достану ведь :)
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да не, там все просто))) можно легко организовать класс который будет принимать значение переменных и в нужный момент покажет нужный шаблон. тогда, правда, вам самим придется следить за логикой внутри шаблона. но это не сложно. а потом уже допилите чтоб шаблоны были на html+логика+маркеры и все это дело само компилировалось в php
     
  7. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    УжосУжос! :)

    Я на самом деле смотрел на готовые решения, чтобы разобраться , ну симфони и прочее. Чего-то мне показалось это очень сложным...
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    глаза боятся а руки делают)))) все будет хорошо. приступайте))) у класса будет, допустим, 4 метода - конструктор, установка простой переменной, установка блоковой переменной, показ шаблона

    кстати, когда я занялся шаблонизатором несколько лет назад - я пошел неверным путем. примеры моего говнокода лежат на форуме - http://php.ru/forum/viewtopic.php?t=5369. почти целый год я пытался добиться скорости работы этого решения пока не переписал все с нуля на другую логику. поэтому я вам как прошедший через эти грабли говорю - сразу делайте хорошо =)
     
  9. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    хммм. это вообще что такое? :))))

    Значит есть у меня какая-то страница, которая допустим вычисляет $c=$a+$b. Давай на примере? :)
    Вот я сначала делаю объект того класса, который автоматом вызывает метод конструкт, который... Что?
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    отлично, старт дан)))

    есть скрипт, который вычисляет a+b=c и пишет это на странице.
    сам скрипт будет таким:
    Код (PHP):
    1. <?php
    2. $a = 1;
    3. $b = 2;
    4. $c = $a+$b;
    5.  
    6. $tpl = new tpl_class();
    7. $tpl->set_vars(array(
    8.   'A'=>$a,
    9.   'B'=>$b,
    10.   'C'=>$c
    11. ));
    12. $tpl->show('calc');
    13. ?>
    это "модель", которая через класс шаблонизатора передала данные для "вида".
    если добавить сюда пользовательский ввод значения переменных - "контроллер" - будет уже простой MVC =)

    шаблон ("вид") будет выглядеть так:
    Код (PHP):
    1. <html><head><title>useless calc</title></head><body>
    2. <?php echo $this->data['A']; ?>+<?php echo $this->data['B']; ?>=<?php echo $this->data['C']; ?>
    3. </body></html>
    таким образом, после завершения работы "MVc" в целом увидим следующий html:
    Код (PHP):
    1. <html><head><title>useless calc</title></head><body>
    2. 1+2=3
    3. </body></html> 
    а в браузере просто:
    Код (Text):
    1. 1+2=3
    вот вам простой пример работы простого шаблонизатора (написанного, кстати, на другом шаблонизаторе - языке PHP)
     
  11. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Так, а сам класс значит будет примерно таким:
    Код (Text):
    1. <?php
    2. class tpl_class {
    3. #например
    4.     var $data;
    5.     function __construct {
    6.         # пока пусто
    7.     }
    8.  
    9.     function set_vars($var1) {
    10.         $this->data[1]=$var1[A];
    11.         $this->data[2]=$var1[B];
    12.         $this->data[3]=$var1[C];
    13.         # игня какая-то
    14.      }
    15.  
    16.     function show($var1) {
    17.         if ($var1=='calc') {
    18.             # инклюдим соответствующий вид
    19.             #Или как?
    20.         }
    21.      }
    22. }
    Так что ли?
    короче ничего не понял :)
     
  12. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Короче рано мне еще это понимать. Сейчас на процедурном стиле допилю за полгодика то, что задумал, а потом сам дойду до этого. :)