php ob_start () исправляет ранее выведенные теги - PullRequest
1 голос
/ 02 февраля 2012

Я только недавно начал играть с буферизацией вывода и, похоже, наткнулся на контрольно-пропускной пункт.Мой сайт использует систему шаблонов, которая загружает верхний / нижний колонтитул HTML и правильный шаблон содержимого.Проблема в том, что заголовки HTML установлены в первом загруженном шаблоне.Поэтому, когда (если) загружается другой шаблон, который содержит заголовки (хранящиеся в строке $ headers), он не будет добавлять их в заголовок.Я создал очень небрежный способ сделать это, я ищу предложения, чтобы лучше справиться с этим.

index.php

    ob_start('ob_html_headers');

функция обратного вызова

    function ob_html_headers($buffer)
    {
        global $headers;

        return str_replace('</head>', $headers.'</head>', $buffer);
    }

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Хммм, интересный вопрос. Если вы пытаетесь делать то, что я вам представляю, вам, вероятно, будет лучше собрать данные, которые будут отправляться по разделам, тогда эхо - это конец. Вы можете вложить ob_start, если не хотите конвертировать все свои echo s в $ str. = Совсем.

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

0 голосов
/ 02 февраля 2012

Я не понимаю, почему «заголовки» хранятся в шаблоне.

Насколько я понимаю, шаблоны, какое бы динамическое значение не использовалось в шаблоне, должны быть определены в части бизнес-логики (и, скорее всего, взяты из базы данных).

Таким образом, у вас не возникнет таких проблем.

...