Content.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Ui\TemplateEngine\Xhtml\Compiler\Element;
  7. use Magento\Framework\DataObject;
  8. use Magento\Framework\View\Element\UiComponentInterface;
  9. use Magento\Framework\View\TemplateEngine\Xhtml\CompilerInterface;
  10. use Magento\Framework\View\TemplateEngine\Xhtml\Compiler\Element\ElementInterface;
  11. /**
  12. * Class Content
  13. */
  14. class Content implements ElementInterface
  15. {
  16. /**
  17. * Compiles the Element node
  18. *
  19. * @param CompilerInterface $compiler
  20. * @param \DOMElement $node
  21. * @param DataObject $processedObject
  22. * @param DataObject $context
  23. * @return void
  24. */
  25. public function compile(
  26. CompilerInterface $compiler,
  27. \DOMElement $node,
  28. DataObject $processedObject,
  29. DataObject $context
  30. ) {
  31. $name = $node->getAttribute('name');
  32. /** @var UiComponentInterface $processedObject */
  33. $content = (string)$processedObject->renderChildComponent($name);
  34. $name .= '_' . sprintf('%x', crc32(spl_object_hash($context)));
  35. if (!empty($content)) {
  36. $compiler->setPostprocessingData($name, $content);
  37. $newNode = $node->ownerDocument->createTextNode(
  38. CompilerInterface::PATTERN_TAG . $name . CompilerInterface::PATTERN_TAG
  39. );
  40. $node->parentNode->replaceChild($newNode, $node);
  41. } else {
  42. $node->parentNode->removeChild($node);
  43. }
  44. }
  45. }