1

一部のコンテンツを Drupal に移行しており、QueryPath を使用して画像参照を変更したいと考えています。

<img src="example.jpg">

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

ページ全体の HTML から「メイン」の div を抽出し、それを変数 ($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 ループの 2 行目以降の $img 変数には、各画像の更新された src 属性が含まれています。ただし、更新されたイメージ タグを $mainContent 変数に戻すために必要な QueryPath 構文がわかりません。古いタグを新しいタグに置き換えるには、通常の PHP の「置換」関数を使用する必要がありますか? (私はそれを行う方法がたくさんあることを知っていますが、「正しい」方法でやりたいです!).

4

1 に答える 1

2

私は自分でそれを理解しました-将来他の誰かに役立つかもしれない場合に備えて、答えを投稿します. 問題は、$mainContent の「innerHTML」値を取得することで、それを 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 には「#main」div の HTML コードが含まれます。

于 2015-02-19T00:22:04.893 に答える