Page.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\CmsGraphQl\Model\Resolver\DataProvider;
  8. use Magento\Cms\Api\Data\PageInterface;
  9. use Magento\Cms\Api\PageRepositoryInterface;
  10. use Magento\Framework\Exception\NoSuchEntityException;
  11. use Magento\Widget\Model\Template\FilterEmulate;
  12. /**
  13. * Cms page data provider
  14. */
  15. class Page
  16. {
  17. /**
  18. * @var FilterEmulate
  19. */
  20. private $widgetFilter;
  21. /**
  22. * @var PageRepositoryInterface
  23. */
  24. private $pageRepository;
  25. /**
  26. * @param PageRepositoryInterface $pageRepository
  27. * @param FilterEmulate $widgetFilter
  28. */
  29. public function __construct(
  30. PageRepositoryInterface $pageRepository,
  31. FilterEmulate $widgetFilter
  32. ) {
  33. $this->pageRepository = $pageRepository;
  34. $this->widgetFilter = $widgetFilter;
  35. }
  36. /**
  37. * @param int $pageId
  38. * @return array
  39. * @throws NoSuchEntityException
  40. */
  41. public function getData(int $pageId): array
  42. {
  43. $page = $this->pageRepository->getById($pageId);
  44. if (false === $page->isActive()) {
  45. throw new NoSuchEntityException();
  46. }
  47. $renderedContent = $this->widgetFilter->filter($page->getContent());
  48. $pageData = [
  49. 'url_key' => $page->getIdentifier(),
  50. PageInterface::TITLE => $page->getTitle(),
  51. PageInterface::CONTENT => $renderedContent,
  52. PageInterface::CONTENT_HEADING => $page->getContentHeading(),
  53. PageInterface::PAGE_LAYOUT => $page->getPageLayout(),
  54. PageInterface::META_TITLE => $page->getMetaTitle(),
  55. PageInterface::META_DESCRIPTION => $page->getMetaDescription(),
  56. PageInterface::META_KEYWORDS => $page->getMetaKeywords(),
  57. ];
  58. return $pageData;
  59. }
  60. }