За последние 24 часа нас посетили 17502 программиста и 1690 роботов. Сейчас ищут 992 программиста ...

Smarty 3

Тема в разделе "Прочие вопросы по PHP", создана пользователем флоппик, 19 окт 2008.

  1. Смарти 3 будет поддерживать native-php шаблоны.

    В юмор надо перенести...
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    жестоко =)))
    это ты где вычитал?
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    чёта торможу, чем это отличается от имеющегося {php} … {/php} или {include_php} ?
     
  4. Ты не понял. Они не будут парсится! там будет натив-пхп!
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    задумалсо…
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а я вот такого за 5 мин написал
    PHP:
    1. <?
    2. class tpl {
    3. public $tpldir;
    4. private $vars,$tplcache,$globalvars;
    5.   function __construct($tpldir) {
    6.       $this->tpldir=$tpldir;
    7.   }
    8.   function set($name,$value=0) {
    9.       if (!is_array($name) && $value) {
    10.           $this->vars[$name]=$value;
    11.       }else if(is_array($name)) {
    12.           foreach($name as $key=>$val) {
    13.               $this->vars[$key]=$val;
    14.           }
    15.       }else {
    16.           return false;
    17.       }
    18.   }
    19.   function set_global($name,$value=0) {
    20.       if (!is_array($name) && $value) {
    21.           $this->globalvars[$name]=$value;
    22.       }else if(is_array($name)) {
    23.           foreach($name as $key=>$val) {
    24.               $this->globalvars[$key]=$val;
    25.           }
    26.       }else {
    27.           return false;
    28.       }
    29.   }
    30.   function load($tplname) {
    31.        if (!$this->tplcache[$tplname]) {
    32.            $fp=@file_get_contents($this->tpldir.'/'.$tplname);
    33.            if ($fp) {
    34.                $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp;
    35.                $this->tplcache[$tplname]=$fp;
    36.            }
    37.        }else {
    38.            $fp=$this->tplcache[$tplname];
    39.        }
    40.        if (!$fp) return false;
    41.        ob_start();
    42.         extract($this->vars);
    43.         $_GLOBALS=$this->globalvars;
    44.         eval("?".">".$fp."<?");
    45.        $res=ob_get_contents();
    46.        ob_clean();
    47.        $this->clear();
    48.        return $res;
    49.   }
    50.   function clear() {
    51.       $this->vars=array();
    52.   }
    53. }
    54. ?>
    на первое время хватит =)
     
  7. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    eval чтоли? о_0
     
  8. вроде даже инклуд
     
  9. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    А что я вам говорил? Меня кто-то слушал? Native PHP гавно, неудобно, некрасиво! Тьфу блин. Радует что у народа наконец мозг встал на место. Наверно там народ наконец получил IT образование высшее.
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    я вот теперь думаю как переписать 1.3 метра кода со смарти на это...
     
  11. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Переписывать не обязательно, он будет поддерживать оба вида. Но всёравно радует, что они наконец поняли.
    Т.е. что бы обработать как PHP шаблон надо сделать так:
    $smarty->display('php:template_name.tpl');
    Так что всё можно перевести по немногу, по шаблончику за раз :)
     
  12. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    а что такое натив пхп? (оч стыдно)
     
  13. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    пхп код
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    чё за фигня?
    в пхп делаю
    PHP:
    1.  
    2. <?
    3. class a {
    4.     function print_a() {
    5.         print "AAA AAA AAA";
    6.     }
    7.     function print_b() {
    8.         print "BBBB BBBB BBBB";
    9.     }
    10. }
    11. $tpl=new tpl("tpl");
    12. $tpl->set("error",new a());
    13. print $tpl->load("error.tpl");
    14. ?>
    в error.tpl
    PHP:
    1. Ошибка: <?$error->print_a();?>
    в мне
    а я
    PHP:
    1. Ошибка: <?if(is_object($error)) print "no err";?>
    а мне
    0_o
     
  15. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Думается скорее всего смарти пошел на поводу у крикунов - "нате вам нативный пхп, только ацтаньте" =) Чем скомпилированный шаблон будет по скорости отличаться от нативного... не понимаю ;) Но, зато, тем кому шашечки, тоже довольны остались. А те, кому ехать, так и будут дальше ехать, посмеиваясь ;)
     
  16. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    MiksIr
    На Smarty нельзя рекурсивно вывести шаблон. А иногда это нужно и много удобнее. Иногда надо применить какое-то специфичное форматирование одной функцией в одном шаблоне - делать для этого целый Smarty плагин очень глупо - а так можно просто её написать где-то в библиотечном файле и использовать в шаблоне как обычную функцию.

    В больших проектах от такого не убежишь как ни крути. Вопрос только в том, насколько разумно программист делит логику приложения и отображения. Каша получается и тех, кто этого делать не умеет. Нужно хотя-бы запомнить простейшее правило: шаблон не вытаскивает данные откуда либо, и шаблон не модифицирует и не обрабатывает данные (за очень редкими, точечными исключениями, обусловленными крайней специфичностью задачи). Шаблон должен получить данные из шаблонизатора через get() (у каждого по своему она называется) и отправить на вывод прямиком или перебором проставить в HTML данные из массива.

    Кстати, не путать с движками, где шаблон задаёт логику приложения. Такой подход тоже неплох, тут просто кому что нравиться :).
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    аа дело не в "шаблонезаторе" было =))
     
  18. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Не понял, почему смпарти плагин - это глупо.
    Рассматриваем плагины как хелперы. Часто наоборот стараемся какой-нить хитрый ассигн вообще вынести в плагин, что бы скрыть реализацию от вью.
    В конце концов, что мешает ввести эту самуый библиотечный класс и дергать его из смарти статикой.

    > шаблон не вытаскивает данные откуда либо
    а как же активные шаблоны ;)

    Насчет рекурсииивности шаблонов... мм.. сложно представить, зачем это нужно... но если уж нужно.. а что, шаблон сам в себя проинклудить нельзя? ;)
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ура, теперь у меня 10000 записей выводит по 15 на стр. за
    0.055
    со смарти было
    0.49
     
  20. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    И твои пользователи, должно быть, писают от восторга. :)
     
  21. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    пока пользователь только один - я
    но радоваться за меня разрешается всем ;)
    зы. а что плохое время?
     
  22. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Расскажите, как меряли? Нормально ли смарти компилит шаблоны (есть ли они в вообще)
    Очень странные цифры
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    как обычно
    в index.php измерил время в начале, потом в конце, потом вычел
    конечно нормально...а что значит ненормально?
    может это из-за того что всё доставлялось в шаблон в одном массиве, а там выводилось циклом section?
    но без этого теряется ряд важных приемуществ
     
  24. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ну, может смарти не удается сохранить скомпиленный шаблон.. и каждый раз парсится все. Хотя, наверно ругалось бы...
    Было бы интересно синтетический тест сделать - набор данных, шаблон и посмотреть.
    Просто не ясно совершенно, откуда может быть выигрыш в 10 раз.