1

まず、ob_start()とob_flushでPHPを使用しています。

コードには、パラメーターがファイルの先頭に動的にロードされると想定される部分があります。

<head>
<script type="text/javascript" src="javascript/ajax_objects.js"></script>

//Enter More Code Here Later

</head>

私がしようとしているのは、コンパイラが終了してファイルの最後に到達し、追加するライブラリがさらに見つかった後です。//ここにコードを追加してくださいと表示されている部分にライブラリを追加できる方法はありますか?Javascript / AJAXを使用して可能であることは知っていますが、これをphpだけで実行しようとしています。

4

2 に答える 2

1

http://php.net/manual/en/function.ob-start.php

例1は、あなたがやろうとしていることを正確に説明しています。ob_end_flush()を呼び出すときに呼び出されるコールバック関数を作成できます。

例えば:

<?php
function replaceJS($buffer) {
  return str_replace("{JS_LIBS}", 'the value you want to insert', $buffer);
}
ob_start("replaceJS");
?>
<head>
<script>
{JS_LIBS}
</script>
</head>
<?php
ob_end_flush();
?>

その場合の出力は次のようになります。

<head>
<script>
the value you want to insert
</script>
</head>
于 2010-06-14T18:55:23.767 に答える
0

1つのオプションは、「マーカー」を追加することです。したがって、に置き換え//Enter More Code Here Laterます<!-- HEADCODE-->

その後、クライアントに送信する準備ができたら(ob_flush()の使用について言及しました)、次のようにします。

$headContent = ''; //This holds everything you want to add to the head
$html = ob_get_clean();
$html = str_replace('<!-- HEADCODE-->', $headContent, $html);
echo $html;

ファンシーになりたい場合は、これを管理するクラスを作成できます。次に、ob_get_cleanを実行する代わりに、ob_startにコールバックを追加するだけです。

class MyOutputBuffer {
    $positions = array (
        'HEAD' => '',
    );

    public function addTo($place, $value) {
        if (!isset($this->positions[$place])) $this->positions[$place] = '';
        $this->positions[$place] .= $value;
    }

    public function render($string) {
        foreach ($this->positions as $k => $v) {
           $string = str_replace('<!-- '.$k.'CODE-->', $v, $string);
        }
        return $string;
    }
}

$buffer = new MyOutputBuffer();
ob_start(array($buffer, 'render'));

次に、コードで、$buffer->addTo('HEAD', '<myscript>');

于 2010-06-14T18:58:34.250 に答える