шаблонизатор

1. delete (28.07.2010 / 16:40)
Возникла задача, написать систему шаблонизатора для сайта, есть конечно и готовые, типа смарту, но он слишком большой и сложный. Поэтому написал маленький скриптик, взятый из уроков по php.

<?php
function html ($path) {
if ( is_file ( $path ) ) { $path = implode ( '', @file ( $path ) ); }
foreach ( $GLOBALS as $key=>$val ){
if ( !is_array ($val) and !is_object ($val) and ereg ("%$key%", $path) ) {
$path = str_replace ( "%$key%", $val, $path );
}
}
if ( ereg ("%.*%",$path) ) {
preg_match_all ( "/(?<=%)\w+(?=%)/", $path, $array );
while ( list ($key, $val) = each ( $array[0] ) ){
$path = ereg_replace ( "%$val%", '' , $path );
}
}
return $path;
}

?>

запускается он вызовом функции html, макросы вида %текст% , как бы его посоветуете переделать для макросов вида {текст} ну и сама реалезация, не очень убогая?

2. ramzes (28.07.2010 / 16:46)
убрать file и implode, заменить на file_get_contents,
ereg заменить на preg

3. Игорь (28.07.2010 / 16:46)
ereg не лучшие решение. В версии пхп выше 5.3.Х его нету
А это переделать ereg ("%.*%",$path) на ereg ("{.*}",$path)

4. delete (28.07.2010 / 16:50)
ну да, это старый код еще 2007 года, но нашел такой, мне главное что бы не очень большой, ведь задача конкретная smile навороты особые и оптимизация кода не нужна

5. Игорь (28.07.2010 / 16:52)
Ну ты все % замени на {}
Хотя зря насчет оптимизации. А так тебе решать)

6. delete (28.07.2010 / 16:55)
функции я то поменяю на болие прогрессивные, а как вам сама реализация, не сильно убогая в плане современых методов написания шаблонизаторов?

7. delete (28.07.2010 / 17:00)
заменил на {},

<?php

/* Функция шаблонизатора */

function templates ($path) {
if ( is_file ( $path ) ) { $path = implode ( '', @file ( $path ) ); }
foreach ( $GLOBALS as $key=>$val ){
if ( !is_array ($val) and !is_object ($val) and ereg ("{$key}", $path) ) {
$path = str_replace ( "{$key}", $val, $path );}}

if ( ereg ("{.*}",$path) ) {
preg_match_all ( "/(?<={)\w+(?=})/", $path, $array );
while ( list ($key, $val) = each ( $array[0] ) ){
$path = ereg_replace ( "{$val}", '' , $path );}}

return $path;}

?>
правда он почему то не обрежает {} при выводе smile так и отображается {Текст}, данные заменяет а фигурные скобки не уберает smile но эт потом разбирусь, что то с регулярными выражениями не так.

8. Nu3oN (28.07.2010 / 17:02)
Вот держи! сам раньше ерундой страдал, и с тем что сейчас на смарти перешел!
Если нужно могу еще конструкцию if else дать для этого "шаблонизатора"
<?
class template 
{
var $array_r = array();
var $content = null;

function set_cont($name_original, $name_replace)
{
$this -> array_r[$name_original] = $name_replace;
}

function out_content($tpl)
{
if (is_file($tpl))
{
$this -> content = file_get_contents($tpl);

foreach($this -> array_r as $key => $name_replace)
{
$this -> content = str_replace($key, $name_replace, $this -> content);
}

echo $this -> content;

}
else
{
echo '<p> Неверный путь к шаблону </p>';
}
}
}
$template = new template();
?>
Пример использования
<?
$template -> set_cont('{replace}', 'Чем заменяем'); // Тут можешь что угодно писать! хоть {name} хоть %name%
$template -> out_content('dir/file.tpl'); // Адрес к шаблону
?>


9. delete (28.07.2010 / 17:06)
8. Nu3oN, спасибо большое smile а можиш дать в txt все эти файлы, просто боюсь когда скопирую с оперы мини код испортится, потом долго прейдется убирать лишний перевод строки.

10. Nu3oN (28.07.2010 / 17:11)
http://upwap.ru/969071

11. delete (28.07.2010 / 17:15)
10. Nu3oN, спасибо

Ваш положительный
голос за
пользователя Nu3oN
успешно оставлен!

всем участникам темы тож по плюсу (через 3 часа)

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

12. ramzes (28.07.2010 / 17:27)
без кеша не есть гуд, ну и гибкости не хватает...
я бы сказал один метод из класса реализован, остальное надо дописыватьsmile

13. delete (28.07.2010 / 17:46)
12. ramzes, кеширование страниц конечно будит, но в будущем, по мере надобности и загруженности сайта. Сам движок реализовываю на sqlite, кроме анкет/портфолио, там будит блог. Форума, ЗЦ, и т.д не будит. Если и будут обсуждения они реализованы в комментариях к блогам

14. Nu3oN (28.07.2010 / 17:48)
ramzes (28 Июля 2010 / 17:27)
без кеша не есть гуд, ну и гибкости не хватает...
я бы сказал один метод из класса реализован, остальное надо дописыватьsmile
Почему же... у меня все необходимое есть! вплоть до цикла smile
Но это кушает в общем много...
Вот поэтому я и решил заюзать smarty

15. delete (28.07.2010 / 17:52)
шаблонизатор будит использоваться для того что бы каждый раз не писать одини и теже кусочки xhtml кода, достаточно написать например одну форуму для ввода текста, чем записывать один и тот же код в каждом модуле, ну и в будущем у сайта будит и web версия, думаю написать новые html шаблоны болие разумно чем писать модули заново только ради нее.

16. ramzes (28.07.2010 / 21:28)
#13, я имел ввиду кеширование скомпилированных шаблонов.
а формы удобно классом отдельным делать.
Заяц, как раз смарти и жрет ресурсы, а свой ты можешь сделать пусть не такой навороченный но зато без лишнего хлама и гораздо легче

17. Nu3oN (28.07.2010 / 21:36)
ну да... смарти хорошо жрет, но мой больше...
это все надо сидеть и отлаживать, а я ша обленился... вот и решил юзать смарти

18. ramzes (28.07.2010 / 21:46)
#17 , 0.004 генерация страницы с шаблонизатором и 0.005 при компиляции.
выгоднее свой чем 101 лишний хвост.
//я вообще с кодом завязал

19. Nu3oN (28.07.2010 / 21:52)
ramzes (28 Июля 2010 / 21:46)
#17 , 0.004 генерация страницы с шаблонизатором и 0.005 при компиляции.
выгоднее свой чем 101 лишний хвост.
//я вообще с кодом завязал
ну чувствую и я скоро завяжу... и с всей разработкой...
так лень что либо делать...
---
а может напишу по тихому cms, выложу, и по мере хотения буду совершенствовать...

20. delete (29.07.2010 / 01:00)
всем спасибо кто отписался в теме, обещаные плюсы поставил каждому.

URL: https://visavi.net/topics/12017