Я перенесу некоторый контент в 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 «заменить», чтобы заменить старый тег новым? (Я знаю, что есть много способов сделать это, но я хочу сделать это «правильным» способом!).
Я понял это для себя — опубликовать ответ на случай, если он может быть полезен для кого-то еще в будущем. Проблема заключалась в том, что, получив значение «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».
Других решений пока нет …