Page.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Copyright © 2016 Ihor Vansach (ihor@magefan.com). All rights reserved.
  4. * See LICENSE.txt for license details (http://opensource.org/licenses/osl-3.0.php).
  5. *
  6. * Glory to Ukraine! Glory to the heroes!
  7. */
  8. namespace Magefan\Blog\Helper;
  9. use Magento\Framework\App\Action\Action;
  10. /**
  11. * Magefan Blog Helper
  12. */
  13. class Page extends \Magento\Framework\App\Helper\AbstractHelper
  14. {
  15. /**
  16. * Design package instance
  17. *
  18. * @var \Magento\Framework\View\DesignInterface
  19. */
  20. protected $_design;
  21. /**
  22. * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
  23. */
  24. protected $_localeDate;
  25. /**
  26. * @var \Magento\Framework\View\Result\PageFactory
  27. */
  28. protected $resultPageFactory;
  29. /**
  30. * Constructor
  31. *
  32. * @param \Magento\Framework\App\Helper\Context $context
  33. * @param \Magento\Framework\View\DesignInterface $design
  34. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  35. * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
  36. */
  37. public function __construct(
  38. \Magento\Framework\App\Helper\Context $context,
  39. \Magento\Framework\View\DesignInterface $design,
  40. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  41. \Magento\Framework\View\Result\PageFactory $resultPageFactory
  42. ) {
  43. $this->_design = $design;
  44. $this->_localeDate = $localeDate;
  45. $this->resultPageFactory = $resultPageFactory;
  46. parent::__construct($context);
  47. }
  48. /**
  49. * Return result blog page
  50. *
  51. * @param Action $action
  52. * @param \Magento\Framework\Model\AbstractModel $page
  53. * @return \Magento\Framework\View\Result\Page|bool
  54. */
  55. public function prepareResultPage(Action $action, $page)
  56. {
  57. if ($page->getCustomThemeFrom() && $page->getCustomThemeTo()) {
  58. $inRange = $this->_localeDate->isScopeDateInInterval(
  59. null,
  60. $page->getCustomThemeFrom(),
  61. $page->getCustomThemeTo()
  62. );
  63. } else {
  64. $inRange = false;
  65. }
  66. if ($page->getCustomTheme()) {
  67. if ($inRange) {
  68. $this->_design->setDesignTheme($page->getCustomTheme());
  69. }
  70. }
  71. /** @var \Magento\Framework\View\Result\Page $resultPage */
  72. $resultPage = $this->resultPageFactory->create();
  73. if ($inRange
  74. && $page->getCustomLayout()
  75. && $page->getCustomLayout() != 'empty'
  76. ) {
  77. $handle = $page->getCustomLayout();
  78. } else {
  79. $handle = $page->getPageLayout();
  80. }
  81. if ($handle) {
  82. $resultPage->getConfig()->setPageLayout($handle);
  83. }
  84. $fullActionName = $action->getRequest()->getFullActionName();
  85. $resultPage->addHandle($fullActionName);
  86. $resultPage->addPageLayoutHandles(['id' => $page->getIdentifier()]);
  87. $this->_eventManager->dispatch(
  88. $fullActionName . '_render',
  89. ['page' => $page, 'controller_action' => $action]
  90. );
  91. if ($inRange && $page->getCustomLayoutUpdateXml()) {
  92. $layoutUpdate = $page->getCustomLayoutUpdateXml();
  93. } else {
  94. $layoutUpdate = $page->getLayoutUpdateXml();
  95. }
  96. if ($layoutUpdate) {
  97. $resultPage->getLayout()->getUpdate()->addUpdate($layoutUpdate);
  98. }
  99. return $resultPage;
  100. }
  101. }