Add getAttributeValueByTagName to dom helper

I'm adding this method to cover use-cases where we need to extract classes
from a block's HTML.
[MAILPOET-5741]
This commit is contained in:
Rostislav Wolny
2024-02-22 12:24:56 +01:00
committed by Rostislav Wolný
parent 875fde56e9
commit d35e498f36
2 changed files with 18 additions and 0 deletions

View File

@@ -33,6 +33,17 @@ class DomDocumentHelper {
return $element->hasAttribute($attribute) ? $element->getAttribute($attribute) : ''; return $element->hasAttribute($attribute) ? $element->getAttribute($attribute) : '';
} }
/**
* Searches for the first appearance of the given tag name and returns the value of specified attribute.
*/
public function getAttributeValueByTagName(string $tagName, string $attribute): ?string {
$element = $this->findElement($tagName);
if (!$element) {
return null;
}
return $this->getAttributeValue($element, $attribute);
}
public function getOuterHtml(\DOMElement $element): string { public function getOuterHtml(\DOMElement $element): string {
return (string)$this->dom->saveHTML($element); return (string)$this->dom->saveHTML($element);
} }

View File

@@ -37,4 +37,11 @@ class DomDocumentHelperTest extends \MailPoetUnitTest {
$this->assertInstanceOf(\DOMElement::class, $element); $this->assertInstanceOf(\DOMElement::class, $element);
$this->assertEquals('<img src="https://test.com/DALL%C2%B7E-A%C2%AE%E2%88%91oecas%C6%92-803x1024.jpg">', $domDocumentHelper->getOuterHtml($element)); $this->assertEquals('<img src="https://test.com/DALL%C2%B7E-A%C2%AE%E2%88%91oecas%C6%92-803x1024.jpg">', $domDocumentHelper->getOuterHtml($element));
} }
public function testItGetsAttributeValueByTagName(): void {
$html = '<div><p class="some-class">Some text</p><p class="second-paragraph"></p></div>';
$domDocumentHelper = new DomDocumentHelper($html);
$this->assertEquals('some-class', $domDocumentHelper->getAttributeValueByTagName('p', 'class'));
$this->assertNull($domDocumentHelper->getAttributeValueByTagName('span', 'class'));
}
} }