[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с шаблонизатором.
Tokugava
Написал небольшой шаблонизатор по уроку в сети.
Вот его код:
Свернутый текст
<?php
###############################################
###Устанавливаем кодировку и уровень ошибок ###

header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
class content
{

var $vars = array();
var $content;

function set($name, $val) {
$this->vars[$name] = $val;
}

function out_content($tpl) {
$this->content = file_get_contents($tpl);

foreach($this->vars as $key => $val)
{
$this->content = str_replace($key, $val, $this->content);
}

echo $this->content;
}

}


$content = new content();

?>

Он прекрасно работает, но возникла задача которая мне не по силам.

Объясню подробнее о том что пишу чтоб все было понятно.

Пишу сайт который состоит из модулей и .tpl файлов шаблона которые эти модули обрабатывают и показывают в браузере.

Есть главный модуль, main.php в нем из шаблона только
<title>
Который лежит в БД МуSql.

Но встала задача подключить в то что уже есть в модуле main.php (дизайн главной страницы сайта с таблицой) Подключить модуль вывода коротких новостей.

Все файлы раскиданы по папкам, тоесть модули в папке MOD, .tpl файлы в папке templates

Например мод-main.php имеет шаблон main.tpl

Свернутый текст
Вот код с помощью которого я пытался подключить модуль в модуль.
$result = mysqlQuery ('SELECT * FROM st_settings');
$myrow = mysql_fetch_assoc($result);

$content->set('{header}', $myrow['title']);
$content->set('{short_story}', include_once('./shtorm/mod/short_story/short_story.php'));


Но почему то мод short_story.php... а вернее его шаблон short_story.tpl отображается в верхней части страницы а не в теле main.tpl

Вот исходный код:
<table align="center" width="700" border="1" cellspacing="0" cellpadding="0">
<tr>
<td
bgcolor="#CCCCCC" height="60"><div align="center">1| Тестовая новость</div></td>
</tr>
<tr>
<td
bgcolor="#DFEFFF" height="100%"><div align="center">Тестовая новость вывод short story</div></td>
</tr>
<tr>
<td
bgcolor="#CCCCCC" height="20"><div align="center">Тестовая новость</div></td>
</tr>
</table>


ВОТ ПОШЛО ТЕЛО MAIN.TPL

<!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=utf-8">
<title>
Тестовый сайт</title>
</head>
<body>
<table
align="center" width="1000" border="0" cellspacing="0" cellpadding="0">
<tr>
<td
height="120" background="/templates/Default/img/header.gif">

ВОТ ТУТ ДОЛЖНА БЫТЬ ТАБЛИЧКА

</td>
</tr>
<tr>
<td>
1</td>
</tr>
<tr>
<td
height="60" background="/templates/Default/img/footer.gif"> </td>
</tr>
</table>



Помогите разобратся, может я что то не так подключаю? Самое интересное что данные из БД мод short_story получает и прекрасно отображает... а вот сам отображатся там где надо не хочет sad.gif




Спустя 2 часа, 20 минут, 22 секунды (19.08.2010 - 19:19) twin написал(а):
echo $this->content;
вот этого лучше не делать в функциях и классах. Иначе вывод будет не там, где указано, а там, где вызов функции. Лучше значение возвращать, а переменную выводить там, где нужно.

Спустя 13 часов, 38 минут, 52 секунды (20.08.2010 - 08:57) Tokugava написал(а):
Цитата (twin @ 19.08.2010 - 16:19)
echo $this->content;
вот этого лучше не делать в функциях и классах. Иначе вывод будет не там, где указано, а там, где вызов функции. Лучше значение возвращать, а переменную выводить там, где нужно.

Это как blink.gif

Спустя 5 минут, 36 секунд (20.08.2010 - 09:03) Basili4 написал(а):
Tokugava
примерно так

function sdfsda()
{
return this->cintent
}


$a=sdfsda();

а $a выведешь где тебе нужно

Спустя 19 минут, 34 секунды (20.08.2010 - 09:23) Tokugava написал(а):
Спасибо! А как (и вообще возможно ли), вместо переменных, сделать константами и сохранить в папке модуля шаблона?...

Ну тоесть... допустим есть постоянные каталоги и файлы... например:

Каталог theme - в котором лежать шаблоны сайта.

Как этот каталог запихать в константу и вызывать там где надо тегом {theme}?
чтоб не прописывать путь типо:
('./theme/myshablon/main.tpl')

а чтоб ссылка выглядела
{theme}/main.tpl


Подскажите пожалуста, можно это имея шаблонизатор как у меня (в первом посте код), такую штуку реализовать и примерно как?

Соображения у мну были... типо:
define('{THEME}', 'http://'. $_SERVER['HTTP_HOST'] .'/')

Но походу я не туда забрел...

Спустя 1 час, 16 минут, 56 секунд (20.08.2010 - 10:39) Tokugava написал(а):
Помогите sad.gif я уже везь мозк себе сломал. Неужели никак нельзя так сделать rolleyes.gif unsure.gif

Спустя 10 минут, 5 секунд (20.08.2010 - 10:50) linker написал(а):
define('MYCONST', 'sdsdsd'); 
$val = 'MYCONST';
$content = str_replace($key, constant($val), $content);

Спустя 1 час, 19 минут, 44 секунды (20.08.2010 - 12:09) Tokugava написал(а):
Цитата (linker @ 20.08.2010 - 07:50)
define('MYCONST', 'sdsdsd'); 
$val = 'MYCONST';
$content = str_replace($key, constant($val), $content);

И что, вот такой константой можно определить папку? blink.gif


_____________
人類の敵
Чем умнее человек, тем легче он признает себя дураком!
Быстрый ответ:

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