PageBlockHtmlTopmenuBethtmlBeforeObserver.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * Copyright © 2017 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\Observer;
  9. use Magento\Framework\Event\ObserverInterface;
  10. use Magento\Framework\Data\Tree\Node;
  11. use Magento\Store\Model\ScopeInterface;
  12. use Magefan\Blog\Helper\Config;
  13. /**
  14. * Blog observer
  15. */
  16. class PageBlockHtmlTopmenuBethtmlBeforeObserver implements ObserverInterface
  17. {
  18. /**
  19. * Show top menu item config path
  20. */
  21. const XML_PATH_TOP_MENU_SHOW_ITEM = 'mfblog/top_menu/show_item';
  22. /**
  23. * Top menu item text config path
  24. */
  25. const XML_PATH_TOP_MENU_ITEM_TEXT = 'mfblog/top_menu/item_text';
  26. /**
  27. * @var \Magefan\Blog\Model\Url
  28. */
  29. protected $_url;
  30. /**
  31. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  32. */
  33. protected $_scopeConfig;
  34. /**
  35. * @param \Magefan\Blog\Model\Url $url
  36. */
  37. public function __construct(
  38. \Magefan\Blog\Model\Url $url,
  39. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  40. ) {
  41. $this->_scopeConfig = $scopeConfig;
  42. $this->_url = $url;
  43. }
  44. /**
  45. * Page block html topmenu gethtml before
  46. *
  47. * @param \Magento\Framework\Event\Observer $observer
  48. * @return void
  49. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  50. */
  51. public function execute(\Magento\Framework\Event\Observer $observer)
  52. {
  53. if (!$this->_scopeConfig->isSetFlag(static::XML_PATH_TOP_MENU_SHOW_ITEM, ScopeInterface::SCOPE_STORE)) {
  54. return;
  55. }
  56. if (!$this->_scopeConfig->isSetFlag(Config::XML_PATH_EXTENSION_ENABLED, ScopeInterface::SCOPE_STORE)) {
  57. return;
  58. }
  59. /** @var \Magento\Framework\Data\Tree\Node $menu */
  60. $menu = $observer->getMenu();
  61. $block = $observer->getBlock();
  62. $tree = $menu->getTree();
  63. $data = [
  64. 'name' => $this->_scopeConfig->getValue(static::XML_PATH_TOP_MENU_ITEM_TEXT, ScopeInterface::SCOPE_STORE),
  65. 'id' => 'magefan-blog',
  66. 'url' => $this->_url->getBaseUrl(),
  67. 'is_active' => ($block->getRequest()->getModuleName() == 'blog'),
  68. ];
  69. $node = new Node($data, 'id', $tree, $menu);
  70. $menu->addChild($node);
  71. }
  72. }