Эта тема на forum.dklab.ru


Rendol: Разделение PHP & HTML
Вот узнал о функции обработки буфера :) И сразу написал вот такую вещь:


<?
/**
* Модуль для обработки тегов помещенных в квадратные скобки("[TAG]")
* Используется в роли шаблонизатора :)
*
* @author Sapegin Igor
* @charset ANSI
* @filename RTEMPLATE.php
* @version 1.2
*/
function RTEMPLATE_repleaceHTML($STRoka){
// Поиск тегов
while(1==1){
if(empty($keys)){
$keys[] = strpos($STRoka, '[');
$STR = $STRoka;
}
$STR = substr($STR, strpos($STR, '[') + 1);
if(strpos($STR, '[')){
$keys[] = strpos($STR, '[') + 1;
}
else break;
}
// обработка найденных тегов
foreach($keys as $v){
@$num += $v;
$STR = substr($STRoka, $num + 1, strpos(substr($STRoka, $num), ']')-1);
if(substr($STR, 0, 1) != '/')
if(strpos($STRoka, "[/".$STR."]"))
$tag[] = $STR;
}
// Замена {TAG} на содержимое * ([TAG]*[/TAG])
for($i=count($tag); $i>=0; $i--){
$S = "[".$tag[$i]."]";
$E = substr($S, 0, 1)."/".substr($S, 1);
$start = strpos($STRoka, $S) + strlen($S);
$end = strpos($STRoka, $E) - $start;
$block = substr($STRoka, $start, $end);
$STRoka = ereg_replace("{".$tag[$i]."}", $block, $STRoka);
}
// Чистка
for($i=count($tag); $i>=0; $i--)
$STRoka = ereg_replace("(\[$tag[$i]\])+[^*]+(\[\/$tag[$i]])", "", $STRoka);
return $STRoka;
}
ob_start("RTEMPLATE_repleaceHTML");
?>

Пример использования:

<?
include "RTEMPLATE.php";
php код
?>{TAG}<?
$new = 'НОВОСТИ';
php код
?>

[TAG]
<div>Содержание: <?=$new?></div>
<?for($i=1; $i<5; $i++){?>
Новость <?=$i?>
<?=$news[$i]?>
<?}?>
[/TAG]


Файл с тегами можно подключать отдельным файлом...
Проблема заключается в том что появляются косяки при обработки звездочки (*)

И интересно ваше мнение о идее разделения...
Важны все комментарии, хотелось бы услышать все предложения о улучшении :)

З.Ы. я новичок ;)
Мое первое сообщение! :)
Rendol:
Блин! Извиняюсь, но я уже решил проблему :)
Вот исправленный вариант...


<?
/**
* Модуль для обработки тегов помещенных в квадратные скобки("[TAG]")
* Используется в роли шаблонизатора :)
*
* @author Sapegin Igor
* @charset ANSI
* @filename RTEMPLATE.php
* @version 1.3
*/
function RTEMPLATE_repleaceHTML($STRoka){
// Поиск тегов
while(1==1){
if(empty($keys)){
$keys[] = strpos($STRoka, '[');
$STR = $STRoka;
}
$STR = substr($STR, strpos($STR, '[') + 1);
if(strpos($STR, '[')!==false){
$keys[] = strpos($STR, '[') + 1;
}
else break;
}
// обработка найденных тегов
foreach($keys as $v){
@$num += $v;
$STR = substr($STRoka, $num + 1, strpos(substr($STRoka, $num), ']')-1);
if(substr($STR, 0, 1) != '/'){
if(strpos($STRoka, "/".$STR."")){
$tag[] = $STR;
}
}
}
// Замена {TAG} на содержимое * ([TAG]*[/TAG])
for($i=count($tag)-1; $i>=0; $i--){
if(strpos($STRoka, "/".$tag[$i]."")){
$S = "[".$tag[$i]."]";
$E = substr($S, 0, 1)."/".substr($S, 1);
$start = strpos($STRoka, $S) + strlen($S);
$end = strpos($STRoka, $E) - $start;
$block = substr($STRoka, $start, $end);
$STRoka = ereg_replace("{".$tag[$i]."}", $block, $STRoka);
}
}
// Чистка
for($i=count($tag)-1; $i>=0; $i--)
$STRoka = ereg_replace("(\[$tag[$i])(.*)(/$tag[$i]\])", "", $STRoka);
return $STRoka;
}
ob_start("RTEMPLATE_repleaceHTML");
?>


Оставьте свое мнение о идее :)
Заранее спасибо!

Эта тема на forum.dklab.ru