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

Печать RSS
53

D
Автор
Малиновые штаны
0
Возникла задача, написать систему шаблонизатора для сайта, есть конечно и готовые, типа смарту, но он слишком большой и сложный. Поэтому написал маленький скриптик, взятый из уроков по 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, макросы вида %текст% , как бы его посоветуете переделать для макросов вида {текст} ну и сама реалезация, не очень убогая?

2000 лет д.н.э.
0
убрать file и implode, заменить на file_get_contents,
ereg заменить на preg
И

Оранжевые штаны
0
ereg не лучшие решение. В версии пхп выше 5.3.Х его нету
А это переделать ereg ("%.*%",$path) на ereg ("{.*}",$path)
D
Автор
Малиновые штаны
0
ну да, это старый код еще 2007 года, но нашел такой, мне главное что бы не очень большой, ведь задача конкретная smile навороты особые и оптимизация кода не нужна
И

Оранжевые штаны
0
Ну ты все % замени на {}
Хотя зря насчет оптимизации. А так тебе решать)
D
Автор
Малиновые штаны
0
функции я то поменяю на болие прогрессивные, а как вам сама реализация, не сильно убогая в плане современых методов написания шаблонизаторов?
D
Автор
Малиновые штаны
0
заменил на {},

<?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 но эт потом разбирусь, что то с регулярными выражениями не так.
N

Эцилопп сией тентуры
0
Вот держи! сам раньше ерундой страдал, и с тем что сейчас на смарти перешел!
Если нужно могу еще конструкцию 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'); // Адрес к шаблону
?>
D
Автор
Малиновые штаны
0
8. Nu3oN, спасибо большое smile а можиш дать в txt все эти файлы, просто боюсь когда скопирую с оперы мини код испортится, потом долго прейдется убирать лишний перевод строки.
N

Эцилопп сией тентуры
0
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск