2017-01-14 2 views
0

У меня есть php-процесс, который использует simpleHTMLdom для загрузки HTML-страницы, анализа всего содержимого и чтения всех экземпляров определенного класса DIV.Можно ли изменить внутренний текст элемента с помощью simpleHTMLdom и сохранить измененный контент в локальный файл?

Затем я создаю массив PHP (многомерный) данных из этих элементов DIV и UL/LI, содержащихся в каждом из них. Все это прекрасно работает, и у меня есть данные, которые мне нужны.

Затем я вставляю новый массив/элемент массива в массив с помощью json_decode (из JSON, который отправляется на эту страницу/процесс) и выполняет «сортировку» в массиве на основе метки времени.

То, что я пытаюсь сделать сейчас, это взять HTML, который я предварительно загруженный с simpleHTMLdom и

1.) опустошить родительский элемент, который содержит все DIVs я уже построил массив из:

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

2.) использовать PHP цикл по каждому элементу, чтобы перебрать мой массив и заново строить все DIVs и добавить в HTML-элемент, который я ранее опустели:

// 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.) принимают вновь измененное содержание HTML от simpleHTMLdom и сохранить его в локальный файл:

// 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); 

Я могу повторить вне $ newHTMLforMeetings и выглядит отлично и содержит все мои HTML элементы и данные. Но страница, которую я сохраняю, не содержит новых элементов/содержимого HTML ... но контейнер, который я пытаюсь вставить в IS, опустел, так что он работает.

Что мне нужно сделать, чтобы добавить свой HTML-контент, а затем сохранить документ и уметь видеть мой новый контент на месте?

(Я также начинаю думать, что вместо уничтожения и восстановления ВСЕХ DIVs я должен просто использовать simpleHTMLdom для прохождения всех DIV и определения правильного местоположения, в котором должен был быть добавлен новый DIV, а затем вставить его в в нужном месте ... я вернуться к этому позже, поэтому сейчас вопрос будет просто сосредоточиться на устранении всех DIVs и восстановление каждого из моего массива данных)

ответ

1

похоже, что вы хотите:.

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

, что

$html->find('.bodycontent') 

возвращает массив, и

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

возвращает элемент

+0

Высокий, прекрасно работает, и я буду отметить, что различие между тем, что возвращает массив против элемента. – tamak

Смежные вопросы