свойства и методы объекта

Inferno

Новичок
__construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state and __clone
какой из них?
с какой версии php эти функции работают? у мня 5,2,1
 

Вурдалак

Продвинутый новичок
Автор оригинала: Inferno
в общем берется шаблон страница и
PHP:
foreach($this->func as $match)
$ss = preg_replace($match['name'], $match['fun'], $ss);
где
PHP:
$this->func
это наш
PHP:
$this->func[] = array('name' => '/#LESSONS#/', 'fun' => $this->lessons());
Помогать в том направлении, что ты идёшь, не хочется. Давай проще: у тебя есть список разрешённых функций (а не методов класса обработки шаблона!) для вызова из шаблона —
PHP:
private $_allowed_functions = array('f1', 'f2', 'f3');
Тебе нужно в какой-то момент заменить названия функций в шаблоне на их значения. Пусть это будет тупой preg_replace():
PHP:
$replacement = 'in_array("\\1", $this->_allowed_functions) ? call_user_func("\\1") : ""';
$s = preg_replace('/#([a-z_][a-z0-9_]*)#/ie', $replacement, $s);
— ты этого хотел?
 

AlekseyK

Новичок
Inferno, а рекомендую вам взять готовый фреймвок и не тратить время на решение тривиальных задач. Будет во много раз продуктивнее если вы сместите акцент разработки в сторону бизнес логики и интерфейса пользователя.

Посмотрите http://www.yiiframework.com/ - все что нужно для создания сайта + фреймворк задает четкую структуру вебприложения.
 

fixxxer

К.О.
Партнер клуба
Поосторожнее с preg_replace //e, евал штука такая, которую лучше не трогать без особой надобности.

preg_replace_callback тогда уж.


уии фреймворк лололо и что все в последнее время советуют этот дебильный клон дебильного дотнета?
 

C_TIGER

Новичок
Inferno, а рекомендую вам взять готовый фреймвок и не тратить время на решение тривиальных задач. Будет во много раз продуктивнее если вы сместите акцент разработки в сторону бизнес логики и интерфейса пользователя.
вот это бля самый плохой совет, особенно для новичка

*_callback +1

Инферно, вот тебе просто шаблонизатор на 5 с плюсом

PHP:
<?
function Template($vars,$__tplname,$extract=true){
     if(is_array($vars) && !empty($vars) && $extract) extract($vars,EXTR_SKIP);
     ob_start();
       include $__tplname;
       $res=ob_get_contents();
     ob_end_clean();
     return $res;
}
?>
-~{}~ 13.01.10 11:45:

нет гарантии, что тут присваивание выполнится до отработки конструктора с $this->a = 2;<<<

Глупости

-~{}~ 13.01.10 11:47:

Почитай кстати про компилируемые шаблонизаторы
 

fixxxer

К.О.
Партнер клуба
До компилируемых потом сам дойдет :)

Начинать надо с простого, все же.
 

Inferno

Новичок
C_TIGER ну эт понятно, можно поделиться что делают ob_start и остальные не php'ные функции?
Вурдалак почему предложенный метод нельзя перенсти в классы? Писать на макаронах цмс?
Готовый фреймворк и готовые цмс и все готовое не хочу.... спорить не будем про это много что написано...
 

Inferno

Новичок
тогда получаеться что шаблон еще после preg_replace должен будет обрабатываться интерпритатором?
 

C_TIGER

Новичок
можно поделиться что делают ob_start и остальные не php'ные функции?<<

посылают тебя на php.net/ob_start
и по другим пхпшным ссылкам =)
 

fixxxer

К.О.
Партнер клуба
вместо шаблона пишется обычный php-скрипт.

пример:

скрипт
PHP:
<?php
// конечно не ручками, а получаем из моделей итд - это пример просто
$tpl_vars = array(
   'username' => 'vasya',
   'items' => array(
       array('name' => 'fignya1', 'price' => 100),
       array('name' => 'fignya2', 'price' => 200),
   )
);

parse_template('template.php', $tpl_vars);

function parse_template($tpl_file, array $tpl_vars) {
    extract($tpl_vars);
    include $tpl_file;
}

function e($s) {
    return htmlspecialchars($s, ENT_QUOTES);
}
tempate.php
PHP:
<? include 'header.php'; ?>
<h1>Hello <?=e($username)?>!</h1>
<table>
<? foreach ($items as $item): ?>
<tr><td><?=e($item['name'])?></td><td><?=e($item['price'])?></td></tr>
<? endforeach; ?>
</table>
<? include 'footer.php'; ?>
Вот примитивный raw php шаблон.

Тут конечно можно увидеть недостатки, например, без проверок isset будут валиться нотисы и т.д. Либо привыкаешь писать длинные конструкции в шаблонах, либо обращаешь взор на компилируемые движки (которые по сути нужны для сокращения синтаксиса и недопущения написания в шаблоне того, чего там не должно быть - типа mysql_query). Но сначала осиль так =)
 

Духовность™

Продвинутый новичок
например, без проверок isset будут валиться нотисы
у меня на этот случай есть самописный класс Cover_Var, который представляет собой объектный массив с кучей полезных (для меня) методов. Поэтому у меня никогда не бывает нотисов, если в шаблоне идет попытка вывести неизвестную переменную:

PHP:
<tr>
       <th colspan="3"><h4><?=$this->lang->search_users?></h4></th>
</tr>
function e($s) {
return htmlspecialchars($s, ENT_QUOTES);
}
а подобного рода функции мы оформляем в класс для форматирования html кода в шаблонах! :)

недопущения написания в шаблоне того, чего там не должно быть - типа mysql_query
это проблема, высосанная из пальца. просто надо адекватных программистов брать на работу и самому быть адекватным. вот и все.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: C_TIGER
весь hight load пишется на native шаблонах
отучаемся говорить за всех

-~{}~ 20.01.10 15:19:

triumvirat

давай опять не будем разводить native php vs компилируемые движки :) оба метода имеют право на жизнь и свои преимущества и недостатки. я юзаю оба в зависимости от ситуации.

пример вменяемого использования native php можно посмотреть, например, в symfony. причем там же как альтернатива предлагается twig ;)
 

C_TIGER

Новичок
отучаемся говорить за всех<<

а что есть другие варианты? наилучшим образом подходящие под критерии понятия хайлоад?
 
Сверху