Щаблонизатор или unclude.

niko42

Новичок
Здравствуйте, уважаемые дамы и господа.

Сегодня на повестка дня у меня возник такой вопрос, над которым я долго размышлял и не к какому выводу не пришел!

Приведу примеры кода:

Пример 1:
header.html
PHP:
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Исторический турнир</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="contenir">
    <div id="header"><h1>Байки из склепа</h1></div>
    <div id="sidebar">
        <p><a href="b_all.html">Все байки</a></p>
        <p><a href="b_author.html">Байки по автору</a></p>
        <p><a href="b_theme.html">Байки по теме</a></p>
    </div>
    <div id="content">
footer.html
PHP:
</div>
<div id="footer">&copy; Влад Мержевич</div>
</div>
</body>
</html>
config.php
PHP:
session_start();
set_include_path(get_include_path() .";/home/test2/www/");
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($className){
    require_once "class/{$className}.class.php";
}
define("PATH","http://".$_SERVER['SERVER_NAME']);
define("SERVER_URL",$_SERVER['DOCUMENT_ROOT']);
index.php
PHP:
<?php
require_once '/config/config.php';
header('Content-Type: text/html;charset=UTF-8');

require_once("/home/header.html");
$db = new DBAcsess();
?>

<div>
<a href="reg.php">Переход на другую ссылку</a>
<ul>
 <li>
     <?php $db->setInsert(); ?>
 </li>
</ul>
</div>

<?php
require_once("/home/footer.html");
?>
reg.php
PHP:
<?php
require_once '/config/config.php';
header('Content-Type: text/html;charset=UTF-8');

require_once("/home/header.html");
$db = new DBAcsess();
?>

<div>
<a href="tumboumba.php">Переход на другую ссылку</a>
Тут какой-нибудь контект и оформление с выполнение php кода.
</div>

<?php
require_once("/home/footer.html");
?>


Пример 2:
header.html
PHP:
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>{TITLE}</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="contenir">
    <div id="header"><h1>Байки из склепа</h1></div>
    <div id="sidebar">
       {MENU}
    </div>
    <div id="content">
home.html
PHP:
<div>
{CONTENT}
</div>
footer.html
PHP:
</div>
<div id="footer">&copy;{FOOTER}</div>
</div>
</body>
</html>
config.php
PHP:
session_start();
set_include_path(get_include_path() .";/home/test2/www/");
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($className){
    require_once "class/{$className}.class.php";
}
define("PATH","http://".$_SERVER['SERVER_NAME']);
define("SERVER_URL",$_SERVER['DOCUMENT_ROOT']);
tmp.class.php
PHP:
<?php
class tmp {
public function templ($key, $content, $file){
        $tmp = file_get_contents(PATH."/temp/".$file);
        $tmp = str_replace($key,$content,$tmp);
return $tmp;
}
}
?>
reg.php
PHP:
require_once '/config/config.php';
header('Content-Type: text/html;charset=UTF-8');

$content = "Всем всем привет!!!";

$tmp = new tmp();
$tmp->templ('{TITLE}', $content, 'header.html');
$tmp->templ('{CONTENT}', $content, 'home.html');
$tmp->templ('{FOOTER}', $content, 'footer.html');


Вот два способа реализации подключения html файлов.

Не могу понять, чем так хуже unclude от шаблонизатора tample?
 

AmdY

Пью пиво
Команда форума
niko42
проблема в том, что ты привёл два разных куска, если во втором ты сделал правильно и сразу сакоммулировал данные, а затем вызвал шаблоны.
А вот в первом варианте в index.php всё смешал.

вот только во втором варианте ты зделал бесмысленную замену {TITLE} на нормальный php код <?=$title?>, тем самым ты ограничил свой шаблонизатор и лишил себя логики отображения в шаблоне.
 

niko42

Новичок
config.php
PHP:
<?php
session_start();
header('Content-Type: text/html;charset=UTF-8');
set_include_path(get_include_path() .";/home/test2/www/");
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($className){
    require_once "class/{$className}.class.php";
}
define("PATH","http://".$_SERVER['SERVER_NAME']);
define("SERVER_URL",$_SERVER['DOCUMENT_ROOT']);

class tmp
{
    public function templ($key, $content, $file){
        $tmp = file_get_contents(PATH."/home/".$file);
        $tmp = str_replace($key, $content, $tmp);
        return $tmp;
    }
}

require_once("/home/header.html");

$tmp = new tmp();

print $tmp->templ('{CONTENT}', $content, "home.html");

require_once("/home/footer.html");
?>
reg.php
PHP:
<?php
require_once("config/config.php");
ob_start();

echo "тумбо юмба, выведись на экран!";

$content = ob_get_contents();
ob_get_clean();
?>
Ситуация в том, что $content = ob_get_contents(); - не выводится на экран, да и ошибок ни каких не выдает.
 

ksnk

прохожий
Какой интересный конфиг, прям и швец и жнец, и сессию стартует и выводит что-то на экран. Не смущает, что он выводит на экран переменную $content еще до реального ее определения в программе?
 

niko42

Новичок
кстати, по поводу
PHP:
require_once '/config/config.php';
- любителям явы сюда: http://www.phpfaq.ru/paths - учить азы компьютерной грамотности
ну скобки забыл поставить, зачем так придераться та... я ведь не через среду разработки писал и скпировал тут в сообщение, а сразу в сообщении написал -=))

Не понимаю, откуда такая мания делить главный шаблон на хидер и футер. Его же так редактировать неудобно.

http://www.phpfaq.ru/tpl#example
дядя - я пока ни чего не пишу висмого, а разбираю php по полочка, что да как.
За ссылку спасибо=))


Какой интересный конфиг, прям и швец и жнец, и сессию стартует и выводит что-то на экран. Не смущает, что он выводит на экран переменную $content еще до реального ее определения в программе?
да, как бы я подключал конфиг после переменной $content и до метода ob_get_clean(); и выводился пустота.
Но ради прикола, подключил фаил после ob_get_clean(); и воаля, заработало - но как-то это не логично не фига!
PHP:
<?php
ob_start();
echo "тумбо юмба, выведись на экран!";
$content = ob_get_contents();
ob_get_clean();
require_once("config/config.php");
?>
PHP:
<?php
session_start();
header('Content-Type: text/html;charset=UTF-8');
set_include_path(get_include_path() .";/home/test2/www/");
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($className){
    require_once "class/{$className}.class.php";
}
define("PATH","http://".$_SERVER['SERVER_NAME']);
define("SERVER_URL",$_SERVER['DOCUMENT_ROOT']);
public function templ($key, $content, $file){
    $tmp = file_get_contents(PATH."/home/".$file);
    $tmp = str_replace($key, $content, $tmp);
    return $tmp;
}
require_once("/home/header.html");

$tmp = new tmp();
print $tmp->templ('{CONTENT}', $content, "home.html");

require_once("/home/footer.html");
?>
 

Фанат

oncle terrible
Команда форума
скобки здесь не нужны.
а вот работать этот инлюд не будет.
ссылка там тоже не для мебели написана
 

niko42

Новичок
скобки здесь не нужны.
а вот работать этот инлюд не будет.
ссылка там тоже не для мебели написана
Да я уже понял. Исправил и инклюдю в конце контета.
ТОлько один момент, когда я делал в таком порядке:
PHP:
$content = ob_get_contents();
require_once("config/config.php");
ob_get_clean();
то у меня ни чего не вывелось. Почему?=)
аааа ёпт, если я подключаю файл до выключения буфера, то он тоже попадает в буфер и там уже косяк.....=)
 

niko42

Новичок
Пожалуйста, готовый шаблонизатор:

index.html
PHP:
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>{TITLE}</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="contenir">
    <div id="header"><h1>Байки из склепа</h1></div>
    <div id="sidebar">
        <p><a href="index.php">Все байки</a></p>
        <a href="reg.php">Другия байки</a>
    </div>
    <div id="content">
        {CONTENT}
    </div>
    <div id="footer">&copy; кто-то</div>
</div>
</body>
</html>
config.php
PHP:
<?php
session_start();
header('Content-Type: text/html;charset=UTF-8');
set_include_path(get_include_path() .";/home/test2/www/");
error_reporting(E_ALL & ~E_NOTICE);
function __autoload($className){
    require_once "class/{$className}.class.php";
}
define("PATH","http://".$_SERVER['SERVER_NAME']);
define("SERVER_URL",$_SERVER['DOCUMENT_ROOT']);
public function templ($key, $content, $file){
        $tmp = file_get_contents(PATH."/home/".$file);
        $tmp = str_replace($key, $content, $tmp);
        return $tmp;
    }

$tmp = new tmp();
print $tmp->templ('{CONTENT}', $content, "index.html");
?>
index.php
PHP:
<?php
ob_start();
echo <<<EOT
 Здесь пишем контент
EOT;
$content = ob_get_contents();
ob_get_clean();
require_once("config/config.php");
?>
Красотень та какая эхх..
 

Фанат

oncle terrible
Команда форума
а вот и не угадал
"Здесь пишем контент" тоже должно выводиться через шаблонизатор. В первую очередь через шаблонизатор.
 

niko42

Новичок
а вот и не угадал
"Здесь пишем контент" тоже должно выводиться через шаблонизатор. В первую очередь через шаблонизатор.
Я Вас не понял если честно, мб Вы имеет введу это?
PHP:
public function templ($key, $content, $file){
        $tmp = file_get_contents(PATH."/home/".$file);
        $tmp = str_replace($key, $content, $tmp);
        return $tmp;
    }
Контент тоже по шаблону выводится.
 

Фанат

oncle terrible
Команда форума
Контент тоже по шаблону выводится.
Это не шаблон, а фуфло.
Чем тебе не "путь истинный"?
Ты по ссылке ходил?
Шаблон вывода контента видел?
и как ты то же самое сделаешь своими реплейсами?
 

niko42

Новичок
Помимо Java, ты ещё и русский хорошо знаешь, умница.
Респект - Вы знаете русский язык, я нет и не стыжусь этим. Я в другом силен и горжусь этим!

Это не шаблон, а фуфло.
Чем тебе не "путь истинный"?
Ты по ссылке ходил?
Шаблон вывода контента видел?
и как ты то же самое сделаешь своими реплейсами?
Вы меня извините, но я Вас не понимаю, что Вы хотите до меня донести.
Я так понял, Вы имеете введу: Я только подключил нужные фалйы. А контент, как будешь воводить?
Это что ли?
 

Фанат

oncle terrible
Команда форума
допустим, тебе в шаблоне надо вывести список новостей.
как ты это будешь делать?
 

niko42

Новичок
PHP:
<?php
require_once("config/config.php");
ob_start();
$c = 0;
?>
    <ul>
        <?php
            for($i=0; $i <10; $i++){
                print "<li>".$c."</li>";
            }
        ?>
    </ul>
<?php
$content = ob_get_contents();
ob_get_clean();
$tmp = new tmp();
print $tmp->templ('{CONTENT}', $content, "home.html");
?>
как-то так=))
 

Фанат

oncle terrible
Команда форума
это какой-то бред.
и сам код бессмысленный, и свистелки вокруг него - тоже.
зачем здесь конфиг?
для чего буфферинг?
почему нельзя сразу вывести, безо всякого перекладывания данных из переменной в переменную? ты сайт делаешь или в куличики играешься в песочке?

ты ходил по ссылке? видел, как там сделано?
почему там не нужен ни буфферинг, ни замены, ни идиотские метки типа {CONTENT}?
 
Сверху