BxBaseMenuCustom.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaBaseView UNA Base Representation Classes
  7. *
  8. * @{
  9. */
  10. define('BX_DEF_MENU_CUSTOM_ITEM_MORE_AUTO', 'more-auto');
  11. class BxBaseMenuCustom extends BxTemplMenu
  12. {
  13. protected static $_sTmplContentCustomItem;
  14. protected $_sTmplNameCustomItemMore;
  15. protected $_sTmplNameCustomItemMorePopup;
  16. protected $_bAutoMore;
  17. protected $_aHtmlIds;
  18. public function __construct($aObject, $oTemplate = false)
  19. {
  20. parent::__construct($aObject, $oTemplate);
  21. if(empty(self::$_sTmplContentCustomItem))
  22. self::$_sTmplContentCustomItem = $this->_oTemplate->getHtml('menu_custom_item.html');
  23. $this->_sTmplNameCustomItemMore = 'menu_custom_item_more.html';
  24. $this->_sTmplNameCustomItemMorePopup = 'menu_custom_item_more_popup.html';
  25. $this->_bAutoMore = false;
  26. $sPrefix = str_replace('_', '-', $this->_sObject);
  27. $this->_aHtmlIds = array(
  28. 'more_auto_popup' => $sPrefix . '-ma-popup',
  29. );
  30. }
  31. public function getCode ()
  32. {
  33. $sResult = parent::getCode();
  34. if($this->_bAutoMore)
  35. $this->_oTemplate->addJs(array('BxDolMenuMoreAuto.js'));
  36. return $sResult;
  37. }
  38. public function getMenuItems()
  39. {
  40. $aResult = parent::getMenuItems();
  41. $sItem = BX_DEF_MENU_CUSTOM_ITEM_MORE_AUTO;
  42. if(!empty($this->_aObject['menu_items'][$sItem]) && is_array($this->_aObject['menu_items'][$sItem]) && (int)$this->_aObject['menu_items'][$sItem]['active'] == 1)
  43. $this->_bAutoMore = true;
  44. return $aResult;
  45. }
  46. protected function _getTemplateVars()
  47. {
  48. $aResult = array_merge(parent::_getTemplateVars(), array(
  49. 'bx_if:show_more_auto_class' => array(
  50. 'condition' => $this->_bAutoMore,
  51. 'content' => array()
  52. ),
  53. 'js_code' => $this->_bAutoMore ? $this->_getJsCodeMoreAuto() : ''
  54. ));
  55. return $aResult;
  56. }
  57. protected function _getJsCodeMoreAuto()
  58. {
  59. $aParams = array(
  60. 'sObject' => $this->_sObject
  61. );
  62. return $this->_oTemplate->_wrapInTagJsCode("var oMenuMoreAuto = new BxDolMenuMoreAuto(" . json_encode($aParams) . ");");
  63. }
  64. protected function _getMenuItem ($aItem)
  65. {
  66. if (isset($aItem['active']) && !$aItem['active'])
  67. return false;
  68. if (isset($aItem['visible_for_levels']) && !$this->_isVisible($aItem))
  69. return false;
  70. $sMethod = '_getMenuItem' . str_replace(' ', '', ucwords(str_replace('-', ' ', $aItem['name'])));
  71. if(!method_exists($this, $sMethod)) {
  72. $aItem = parent::_getMenuItem($aItem);
  73. if($aItem === false)
  74. return false;
  75. $sItem = $this->_getMenuItemDefault($aItem);
  76. }
  77. else
  78. $sItem = $this->$sMethod($aItem);
  79. if(empty($sItem))
  80. return false;
  81. return array(
  82. 'name' => $aItem['name'],
  83. 'class' => $this->_isSelected($aItem) ? ' bx-menu-tab-active' : '',
  84. 'item' => $sItem
  85. );
  86. }
  87. protected function _getMenuItemMoreAuto ($aItem)
  88. {
  89. $sPopup = $this->_aHtmlIds['more_auto_popup'];
  90. $aItem['onclick'] = "$(this).parents('li:first').find('#" . $sPopup . "').dolPopup({pointer: {el: $(this)}, moveToDocRoot: false});";
  91. $aItem = parent::_getMenuItem($aItem);
  92. if($aItem === false)
  93. return false;
  94. return $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMore(), array(
  95. 'item' => $this->_getMenuItemDefault($aItem),
  96. 'popup' => BxTemplFunctions::getInstance()->transBox($sPopup, $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMorePopup(), array(
  97. 'content' => ''
  98. )), true)
  99. ));
  100. }
  101. protected function _getMenuItemDefault ($aItem)
  102. {
  103. if(!isset($aItem['class_wrp']))
  104. $aItem['class_wrp'] = '';
  105. if(!isset($aItem['class_link']))
  106. $aItem['class_link'] = '';
  107. return $this->_oTemplate->parseHtmlByContent($this->_getTmplContentCustomItem(), $aItem);
  108. }
  109. protected function _getTmplNameItemMore()
  110. {
  111. return $this->_sTmplNameCustomItemMore;
  112. }
  113. protected function _getTmplNameItemMorePopup()
  114. {
  115. return $this->_sTmplNameCustomItemMorePopup;
  116. }
  117. protected function _getTmplContentCustomItem()
  118. {
  119. return self::$_sTmplContentCustomItem;
  120. }
  121. }
  122. /** @} */