X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> Шаблонизатор PHP
gaaarfild
gaaarfild
Topic Starter сообщение 28.4.2009, 1:16; Ответить: gaaarfild
Сообщение #1


Вот давно думал и никак не могу понять, как сделать шаблонизатор. Тоесть например есть файл HTML вида

<html>
<head>
$header
$meta
</head>
<body>
<div>$head</div>
<div>$content</div>
<div>$footer</div>
</body>
</html>


И каким образом сформированные данные поместить в этот шаблон?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 28.4.2009, 2:02; Ответить: ZiTosS
Сообщение #2


Зачем в шаблон помещать данные, нам легче из него эти данные забирать. Но нужно учесть, чтобы шаблонные вставки не перекликались с остальным текстом файла(тем же кодом HTML)
Для того чтобы вытащить нужный нам шаблон можно использовать file_get_contents(). Затем нам нужно пройтись по возвращенной строке(файлу) и заменить шаблонные вставки на их эквиваленты. Пример ниже:

document.tpl
<html>
<head>
</head>
<body>
Вставка 1: <%vstavka_1%><br>
Вставка 2: <%vstavka_2%><br>
Вставка 3: <%vstavka_3%><br>
.........................................................
Вставка N: <%vstavka_N%><br>
</body>
</html>


functions.php
[php]// простейшая функция шаблонизации
function parseTpl($file, $macros) {
$info = file_get_contents($file);
foreach($macros as $key=>$value)
{
$info = str_replace("<%$key%>", $value, $info);
}
$info = ereg_replace("<%[a-zA-Z0-9_-]*%>", "", $info);
return $info;
}[/php]

Файл, который всё собирает:
Вариант без БД without_db.php
[php]include_once "functions.php";

$html = "";
$parse = array(
"vstavka_1" => "Текст1",
"vstavka_2" => "Текст2",
"vstavka_3" => "Текст3",
....................................
"vstavka_N" => "ТекстN",
);

// вызываем обработчик шаблона
$html = parseTpl("document.tpl", $parse);

//можем продолжать собирать дальше... другие шаблоны присоединять и т.д.

// печатаем собранный шаблон
echo $html;[/php]

Вариант c БД with_db.php
Тогда структура таблицы: table(vstavka_1,vstavka_2,vstavka_3,...,vstavka_N);
[php]include_once "mysql.php";// подключение к БД
include_once "functions.php";

$html = "";

$resource = mysql_query([query]);
while($array = mysql_fetch_array($resource))
{
$html .= parseTpl("document.tpl", $array);
}

//можем продолжать собирать дальше... другие шаблоны присоединять и т.д.

// печатаем собранный шаблон
echo $html;[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Dengere_Ash
Dengere_Ash
сообщение 29.4.2009, 13:08; Ответить: Dengere_Ash
Сообщение #3


gaaarfild, думаю, что проше будет написать php код со вставками HTML'a.

[php]<?php
require "./head.html";
$meta = "<meta http-equiv='content-type' type='text/html, charset=windows-1251' />";
$content = "bla-bla-bla";
$footer = require("./footer.html");
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 29.4.2009, 16:12; Ответить: ZiTosS
Сообщение #4


Dengere_Ash, зря вы так... Я не думаю, что gaaarfild не знает как включать файлы в исполняемые. Он хотел именно понять работу шаблонизаторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 19.10.2009, 4:34; Ответить: gaaarfild
Сообщение #5


Dengere_Ash
ZiToss прав. Этот способ-то я знаю.

Кстати, возник еще один вопрос. В этим шаблонизатором небольшая проблема при использовании AJAX. Когда нужно обновить какую-то информацию в поле с помощью него, а именно, отобразить что либо, он отображает не только эти данные, но и весь шаблон. Тоесть есть например Блок <div></div> В него надо написать после срабатывания скрипта AJAX - Успешно. Но в него отображается весь шаблон полностью а не только надпись "Успешно".

(Dengere_Ash @ 29.4.2009, 13:08) *
gaaarfild, думаю, что проше будет написать php код со вставками HTML'a.

[php]$footer = require("./footer.html");[/php]

Кстати, конструкция неправильна. Он не загрузит файл в переменную а сразу присоединит его к странице. =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 19.10.2009, 14:12; Ответить: sc2r2bey
Сообщение #6


вот натолкнулся, что по этому поводу скажите?
[php]module.php
--------------
<?
include('config.php');

$data = $db->query('SELECT * FROM guestbook')->asArray();

include('template.html');
?>[/php]


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 21.10.2009, 12:06; Ответить: gaaarfild
Сообщение #7


А что это? =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 21.10.2009, 16:41; Ответить: ZiTosS
Сообщение #8


gaaarfild,
Кстати, возник еще один вопрос. C этим шаблонизатором небольшая проблема при использовании AJAX. Когда нужно обновить какую-то информацию в поле с помощью него, а именно, отобразить что либо, он отображает не только эти данные, но и весь шаблон. То есть есть например Блок <div></div> В него надо написать после срабатывания скрипта AJAX - Успешно. Но в него отображается весь шаблон полностью а не только надпись "Успешно".

Хех... Ну ты подумай сам, что шаблон это просто начальное формирование контента и за последующие вставки JavaScript и Ajax он не отвечает.
Вообще я всегда делаю так: Если страница формируется на начальном этапе - то применимы шаблоны и шаблонизатор. Если мы хотим проитзвести какие либо действия с помощью Ajax, мы лмбо просто выводом на экран формируем контент, либо у нас должен быть отдельный шаблон, который выводит то что нам нужно.

А у тебя... К примеру, ты загрузил низ страницы и меняешь в нём с помощью Ajax, зачем же заменять целую часть шаблона если тебе ,к примеру, в div нужно вернуть успешность выполнения или полученный контент.
Я думаю концепция подхода у тебя не правильна. Чаще всего если Ajax-скрипт возвращает что-то, что должно изменить страницу, для этых действий должен быть создан специальный контейнер и содержимое должно вставляться в него.

sc2r2bey,
вот натолкнулся, что по этому поводу скажите?

module.php
--------------
[php]<?
include('config.php');

$data = $db->query('SELECT * FROM guestbook')->asArray();

include('template.html');
?>[/php]

Это просто набор символов... И ничего больше сказать нельзя... Что тут реализуется?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 21.10.2009, 23:10; Ответить: sc2r2bey
Сообщение #9


это я наткнулся на тему по поводу самописных cms там был поднят вопрос модульности, мог вот код, а остальное от лукавого :)


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 22.10.2009, 12:25; Ответить: ZiTosS
Сообщение #10


sc2r2bey, да уж это такая супер-пупер модульность, что у меня аж прям слов нету...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3397 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1241 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44903 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1889 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3402 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 19.4.2024, 7:03
Дизайн