Вы не зашли.
Главная » PHP » леспед шаблонизатора! надо поправить
#1. Nu3oN Off (11)
Moderator
2010.10.09 23:11
короче очередная моя попытка написания шаблонизатора!
даже не спрашивайте зачем он мне, и не говорите что либо в плане того что надо юзать уже готовые решения...

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

Код:
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. Nu3oN Off (11)
Moderator
2010.10.09 23:11
Стараюсь больше косить к smarty (одинаковые названия свойств, методов и т.д)... в случае если мне это дело надоест, что бы установить смарти без проблем!big_smile
Добавлено спустя   2 минуты  31 секунду:
и что думаете на счет кеширование в gz-файле?
есть ли выгода в таком мини сжатия кеша?
Я буду лучше голоден, но между креслом и рулем и на дороге.
#3. Gemorroj Off (107)
Administrator
2010.10.10 10:10
Nu3oN, насчет кэширования в GZ, ИМХО пустое это. Проигрыш в скорости будет много больше чем выигрыш в размере занимаемого диска.
И снова, оформи код по PEAR и комментарии с описанием методов расширь хотя бы входящими/исходящими данными.
Добавлено спустя   8 минут  2 секунды:
$sEval['0']
$sEval['1']
где-то тут на форуме есть тесты производительности, там вобщем показано, что $sEval[0] будет быстрее чем $sEval['0']. Т.е. числовые индексы быстрее ассоциативных, да и памяти число таки меньше жрет.
public function displey - не displey, а display.
Код:
$getTpl = file_get_contents($this -> dir_temp.$tpl);
$getTpl = $this -> _varPreg($getTpl);
echo $getTpl;
мелочи, но шаблонизатор таки должен быть реально быстрым.
Код:
echo $this -> _varPreg(file_get_contents($this -> dir_temp . $tpl));
#4. Nu3oN Off (11)
Moderator
2010.10.10 10:10
я как то читал что $array['0'] быстрей чем $array[0]
Я буду лучше голоден, но между креслом и рулем и на дороге.
#5. Nu3oN Off (11)
Moderator
2010.10.10 11:11
Действительно $array[0] быстрей чем $array['0']

Код:
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:11)
Я буду лучше голоден, но между креслом и рулем и на дороге.
#6. Nu3oN Off (11)
Moderator
2010.10.10 12:12
вот еще один лесапед!
Код:
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:01)
Я буду лучше голоден, но между креслом и рулем и на дороге.
#7. Gemorroj Off (107)
Administrator
2010.10.10 13:01
это на тебя морган такое плохое влияние оказывает чтоли?)))
#8. Nu3oN Off (11)
Moderator
2010.10.10 13:01
Гыыыы... если серьезно, то решение написать свой шаблонизатор у меня возникло из за того, что я знаю что если мне что-то нужно, я знаю где это поправить и понимать что к чему!
В своем шаблонизаторе я организовал вывод всех массивов, переменных, методов, время генерации какого либо метода, вывод ошибок (как пример: если в шаблоне обьявлена переменная {$var} но в скрипте небыла заявленна, то мне выдает название переменной и строку) следя за такими ошибками можно управлять генерацией скрипта...
В общем у меня полный контроль над шаблонизатором
Отредактировано Nu3oN (2010.10.10 13:01)
Я буду лучше голоден, но между креслом и рулем и на дороге.
#9. Morgan Off (10)
Участник
2010.10.10 22:10
Gemorroj написал:
это на тебя морган такое плохое влияние оказывает чтоли?)))
а я все вижу)))
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#10. Nu3oN Off (11)
Moderator
2010.10.11 07:07
Morgan написал:
Gemorroj написал:
это на тебя морган такое плохое влияние оказывает чтоли?)))
а я все вижу)))
Тебе так только кажется big_smile
Добавлено спустя   1 минуту  56 секунд:
теперь осталось написать функции и конструкцию if else
Отредактировано Nu3oN (2010.10.11 13:01)
Я буду лучше голоден, но между креслом и рулем и на дороге.
Страниц: 1 2 3 Все
Главная
WEB
PunBB Mod v0.6.2
0.021 s