Проблема с обработкой шаблона: некорректная замена псевдотега.

Sardonix

Новичок
Проблема с обработкой шаблона: некорректная замена псевдотега.

Исходное:
========
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;
                    }
        }
Файл /modules/content/content_controller.php:
---------------------------------------------
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();
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("config.php");
$parser = new patmaster($pat_dir, $mod_dir);
Проблема:
========
По идее, все должно происходить так: шаблон читается построчно, если строка шаблона не имеет псевдотега - она не изменяется, если строка имеет псевдотег, он заменяется на
PHP:
 <?php include_once("<путь_к_контроллеру>"); ?>
, далее все строки выводятся. Я предполагал, что после замены в тексте уже не шаблона, и готовой страницы будет инклуд контроллера, контроллер подключится и выполнит необходимые действия, но на деле оказалось, что он просто висит на месте псевдотега в виде текста <?php include_once("<путь_к_контроллеру>"); ?>, как текст же отображается браузером и никаких действий не выполняет.

В чем я ошибся?
 

WP

^_^
> Я предполагал, что после...
В этом и состоит твоя ошибка, ты же сам говоришь что этого не происходит.

-~{}~ 23.06.06 08:01:

> $source_view=fopen($pattern_name=$_SERVER["DOCUMENT_ROOT"].$pattern_dir."index.view", "rt");
Что за параметр t?
Покури [m]file[/m] и [m]file_get_contents[/m].
 

Sardonix

Новичок
Автор оригинала: WP
> Я предполагал, что после...
В этом и состоит твоя ошибка, ты же сам говоришь что этого не происходит.
Мне непонятно, ПОЧЕМУ этого не происходит.

> $source_view=fopen($pattern_name=$_SERVER["DOCUMENT_ROOT"].$pattern_dir."index.view", "rt");
Что за параметр t?
Параметр t говорит, что файл следует читать как текстовый. Возможен так же параметр b - он задает бинарный режим операций.

Покури [m]file[/m] и [m]file_get_contents[/m].
Пожалуйста, поясни мысль.
Какая разница, каким способом я получил содержимое файла (к тому же, в данном случае удобнее так, как я сделал - функция file() читает файл в бинарном режиме, и мне пришлось бы потом вырезать из прочитанного пробельные символы типа "\n")? Каждая строка прочитанного файла висит как элемент массива, в том числе и строка, в которой псевдотег был заменен на оператор включения контроллера; далее я просто организую вывод этого массива в браузер и таким образом формирую страницу, но если HTML-теги выполняют ту функцию, которую и должны выполнять, т.е., формирую разметку, то оператор включения контроллера include_once почему-то своей функциональности лишен - он вылазит просто как текст.
 

_vampiro_

Новичок
поясни, если не сложно, чего ты ожидаешь от инклуда (один раз) файла. Пусть ты и не там это делаешь.. но всё же - что должно происходить?
 

Sardonix

Новичок
Автор оригинала: _vampiro_
поясни, если не сложно, чего ты ожидаешь от инклуда (один раз) файла. Пусть ты и не там это делаешь.. но всё же - что должно происходить?
Подключаемый файл содержит код, создающий экземпляр класса content и далее использующий один из его методов - обращение к БД, чтение в ней информации о страницах пользовательского контента, выбор содержимого страниы по умолчанию и вывод этого содержимого. Класс content и работа метода read_default_content() этого класса описаны выше, в начале этой нити.
 

_vampiro_

Новичок
я видел какой код там был. :)
тебе надо проверить - есть-ли в шаблоне нужная фраза, если есть - инклудить файл, получить результат отработки метода, и этим результатом заменить фразу. Всё это надо делать в "class patmaster", а не вставлять инклуд в текстовую переменную.
 

Sardonix

Новичок
Автор оригинала: _vampiro_
тебе надо проверить - есть-ли в шаблоне нужная фраза, если есть - инклудить файл, получить результат отработки метода, и этим результатом заменить фразу. Всё это надо делать в "class patmaster", а не вставлять инклуд в текстовую переменную.
Никак не могу въехать. Объясни, пожалуйста, на пальцах.
 

_vampiro_

Новичок
Загибай.

1.if (strpos()!==false){
2. require_once()
3. $content = new content();
4. $to = Get_default_content();
5. return str_replace();
}
 
Сверху