За последние 24 часа нас посетили 43576 программистов и 3121 робот. Сейчас ищут 1070 программистов ...

Сборка и отдача браузеру окончательного HTML

Тема в разделе "PHP для новичков", создана пользователем Neka, 4 июл 2011.

  1. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Приветствую!
    Пытаюсь писать что-то в стиле CMS, что-то в стиле Joomla!. Встретил проблему сборки окончательного HTML и выдачу его в браузер.

    Что имеем:
    1. Файл template.php с HTML-кодом, который с PHP-вставками - каркас отображения сайта
    2. Файл view.php, который шаблон компонента тоже с PHP-вставками
    3. Сборочную фабрику (в разработке, как раз насчет нее и тема).

    Дык вот, в шаблоне есть вставка к примеру <component />, на ее место должен встать уже пропущенный через интерпретатор php html-код из файла view.php. Потом весь этот код должен быть пропущен через интерпретатор и отдан браузеру.

    Просто сам алгоритм сборки не могу додумать. К примеру возьмем так - читаем шаблон построчно, если находим элемент component, инклюдим туда view.php. Получаем собранный код с php-вставками. Как теперь его сынтерпретировать и отдать в браузер?

    Может как-то по другому?

    Знаю что непонятно объяснил, но понятней чего-то не получается(( Т.к. все мысли заняты решением этой задачи
     
  2. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Объясню:
    К примеру есть такой template.php
    PHP:
    1.  
    2. <html>
    3.     <head>
    4.         <title><?php echo $title; ?></title>
    5.     </head>
    6.     <body>
    7.         <content />
    8.     </body>
    9. </html>
    10.  
    И такой view.php
    PHP:
    1.  
    2. <div>
    3.     <?php echo $content; ?>
    4. </div>
    5.  
    Нам нужно интерпретировать код в нужном месте, т.к. там уже создано рабочее окружение для правильной интерпретации.

    Можно сделать так
    PHP:
    1. <?php
    2. $template = file('temlpate.php');
    3. replace_my_tag('<content />', 'view.php'); // Заменяем тэг содержимым файла view.php
    4.  
    Теперь в $template у нас лежит HTML-код с PHP-вставками. Вот тут задача, как его заинтерпретировать перед тем как отдать пользователю? С помощью eval()? Не вариант.
    Есть еще один бредовый способ, который взбрел в мою больную голову:
    Пишем $template в файл, и делаем редирект на него. Но это крайне бредовый вариант.

    Вот примерно такая задачка
     
  3. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  4. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Мне не нужен комбайн.
    Всего лишь одна конкретная задача.
    Знаете - подскажите, не знаете - не надо умничать.

    Всё просто.
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ты хоть читал тему по ссылке? при чём тут комбайны?
    я думал, что это то, что тебе как раз было нужно, вот и подсказал

    PHP:
    1. <?php
    2.    ob_start();
    3.    include($template_path);
    4.    $content = ob_get_contents();
    5.    ob_end_clean();
    6. ?>
    помогать больше не хочется
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Neka, view.php можно просто инклудить в скрипт, который собирает всё в кучу ("сборочная фабрика"). View.php при этом исполнится, а результат его работы собрать функциями ob_start, ob_get_contents и ob_end_clean. Далее в твоём шаблоне можно заменить поле <content /> на результат работы модуля view.php функцией str_replace.
     
  8. Neka

    Neka Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Когда я перешел по ссылке почитал, потом рекурсией пошарился по ссылкам, я абсолютно запутался. Я понимаю что кэшинг - это круто, но...
    Это сказано в общем, т.е. наперед. Если вы подумали, что относится к Вам - извиняюсь.

    Да, я сделал это через ob_stаrt, но не из той темы огромной вложенности (там я видел этот кусок кода, но не понял к чему он, т.к. еще не приходилось работать с ob_ функциями). Там я просто напросто запутался еще куда больше.

    Спасибо всем!

    PS Апельсин, оценка работ кружка рисования для отсталых детей где-то в соседней теме :)