2015-12-10 2 views
0

J'utilise le code suivant pour analyser la structure d'un modèle HTML dans une option DOM, puis en utilisant les résultats d'une requête SQL, j'essaie de générer et d'ajouter certains fragments html à un nœud parent de l'objet dom, puis l'écho du code HTML généré avec style. Toutefois, le rendu HTML est le code HTML brut et il n'est pas en cours de style.PHP createTextNode() affiche uniquement du texte en utilisant saveHTML()

Des idées sur quoi faire? J'envisage de déplacer tout cela vers JQuery au lieu de PHP car après Googling je ne trouve pas de solution directe qui fonctionne sans faire de post-traitement dans le HTML lui-même avec une balise <script>.

Voici le code HTML de modèle à partir duquel les nœuds doivent être ajoutés (jumbotron HTML):

<!-- CONTENT --> 
    <div class="container"> 

    <div class="row"> 
     <!--CONTENT DIVs--> 
     <div class="jumbotron col-xs-12 col-sm-10 col-sm-push-2" id="contents"> 

     <!--END OF CONTENT DIVs--> 

Et voici le code PHP:

//Create DOM of the main page 
$masterdoc = new DOMDocument(); 
@$masterdoc->loadHTMLFile($filename); 

$masterflag = $masterdoc->getElementById("contents"); 

//The SQL statement needed 
$sql = "SELECT folder_name FROM FOLDERS INNER JOIN LINKAGES ON FOLDERS.id = LINKAGES.child WHERE folder_id = (SELECT id from FOLDERS WHERE folder_name = '" . $foldername . "');"; 
$result = $conn->query($sql); 
$count = $result->num_rows; 

//Save all the folder names into an array 
$data = array(); 
$index = 0; 
if ($count> 0) { 
    while($row = $result->fetch_array()) { 
     $data[$index] = $row["folder_name"]; 
     $index++; 
    } 
} else { 
    echo "0 results"; 
} 
//Loop through the array to generate Jumbotrons and append these to the right section of the main HTML. 
for ($x = 0; $x <count($data); $x++) { 
    $masterflag->appendChild($masterdoc->createTextNode('<div class="row"><div class="col-xs-2"><i class="fa fa-folder fa-4x"></i></div><div class="col-xs-8"><a href="http://localhost/www/folders.php?link="' . $data[$x] . '" class="btn btn-block" type="content" id="content">' . $data[$x] . '</a></div><div class="col-xs-2"><i class="fa fa-arrow-right fa-4x"></i></div></div><hr>')); 
} 

echo $masterdoc->saveHTML(); 

Alors que vous pouvez voir ce qui se passe , voici ma page:

The text code generated

Répondre

0

Voir this réponse. Vous devez utiliser DomDocument::createDocumentFragment() et ensuite ajouter votre chaîne XML au fragment créé, puis DomElement::appendChild() qui fragmentent en $masterflag

+0

Merci! Cela fonctionne maintenant. –

+0

vous pouvez accepter la réponse, si vous voulez – Alexey