шаблонизатор
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 года, но нашел такой, мне главное что бы не очень большой, ведь задача конкретная
навороты особые и оптимизация кода не нужна
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;}
?>
правда он почему то не обрежает {} при выводе
так и отображается {Текст}, данные заменяет а фигурные скобки не уберает
но эт потом разбирусь, что то с регулярными выражениями не так.
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, спасибо большое
а можиш дать в 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)
без кеша не есть гуд, ну и гибкости не хватает...
я бы сказал один метод из класса реализован, остальное надо дописывать
13.
delete (28.07.2010 / 17:46)
12.
ramzes, кеширование страниц конечно будит, но в будущем, по мере надобности и загруженности сайта. Сам движок реализовываю на sqlite, кроме анкет/портфолио, там будит блог. Форума, ЗЦ, и т.д не будит. Если и будут обсуждения они реализованы в комментариях к блогам
14.
Nu3oN (28.07.2010 / 17:48)
ramzes (28 Июля 2010 / 17:27)
без кеша не есть гуд, ну и гибкости не хватает...
я бы сказал один метод из класса реализован, остальное надо дописывать
Почему же... у меня все необходимое есть! вплоть до цикла
Но это кушает в общем много...
Вот поэтому я и решил заюзать 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