Reader.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\View\Page\Layout;
  7. use Magento\Framework\View\Layout;
  8. /**
  9. * Class Page layout reader
  10. */
  11. class Reader
  12. {
  13. /**
  14. * Merge cache suffix
  15. */
  16. const MERGE_CACHE_SUFFIX = 'page_layout';
  17. /**
  18. * @var \Magento\Framework\View\Design\Theme\ResolverInterface
  19. */
  20. protected $themeResolver;
  21. /**
  22. * @var \Magento\Framework\View\Layout\ProcessorFactory
  23. */
  24. protected $processorFactory;
  25. /**
  26. * @var \Magento\Framework\View\File\CollectorInterface
  27. */
  28. protected $pageLayoutFileSource;
  29. /**
  30. * @var \Magento\Framework\View\Layout\ProcessorInterface
  31. */
  32. protected $pageLayoutMerge;
  33. /**
  34. * @var \Magento\Framework\View\Layout\ReaderPool
  35. */
  36. protected $reader;
  37. /**
  38. * Constructor
  39. *
  40. * @param \Magento\Framework\View\Design\Theme\ResolverInterface $themeResolver
  41. * @param \Magento\Framework\View\Layout\ProcessorFactory $processorFactory
  42. * @param \Magento\Framework\View\File\CollectorInterface $pageLayoutFileSource
  43. * @param \Magento\Framework\View\Layout\ReaderPool $reader
  44. */
  45. public function __construct(
  46. \Magento\Framework\View\Design\Theme\ResolverInterface $themeResolver,
  47. \Magento\Framework\View\Layout\ProcessorFactory $processorFactory,
  48. \Magento\Framework\View\File\CollectorInterface $pageLayoutFileSource,
  49. \Magento\Framework\View\Layout\ReaderPool $reader
  50. ) {
  51. $this->themeResolver = $themeResolver;
  52. $this->processorFactory = $processorFactory;
  53. $this->pageLayoutFileSource = $pageLayoutFileSource;
  54. $this->reader = $reader;
  55. }
  56. /**
  57. * Retrieve the layout update instance
  58. *
  59. * @return \Magento\Framework\View\Layout\ProcessorInterface
  60. */
  61. protected function getPageLayoutMerge()
  62. {
  63. if ($this->pageLayoutMerge) {
  64. return $this->pageLayoutMerge;
  65. }
  66. $this->pageLayoutMerge = $this->processorFactory->create([
  67. 'theme' => $this->themeResolver->get(),
  68. 'fileSource' => $this->pageLayoutFileSource,
  69. 'cacheSuffix' => self::MERGE_CACHE_SUFFIX,
  70. ]);
  71. return $this->pageLayoutMerge;
  72. }
  73. /**
  74. * Read page layout structure and fill reader context
  75. *
  76. * @param Layout\Reader\Context $readerContext
  77. * @param string $pageLayout
  78. * @return void
  79. */
  80. public function read(Layout\Reader\Context $readerContext, $pageLayout)
  81. {
  82. $this->getPageLayoutMerge()->load($pageLayout);
  83. $xml = $this->getPageLayoutMerge()->asSimplexml();
  84. $this->reader->interpret($readerContext, $xml);
  85. }
  86. }