За последние 24 часа нас посетили 8917 программистов и 489 роботов. Сейчас ищут 267 программистов ...

шаблонизатор [нужен алгоритм]

Тема в разделе "Решения, алгоритмы", создана пользователем Koc, 16 май 2009.

  1. kostyl

    kostyl Guest

    +1
     
  2. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    еее, до меня дошло!!
    Думаю начать пейсать шаблонизатор. Вот-вот. Совсем скоро начну. phparser неплохой, но рефакторить его тяжеловато.

    а как время быстро летит
     
  3. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    чё там писать то...
     
  4. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    какие методы должны быть со стороны похапэ для "насаживания" значений?
     
  5. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Koc
    Ты вслед за Apple?
    Кто, куда и кого насаживает?
     
  6. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    я имел в виду это
    PHP:
    1. <?
    2. $tpl->assign('label', 'value');
    3. $tpl->assign('label', $array);
    4. $tpl->assignArray($associativeArray);
    5. $tpl->assignArrayPrefixed($associativeArray, 'prefix_');
    какие методы должны присутствовать?
     
  7. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    одного тебе не хватит?
     
  8. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    как их можно в один запихнуть?
    ладно еще объеденить массив и массив с префиксом
     
  9. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Koc
    У тебя есть 3 варианта

    1. Передавать только скаляры.
    2. Запретить передавать что-либо кроме массивов (они самая универсальная конструкция для данных в PHP)

    3. В методе проверять is_array(), is_object(). И в зависимости от этого работать.

    Весь метод у тебя будет не больше 20ти строчек
     
  10. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Simpliest
    да, это можно сделать но тогда всегда $data должна быть на первом месте. А я привык, что на 1 месте label а на 2 данные
     
  11. kostyl

    kostyl Guest

    Меня давече пригнули таким тру шаблонизатором:
    PHP:
    1.  
    2. <?php
    3. class Tpl {
    4.     public static $vars = array();    
    5.     public static function fetch($tpl_file) {
    6.         if(is_array(Tpl::$vars)) extract(Tpl::$vars);
    7.         ob_start();
    8.         include $tpl_file;        
    9.         return ob_get_clean();
    10.     }    
    11. }
    12.  
     
  12. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    а еще можно __set использовать ...
     
  13. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    5
    Адрес:
    Рига, Латвия
    У меня простейший вопрос - нах различать что запихивается?
    У меня API такой:
    Код (Text):
    1.  
    2. set()
    3. get()
    4. is_set()
    Что вы передаёте в шаблонизатор вы сами знаете. Если таких данных нету в объекте, то просто возвращаю '' при get. is_set использую что бы делать условия вида
    Код (Text):
    1.  
    2. if (is_set('var')):
    3.   // Do stuff here
    4. else:
    5.   // No data yet
    6. endif;
    Хватает выше крыши. Декорирование данных делаю в модулях. К тому же у меня есть необзодимость подсасывания данных другими модулями, так что декораторы нужно делать на уровне модулей, что бы модуль не занимался декорированием чужих данных (это вам в отместку за smarty-like декораторы! Ненавижу этот капец в шаблонах!)
     
  14. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ну.. я на пыхе писал
     
  15. kostyl

    kostyl Guest

    конечно, если не использовать ActiveRecord и т.п. это удобно...
     
  16. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    5
    Адрес:
    Рига, Латвия
    kostyl
    А я вообще видел систему, которая была сделана на подобие Delphi программ. Удобно шо ппц, там для каждого объекта задавался конфиг с типами и декорированием. При забирании данных они автоматом форматировались. Вот хочу так же блин :)
     
  17. kostyl

    kostyl Guest

    Psih
    только вот в Dephi это всё сразу компилируется... а тут каждый раз всё обрабатывать... Что за жизнь пошла то... (( ))

    Так делай )) всё ж для это есть: __get
     
  18. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В честь чего?
     
  19. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    пока сделал так

    // $data может быть как примитивным типом, так и массивом
    assign($label, $data)
    // $data - обязательно массив.
    compact($data, $prefix = NULL)

    хе-хе, я мучаюсь из-за имен переменных, а мне еще компилятор шаблонов писать нужно
     
  20. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    А как распарсить такое

    HTML:
    1.  
    2. <div>
    3.     a
    4.     <div>
    5.         b
    6.     </div>
    7.     c
    8. </div>
    9.  
    10. <div>
    11.     d
    12. </div>
    13.  
    что бы получать такие составляющие:
    HTML:
    1.  
    2. a
    3. <div>
    4.     b
    5. </div>
    6. c
    7.  
    HTML:
    1. b
    HTML:
    1. c
     
  21. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ужос, НАХ?
     
  22. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    для вложенных циклов

    HTML:
    1.  
    2. {%for el in set%}
    3.     {%if el.peoples%}
    4.         <ul>
    5.            {%for person in el.peoples%}
    6.                 <li>[:person.name:]</li>
    7.            {%endfor%}
    8.         </ul>
    9.     {%else%}
    10.         <span>empty</span>
    11.     {%endif%}
    12. {%endfor%}
     
  23. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  24. kostyl

    kostyl Guest

    Mr.M.I.T.
    всё равно жесть...
     
  25. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    kostyl
    опять натив пропаганда? =)