Sardonix
Новичок
Проблема с обработкой шаблона: некорректная замена псевдотега.
Исходное:
========
1) Имеется файл index.view, содержащий шаблон HTML-документа.
В шаблоне (например, где-нибудь в ячейке таблицы), находится псевдотег ###content###.
2)Имеется файл /modules/content/content_controller.php, в котором создается экземпляр класса-обработчика контента. Метод этого экземпляра выгружает страницу по умолчанию.
Описания класса:
-----------------------
Файл /modules/content/content_controller.php:
---------------------------------------------
3) Имеется файл index.php.
В нем создан экземпляр объекта-обработчика шаблона. Метод этого экземпляра читает шаблон, и, если находит псевдотег ###content###, заменяет его на функцию подключения файла /modules/content/content_controller.php.
Описание класса:
-----------------------
class patmaster
{
//СВОЙСТВА КЛАССА
//МЕТОДЫ КЛАССА
function __construct($pattern_dir, $module_dir)
{
$source_view=fopen($pattern_name=$_SERVER["DOCUMENT_ROOT"].$pattern_dir."index.view", "rt");
$lines_view=explode("\n", fread($source_view, filesize($pattern_name)));
$path=$_SERVER["DOCUMENT_ROOT"].$module_dir."content_controller.php";
foreach ($lines_view as $current_line)
{
$a=str_replace("###content###", "<?php include_once(\"$path\"); ?>", $current_line);
print $a."<br>";
}
}
}
Файл index.php
--------------------
Проблема:
========
По идее, все должно происходить так: шаблон читается построчно, если строка шаблона не имеет псевдотега - она не изменяется, если строка имеет псевдотег, он заменяется на
, далее все строки выводятся. Я предполагал, что после замены в тексте уже не шаблона, и готовой страницы будет инклуд контроллера, контроллер подключится и выполнит необходимые действия, но на деле оказалось, что он просто висит на месте псевдотега в виде текста <?php include_once("<путь_к_контроллеру>"); ?>, как текст же отображается браузером и никаких действий не выполняет.
В чем я ошибся?
Исходное:
========
1) Имеется файл index.view, содержащий шаблон HTML-документа.
В шаблоне (например, где-нибудь в ячейке таблицы), находится псевдотег ###content###.
2)Имеется файл /modules/content/content_controller.php, в котором создается экземпляр класса-обработчика контента. Метод этого экземпляра выгружает страницу по умолчанию.
Описания класса:
-----------------------
PHP:
class content
{
//СВОЙСТВА КЛАССА
PRIVATE
$title, //заголовок страницы
$keywords, //ключевые слова мета-тега для индексации поисковым роботом
$navigate, //элементы навигации: кнопка, ссылки (массив)
$content; //отображаемое содержимое
//МЕТОДЫ КЛАССА
//читаем новость по умолчанию
function read_default_content()
{
$def_content=mysql_query("SELECT * FROM content WHERE page_active='active' AND page_default='yes'");
$x=0;
while ($x < mysql_num_rows($def_content)):
$page_name=mysql_result($def_content, $x, 'page_name');
$page_content=mysql_result($def_content, $x, 'page_content');
print $page_name."<br>";
print $page_content;
$x++;
endwhile;
}
}
---------------------------------------------
PHP:
include_once("config.php");
//выполняем вспомогательные операции - подключаемся к БД
$new_helper = new helper($db_host, $db_user, $db_pass, $db_name, $db_charset);
$new_helper->db_connect();
//читаем новость по умолчанию
$page= new content;
$page->read_default_content();
//выполняем вспомогательные операции - отключаемся от БД
$new_helper->db_close();
В нем создан экземпляр объекта-обработчика шаблона. Метод этого экземпляра читает шаблон, и, если находит псевдотег ###content###, заменяет его на функцию подключения файла /modules/content/content_controller.php.
Описание класса:
-----------------------
class patmaster
{
//СВОЙСТВА КЛАССА
//МЕТОДЫ КЛАССА
function __construct($pattern_dir, $module_dir)
{
$source_view=fopen($pattern_name=$_SERVER["DOCUMENT_ROOT"].$pattern_dir."index.view", "rt");
$lines_view=explode("\n", fread($source_view, filesize($pattern_name)));
$path=$_SERVER["DOCUMENT_ROOT"].$module_dir."content_controller.php";
foreach ($lines_view as $current_line)
{
$a=str_replace("###content###", "<?php include_once(\"$path\"); ?>", $current_line);
print $a."<br>";
}
}
}
Файл index.php
--------------------
PHP:
include_once("config.php");
$parser = new patmaster($pat_dir, $mod_dir);
========
По идее, все должно происходить так: шаблон читается построчно, если строка шаблона не имеет псевдотега - она не изменяется, если строка имеет псевдотег, он заменяется на
PHP:
<?php include_once("<путь_к_контроллеру>"); ?>
В чем я ошибся?