[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор
bob marley
Доброго времени суток!
Можно ли к чему-нибудь придраться?

index.php

include("functions.php");
template("Заголовок", "Контент");

functions.php

<?php


function
host(){ /// определим доменное имя
$domains = parse_url($_SERVER['HTTP_HOST']);
return 'http://'.$domains['path'].'/';
}


function template($title, $content){ /// с генерируем шаблон
$t = file_get_contents(host()."template/index.tpl");
$n = array('{TITLE}', '{CONTENT}');
$k = array($title, $content);
echo str_replace($n,$k,$t);


}

index.tpl

<html>
<head>
<title>
{TITLE}</title>
</head>
<body>

{CONTENT}
</body>
</html>





Спустя 2 минуты, 58 секунд (26.01.2012 - 18:09) alex12060 написал(а):
bob marley

Можно ли придраться? Ну если тебе достаточно только замены title и content, то думаю вполне удачно. Но если думаешь расширяться - статика в массиве совершенно ни к чему smile.gif

Спустя 4 минуты, 6 секунд (26.01.2012 - 18:13) bob marley написал(а):
Что в массиве не к чему?Конечно расширяться..Я для примера указал!

Спустя 34 минуты, 29 секунд (26.01.2012 - 18:47) bob marley написал(а):
Алло,Народ,есть ошибки нет?
Просто попросили сделать,за не большую сумму,но все равно обидно будет,если мне предъявят что я херню сделал biggrin.gif

Спустя 10 минут, 20 секунд (26.01.2012 - 18:58) alex12060 написал(а):
Ну смотри, допустим, я устроил у себя хардкорный шаблон:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-type" content="text/html; charset={CHAR}" />
<title>
{TITLE}</title>

<meta
name="description" content="{DESCRIPTION}" />
<meta
name="keywords" content="{KEYWORDS}" />

<script
type="text/javascript" src="{SCRIPT_MAIN}"></script>
{ALL_OTHER_SCRIPTS}

<script type="text/javascript">
{SCRIPT}
</script>

<style
type="text/css">
{STYLE}
</style>
</head>
<body>

{HEADER}
{CONTENT}
<div id="upload_form">
{UPLOAD_FORM}
</div>
{FOOTER}
</body>
</html>



Попробуй это реализовать.

Спустя 3 минуты, 39 секунд (26.01.2012 - 19:01) bob marley написал(а):
alex12060
вообще без базара biggrin.gif

Спустя 6 минут, 9 секунд (26.01.2012 - 19:08) bob marley написал(а):
index.php

<?php include('functions.php');
$title = 'Заголовок';
$content = 'Контент';
$description = 'дескрипшен';
$keywords = 'ключи';
$script_main = 'скрипт какой-то';
$all_other_scripts = 'все скрипты';
$script = 'скрипт';
$style = 'стиль';
$header = 'бошка';
$upload_form = 'форма';
$footer = 'попка';
template($title, $content, $description, $keywords, $script_main, $all_other_scripts, $script, $style, $header, $upload_form, $footer);

functions.php


<?php


function
host(){ /// определим доменное имя
$url = explode('.', $_SERVER['HTTP_HOST']);
if(count($url) == '2'){$type = '2';} /// если домен первого уровня $type = 2
if(count($url) == '3'){$type = '1';} /// если домен третьего уровня $type = 1
if($type == '1'){ /// если $type = 1
return 'http://'.$url['0'].'.'.$url['1'].'.'.$url['2'].'/';
}
if($type == '2'){ /// если $type = 2
return 'http://'.$url['0'].'.'.$url['1'].'/';
}
}



function template($title, $content, $description, $keywords, $script_main, $all_other_scripts, $script, $style, $header, $upload_form, $footer){ /// с генерируем шаблон
$t = file_get_contents(host()."template/index.tpl");
$n = array('{TITLE}', '{CONTENT}', '{DESCRIPTION}', '{KEYWORDS}', '{SCRIPT_MAIN}', '{ALL_OTHER_SCRIPTS}', '{SCRIPT}', '{STYLE}', '{HEADER}', '{UPLOAD_FORM}', '{FOOTER}');
$k = array($title, $content, $description, $keywords, $script_main, $all_other_scripts, $script, $style, $header, $upload_form, $footer);
echo str_replace($n,$k,$t);


}

Спустя 2 минуты, 34 секунды (26.01.2012 - 19:10) bob marley написал(а):
В переменные напиши,что-нибудь нормальное!а то код сюда кинул,отправил,а русские буквы на эту херню переделались сами..

кстати на счет скрипта,если скажешь что вдруг там большой код надо в переменные загонять,то можно создавать в папку contents к примеру файлы с данными и вытаскивать их с помощью file_get_contents()

Спустя 15 минут, 18 секунд (26.01.2012 - 19:25) alex12060 написал(а):
bob marley

Требовалось это и доказать. А если я еще захочу, ну, например, 5-7 штук? Код получится...мм...огромным, перегруженным и так далее.

А вот если я хочу для разных шаблонов разные теги?

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

У тебя все привязано, нет динамики. Подумай над этим.

Все гораздо проще, чем можно предполагать.

Просто проверь такую "блок схему"

Если в строке встречается { ... }, то значит, это у нас шаблон.

... - это название поля.

Ну и думаю, если пошаманить с ассоциативным массивом, то можно добиться нужной инамики, и при расширени приложения, придется лишь добавлять в массив ключ с значением.

Хотя это и не идеальное решение, но оно в разы лучше твоего smile.gif

Спустя 3 минуты, 29 секунд (26.01.2012 - 19:29) bob marley написал(а):
слушай..спс за идею huh.gif
сейчас сделаю..это и кода меньше займет и по прикольней будет:)..
Стоп..вот определил я название между {} например NAMES ..А куда заносить информацию в NAMES..тоесть как будет вообще работать..как вызывать функцию..все..я в замешательстве!

Спустя 1 минута, 16 секунд (26.01.2012 - 19:30) bob marley написал(а):
все таки придется массив создавать..

Спустя 7 минут, 1 секунда (26.01.2012 - 19:37) Winston написал(а):
Я так и не понял зачем этот бессмысленный код? :blink:
Цитата (bob marley @ 26.01.2012 - 18:08)
$url = explode('.', $_SERVER['HTTP_HOST']);
if(count($url) == '2'){$type = '2';} /// если домен первого уровня $type = 2
if(count($url) == '3'){$type = '1';} /// если домен третьего уровня $type = 1
if($type == '1'){ /// если $type = 1
return 'http://'.$url['0'].'.'.$url['1'].'.'.$url['2'].'/';
}
if($type == '2'){  /// если $type = 2
return 'http://'.$url['0'].'.'.$url['1'].'/';
}
}

Что мешает написать так?
print_r(parse_url($_SERVER['HTTP_HOST']));

Или вместо parse_url написать pathinfo ?

Спустя 16 минут, 45 секунд (26.01.2012 - 19:54) alex12060 написал(а):
Все зависит от того, как хранится и где у тебя информация.

Ну в принципе, я тебе скзал, что нужен ассоциативный массив для таких целей.

Спустя 1 час, 13 минут, 45 секунд (26.01.2012 - 21:08) bob marley написал(а):
Winston
делаю как знаю.
возьму на заметку
parse_url()

Спустя 20 минут, 8 секунд (26.01.2012 - 21:28) bob marley написал(а):
Winston
Цитата (bob marley @ 26.01.2012 - 15:06)
function host(){ /// определим доменное имя
$domains = parse_url($_SERVER['HTTP_HOST']);
return 'http://'.$domains['path'].'/';
}

Так будет верно?

Спустя 5 минут, 36 секунд (26.01.2012 - 21:33) bob marley написал(а):
Теперь займемся template()..
Я думаю может создается с начала(до выполнения функции массив),
а потом сделать чтобы он разбивался на ключи и содержание и str_replace();
По сути получится тоже мне кажется..Я если честно не понимаю как можно по другому..Не могу сфантазировать..придумать так сказать!

Спустя 2 часа, 58 минут, 57 секунд (27.01.2012 - 00:32) Winston написал(а):
Цитата (bob marley @ 26.01.2012 - 20:28)
Так будет верно?

Почему просто не написать?
return 'http://'.$_SERVER['HTTP_HOST'].'/';


А насчет шаблонизатора.., можно как-то так сделать
Свернутый текст
function template($blocks, $replacement, $template = 'index')
{
$template = host() . 'template/' . $template . '.tpl'; // Формируем путь к файлу
if(file_exists($template)) // Проверяем есть ли такой файл
{
$page = file_get_contents($template); // Получаем содержимое
return strtr($page, $blocks, $replacement); // Заменяем блоки на текст
}
else
return
false;
}

$content = 'контент';
$text = 'текст';

$blocks = array( // Массив блоков
'{CONTENT}', '{TEXT}'
);

$replacement = array( // Массив замен
$content, $text
);

echo template($blocks, $replacement);

Спустя 7 часов, 58 минут, 28 секунд (27.01.2012 - 08:31) 45king написал(а):
еще цикличные блоки

Спустя 8 часов, 40 минут, 4 секунды (27.01.2012 - 17:11) bob marley написал(а):
http://phpforum.su/index.php?act=ST&f=11&t=56714 - вот что получилось!


_____________
伊戈尔
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.