2017-01-14 1 views
0

J'ai un processus php qui utilise simpleHTMLdom pour charger une page HTML, analyser tout le contenu et lire toutes les instances d'une classe spécifique de DIVs. Je crée ensuite un tableau PHP (multidimensionnel) de données à partir des DIVs et des éléments UL/LI contenus dans chacun d'entre eux. Tout cela fonctionne parfaitement et j'ai les données dont j'ai besoin. Puis j'insère un nouvel objet/élément de tableau dans le tableau en utilisant json_decode (à partir de JSON qui est posté sur cette page/processus), et j'effectue un 'tri' sur le tableau en fonction d'un horodatage.Est-il possible de modifier innertext d'un élément avec simpleHTMLdom et enregistrer le contenu modifié dans un fichier local?

Ce que je suis en train de faire maintenant est de prendre le code html que je l'ai déjà chargé avec simpleHTMLdom et

1.) videz l'élément parent qui contient tous les DIVs que j'ai construit précédemment le tableau de:

$html->find('.bodycontent')->innertext = ''; 

2.) utilisation de la boucle PHP foreach en boucle sur mon tableau et re-construire tous les DIVs et ajouter à l'élément HTML que je l'ai déjà vidé:

// variable to hold the new HTML content 
$newHTMLforMeetings = ''; 

// loop over array and build HTML... 
foreach($articles as $addMeetingItem){ 
    $newHTMLforMeetings .= '<div class="meetingEntry">'; 
    $newHTMLforMeetings .= ' <h2 class="meetingEntryTitle">'.$addMeetingItem['meetingTitle'].'</h2>'; 
    $newHTMLforMeetings .= ' <div class="meetingEntryDate">'.$addMeetingItem['meetingDate'].'</div>'; 
    $newHTMLforMeetings .= ' <div class="meetingEntryDocs">'; 
    $newHTMLforMeetings .= '  <ul class="meetingDocs">'; 
     foreach($addMeetingItem['meetingDocs'] as $key => $aDoc){ 
      $newHTMLforMeetings .= '<li class="docliItem"> <a href="'. $addMeetingItem['meetingDocLinks'][$key] .'" class="meetingLink">'. $aDoc .'</a> </li>'; 
     } 
    $newHTMLforMeetings .= '  </ul>'; 
    $newHTMLforMeetings .= ' </div>'; 
    $newHTMLforMeetings .= '</div>'; 
}; 

// ** THIS IS NOT WORKING FOR ME FOR SOME REASON ** 
// now add that newly built HTML content into the HTML element that was previously emptied 
$html->find('.bodycontent')->innertext = $newHTMLforMeetings; 

3.) prendre la nouvelle modifié le contenu HTML à partir simpleHTMLdom et l'enregistrer dans un fichier local:

// a new variable that has all the HTML I want to save 
$docHtml = $html->save(); 

// save out the HTML content to the local file 
file_put_contents('NewPage.html', $docHtml); 

je peux faire écho à la newHTMLforMeetings $ et il semble parfait et contient tous mes éléments HTML et des données. Mais la page que je sauvegarde ne contient pas les nouveaux éléments/contenu HTML ... mais le conteneur que j'essaie de les insérer dans IS est vidé, de sorte que cela fonctionne.

Que dois-je faire pour ajouter mon contenu HTML puis enregistrer le document et être en mesure de voir mon nouveau contenu en place? (Je commence aussi à penser qu'au lieu de détruire et de reconstruire TOUS les DIVs, je devrais simplement utiliserHTMLdom pour traverser toutes les DIVs et déterminer l'emplacement correct de mon DIV nouvellement ajouté, puis l'insérer à au bon endroit ... Je vais revisiter plus tard, donc pour l'instant la question sera simplement se concentrer sur la suppression de tous les DIVs et la reconstruction de chacun de mon tableau de données)

Répondre

1

On dirait que vous voulez.

$html->find('.bodycontent', 0)->innertext = $newHTMLforMeetings; 

rappelez-vous que

$html->find('.bodycontent') 

retourne un tableau et

$html->find('.bodycontent', $i) 

retournera un élément

+0

Impressionnant, fonctionne très bien et je vais noter que la distinction entre ce qui retourne un tableau par rapport à l'élément. – tamak