• Главная
  • » PHP
  • » леспед шаблонизатора! надо поправить

#1 2010.10.09 23:27

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

леспед шаблонизатора! надо поправить

короче очередная моя попытка написания шаблонизатора!
даже не спрашивайте зачем он мне, и не говорите что либо в плане того что надо юзать уже готовые решения...

короче вот отрывок небольшой

Код:

1
span style="color: #0000BB"><?phpclass Template { /** Переменные шаблона */ private $_variable = array(); /** Массивы шаблона */ private $_array = array(); /** Папка с шаблонами по умолчанию */ public $dir_temp = './_template/'; /** * Установка переменных в шаблоне */ public function assign($var, $key) { if (is_array($key)) { $this -> _array[$var] = $key; } else { $this -> _variable[$var] = $key; } } /** * Обработка переменных в шаблоне */ private function _varPreg($getTpl) { preg_match_all('#\{\$(.+)\}#uUs', $getTpl, $aVars, PREG_SET_ORDER); $iCount = count($aVars); if ($iCount) { for ($i=0; $i<$iCount; $i++) { $sEval = explode('.', $aVars[$i]['1']); $iCount_r = count($sEval); if ($iCount_r > 1) { if (isset($this->_array[$sEval[0]]) and array_key_exists($sEval['1'], $this -> _array[$sEval[0]])) { $isVar = $this -> _array[$sEval[0]]; $getTpl = str_replace('{$'.$sEval['0'].'.'.$sEval['1'].'}', $isVar[$sEval['1']], $getTpl); } else { $getTpl = str_replace('{$'.$sEval['0'].'.'.$sEval['1'].'}', null, $getTpl); } } else { if (isset($this -> _variable[$sEval['0']])) { $getTpl = str_replace('{$'.$sEval['0'].'}', $this -> _variable[$sEval['0']], $getTpl); } else { $getTpl = str_replace('{$'.$sEval['0'].'}', null, $getTpl); } } } } return $getTpl; } /** * Вывод шаблона */ public function displey($tpl) { if (!is_file($this -> dir_temp.$tpl)) { return false; } else { $getTpl = file_get_contents($this -> dir_temp.$tpl); $getTpl = $this -> _varPreg($getTpl); echo $getTpl; } }}?>

нужна чисто оценка и что можно сделать иначе и т.д и т.п и почему лучше сделать так или иначе... smile


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#2 2010.10.09 23:39

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Стараюсь больше косить к smarty (одинаковые названия свойств, методов и т.д)... в случае если мне это дело надоест, что бы установить смарти без проблем!big_smile
Добавлено спустя   2 минуты  31 секунду:
и что думаете на счет кеширование в gz-файле?
есть ли выгода в таком мини сжатия кеша?


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#3 2010.10.10 10:33

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Nu3oN, насчет кэширования в GZ, ИМХО пустое это. Проигрыш в скорости будет много больше чем выигрыш в размере занимаемого диска.
И снова, оформи код по PEAR и комментарии с описанием методов расширь хотя бы входящими/исходящими данными.
Добавлено спустя   8 минут  2 секунды:
$sEval['0']
$sEval['1']
где-то тут на форуме есть тесты производительности, там вобщем показано, что $sEval[0] будет быстрее чем $sEval['0']. Т.е. числовые индексы быстрее ассоциативных, да и памяти число таки меньше жрет.
public function displey - не displey, а display.

Код:

1
2
3
$getTpl = file_get_contents($this -> dir_temp.$tpl);
$getTpl = $this -> _varPreg($getTpl);
echo $getTpl;

мелочи, но шаблонизатор таки должен быть реально быстрым.

Код:

1
echo $this -> _varPreg(file_get_contents($this -> dir_temp . $tpl));

Неактивен

#4 2010.10.10 10:50

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

я как то читал что $array['0'] быстрей чем $array[0]


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#5 2010.10.10 11:10

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Действительно $array[0] быстрей чем $array['0']

Код:

1
span style="color: #0000BB"><?php$arr = array('1'=>'1234567890');$iStart_1 = microtime(true);for ($i=0; $i<100000; $i++) $set = $arr['1'];$iEnd_1 = round(microtime(true) - $iStart_1, 4);$iStart_2 = microtime(true);for ($i=0; $i<100000; $i++) $set = $arr[1];$iEnd_2 =round(microtime(true) - $iStart_2, 4);echo '$arr[\'1\']: '.$iEnd_1.'<br> $arr[1]: '.$iEnd_2;?>

В итоге получилось следущее:
$arr['1']: 0.0786, 0.0735, 0.0728, 0.0767
$arr[1]:  0.0396, 0.0444, 0.043, 0.0406

Отредактировано Nu3oN (2010.10.10 11:16)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#6 2010.10.10 12:44

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

вот еще один лесапед!

Код:

1
span style="color: #0000BB"><?php private function _cyclePreg($getTpl) { /** * Ищем цикл */ preg_match_all('#\{foreach (\$(.*))\}(.*?)\{\/foreach\}#uUs', $getTpl, $aCycle, PREG_SET_ORDER); $cycle = null; /** * Считаем колличество эллементов в массиве, * если их больше нуля, то продолжаем работу с циклом */ $iCountC = isset($this -> _array[$aCycle[0][2]]) ? count($aCycle) : false; if ($iCountC) { $arrCycle = $this -> _array[$aCycle[0][2]]; /** * Считаем колличество эллементов в массиве с которым работаем */ $iCount = count($arrCycle); for ($i=0; $i<$iCount; $i++) { $sFor[$i] = $aCycle['0']['3']; /** * Ищем массивы в цикле */ preg_match_all('#\{\$(.+)\}#uUs', $aCycle[0][3], $aVars, PREG_SET_ORDER); $iCount_v = count($aVars); /** * Если массивы есть, то обрабатываем их */ if ($iCount_v) { for ($n=0; $n<$iCount_v; $n++) { /** * Получаем переменную и ключ * Пример: из {$arr.key} в $arr['key'] */ $sEval = explode('.', $aVars[$n][1]); $iCount_r = count($sEval); if ($iCount_r > 1) { if (isset($arrCycle[$i][$sEval[1]]) and array_key_exists($sEval[1], $arrCycle[$i])) { /** * Если такая переменная заявленна, * и в массиве есть значение с таким ключом то заменяем на действительную */ $sFor[$i] = str_replace('{$'.$aCycle[0][2].'.'.$sEval[1].'}', $arrCycle[$i][$sEval[1]], $sFor[$i]); } else { /** * Если такая переменная не заявленна, то просто затераем ее */ $sFor[$i] = str_replace('{$'.$aCycle[0][2].'.'.$sEval[1].'}', null, $sFor[$i]); } } } } $cycle .= $sFor[$i]; } } /** * И заменяем текст на реальный цикл */ return preg_replace('#\{foreach (\$(.*))\}(.*?)\{\/foreach\}#uUs', $cycle, $getTpl); }?>

Это осуществление циклов...
Пока писал, запутался конкретно...

Отредактировано Nu3oN (2010.10.10 13:03)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#7 2010.10.10 13:00

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

это на тебя морган такое плохое влияние оказывает чтоли?)))

Неактивен

#8 2010.10.10 13:09

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Гыыыы... если серьезно, то решение написать свой шаблонизатор у меня возникло из за того, что я знаю что если мне что-то нужно, я знаю где это поправить и понимать что к чему!
В своем шаблонизаторе я организовал вывод всех массивов, переменных, методов, время генерации какого либо метода, вывод ошибок (как пример: если в шаблоне обьявлена переменная {$var} но в скрипте небыла заявленна, то мне выдает название переменной и строку) следя за такими ошибками можно управлять генерацией скрипта...
В общем у меня полный контроль над шаблонизатором

Отредактировано Nu3oN (2010.10.10 13:31)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#9 2010.10.10 22:31

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Gemorroj написал:

это на тебя морган такое плохое влияние оказывает чтоли?)))

а я все вижу)))


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#10 2010.10.11 07:34

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: леспед шаблонизатора! надо поправить

Morgan написал:

Gemorroj написал:

это на тебя морган такое плохое влияние оказывает чтоли?)))

а я все вижу)))

Тебе так только кажется big_smile
Добавлено спустя   1 минуту  56 секунд:
теперь осталось написать функции и конструкцию if else

Отредактировано Nu3oN (2010.10.11 13:19)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

  • Главная
  • » PHP
  • » леспед шаблонизатора! надо поправить

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.026 s