0

私のコードでは、PHP DOM を使用してすべての img タグを検索し、その直後に別の img タグを追加してから、そのすべてを div でラップしようとしています。

<!-- From this... -->
<img src="originalImage.jpg" />

<!-- ...to this... -->
<div class="wrappingDiv">
    <img src="originalImage.jpg" />
    <img src="newImage.jpg" />
</div>

これは私が試しているPHPです

$dom = new domDocument;
$dom->loadHTML($the_content_string);
$dom->preserveWhiteSpace = false;
    //get all images and chuck them in an array
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
            //create the surrounding div
    $div = $image->ownerDocument->createElement('div');
    $image->setAttribute('class','main-image');
        $added_a = $image->parentNode->insertBefore($div,$image);
        $added_a->setAttribute('class','theme-one');
        $added_a->appendChild($image);
            //create the second image
    $secondary_image = $image->ownerDocument->createElement('img');
    $added_img = $image->appendChild($secondary_image);
    $added_img->setAttribute('src', $twine_img_url);
    $added_img->setAttribute('class', $twine_class);
    $added_img->appendChild($image);
    }

echo $dom->saveHTML();

$added_img 変数を作成するところまではすべて正常に動作します。まあ、少なくともエラーにはなりません。それを殺すのは最後の4行です。

私は明らかに、比較的ばかげたことをやっています...私が物事を汚した場所を指摘できる素敵で素敵な人はいますか?

4

1 に答える 1

1

初め:

ここで画像を追加して画像化しようとしています(ただし、もちろんHTMLでは、画像に子画像を含めることはできません。画像をdivに追加してください)。

$added_img = $image->appendChild($secondary_image);

それはする必要があります

$added_img = $added_a->appendChild($secondary_image);

そして再びここに:

$added_img->appendChild($image);

である必要があります:

$added_a->appendChild($image);

ただし、NodeListはライブであるため、これはまったく機能しません。新しい画像を1つ追加するとすぐに、この画像は$ imagesの一部になり、無限ループに陥ります。したがって、NodeListを使用する代わりに、最初に配列に初期イメージを入力します。

$imageList= $dom->getElementsByTagName('img');
$images=array();
for($i=0;$i<$imageList->length;++$i)
{
  $images[]=$imageList->item($i);
}
于 2012-07-12T13:51:40.307 に答える