2010-06-14 4 views
1

Pour commencer, j'utilise PHP avec ob_start() et ob_flush.Insérer les valeurs après que le compilateur a passé Ligne

Dans le code, j'ai une partie où les paramètres sont supposés être chargés dynmacialement dans la tête d'un fichier.

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

//Enter More Code Here Later 

</head> 

Ce que je suis en train de est après le compilateur a terminé et atteindre la fin du fichier, et a trouvé plus de bibliothèques à ajouter, est-il un moyen où je peux ajouter plus de bibliothèques à la partie où il est dit// Entrez plus de code ici? Je sais que c'est possible en utilisant Javascript/AJAX, mais j'essaye de le faire avec juste php.

Répondre

1

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

Exemple # 1 décrit exactement ce que vous essayez de faire: Vous pouvez créer une fonction de rappel appelée lorsque vous appelez ob_end_flush().

Par exemple:

<?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(); 
?> 

La sortie dans ce cas serait:

<head> 
<script> 
the value you want to insert 
</script> 
</head> 
+0

Cette solution a fonctionné assez facilement. Merci – user293313

0

Une option, serait d'ajouter un "marqueur". Remplacez donc //Enter More Code Here Later par <!-- HEADCODE-->.

Puis, plus tard, lorsque vous êtes prêt à envoyer au client (Vous avez parlé de l'aide ob_flush()), il suffit de faire:

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

Si vous voulez obtenir la fantaisie, vous pouvez créer une classe gérer cela pour vous. Ensuite, au lieu de faire ob_get_clean, ajoutez simplement un rappel à 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')); 

Ensuite, dans votre code, il suffit de faire $buffer->addTo('HEAD', '<myscript>');

Questions connexes