Как обновить HTML-код, содержащийся в переменной, с помощью QueryPath

Я перенесу некоторый контент в Drupal и хочу использовать QueryPath для изменения ссылок на изображения с

<img src="example.jpg">

в

<img src="/sites/default/files/images/example.jpg">

Я извлекаю «основной» div из всей HTML страницы и помещаю его в переменную ($ mainContent). Затем я могу получить теги изображений и обновить их. Это все работает, но я не могу понять, как вернуть обновленные теги изображений в мою переменную $ mainContent.

Это мой код:

$qp = qp($htmlCode); // full HTML page
$mainContent = $qp->top()->find('#main')->innerHTML(); // div containing main content

foreach (qp($mainContent, 'img') as $img) {
$new_src = '/sites/default/files/images/' . $img->attr('src');
$img->attr('src', $new_src);   // src attribute is updated

$mainContent->XXXXX // ????? What to put here ????
}

После второй строки в цикле foreach переменная $ img содержит обновленный атрибут src для каждого изображения. Однако я не могу понять, какой синтаксис QueryPath необходим, чтобы сложить обновленный тег изображения обратно в переменную $ mainContent. Должен ли я просто использовать обычные функции PHP «заменить», чтобы заменить старый тег новым? (Я знаю, что есть много способов сделать это, но я хочу сделать это «правильным» способом!).

1

Решение

Я понял это для себя — опубликовать ответ на случай, если он может быть полезен для кого-то еще в будущем. Проблема заключалась в том, что, получив значение «innerHTML» из $ mainContent, я настроил его как скалярную переменную, а не как объект QueryPath.

Код ниже корректно применяет изменения к содержимому переменной.

$qp = qp($htmlCode); // full HTML page
$mainContent = $qp->top()->find('#main'); // div containing main content

foreach ($mainContent->top()->find('img') as $img) {
$new_src = '/sites/default/files/images/' . $img->attr('src');
$img->attr('src', $new_src);   // src attribute is updated
}
$output = $mainContent->top()->find('#main')->innerHTML();

Теперь $ output содержит HTML-код div «#main».

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]