BxBaseMenuCustom.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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 $_sTmplContentItem;
  14. protected $_sTmplNameCustomItemMore;
  15. protected $_sTmplNameCustomItemMorePopup;
  16. protected $_bMoreAuto;
  17. protected $_sJsObjectMoreAuto;
  18. protected $_aHtmlIds;
  19. public function __construct($aObject, $oTemplate = false)
  20. {
  21. parent::__construct($aObject, $oTemplate);
  22. if(empty(self::$_sTmplContentItem))
  23. self::$_sTmplContentItem = $this->_oTemplate->getHtml('menu_custom_item.html');
  24. $this->_sTmplNameCustomItemMore = 'menu_custom_item_more.html';
  25. $this->_sTmplNameCustomItemMorePopup = 'menu_custom_item_more_popup.html';
  26. $this->_bMoreAuto = false;
  27. $this->_sJsObjectMoreAuto = 'oMenuMoreAuto' . bx_gen_method_name($this->_sObject);
  28. $sPrefix = str_replace('_', '-', $this->_sObject);
  29. $this->_aHtmlIds = array(
  30. 'more_auto_popup' => $sPrefix . '-ma-popup',
  31. );
  32. }
  33. public function getCode ()
  34. {
  35. $sResult = parent::getCode();
  36. if($this->_bMoreAuto)
  37. $this->_oTemplate->addJs(array('BxDolMenuMoreAuto.js'));
  38. return $sResult;
  39. }
  40. public function getMenuItems()
  41. {
  42. $aResult = parent::getMenuItems();
  43. $sItem = BX_DEF_MENU_CUSTOM_ITEM_MORE_AUTO;
  44. if(!empty($this->_aObject['menu_items'][$sItem]) && is_array($this->_aObject['menu_items'][$sItem]) && (int)$this->_aObject['menu_items'][$sItem]['active'] == 1)
  45. $this->_bMoreAuto = true;
  46. return $aResult;
  47. }
  48. protected function _getTemplateVars()
  49. {
  50. $aResult = array_merge(parent::_getTemplateVars(), array(
  51. 'bx_if:show_more_auto_class' => array(
  52. 'condition' => $this->_bMoreAuto,
  53. 'content' => array()
  54. ),
  55. 'js_code' => $this->_bMoreAuto ? $this->_getJsCodeMoreAuto() : ''
  56. ));
  57. return $aResult;
  58. }
  59. protected function _getJsCodeMoreAuto()
  60. {
  61. $aParams = array(
  62. 'sObject' => $this->_sObject,
  63. 'aHtmlIds' => $this->_aHtmlIds
  64. );
  65. return $this->_oTemplate->_wrapInTagJsCode("if(!" . $this->_sJsObjectMoreAuto . ") var " . $this->_sJsObjectMoreAuto . " = new BxDolMenuMoreAuto(" . json_encode($aParams) . ");");
  66. }
  67. protected function _getMenuItem ($aItem)
  68. {
  69. if (isset($aItem['active']) && !$aItem['active'])
  70. return false;
  71. if (isset($aItem['visible_for_levels']) && !$this->_isVisible($aItem))
  72. return false;
  73. $sMethod = '_getMenuItem' . str_replace(' ', '', ucwords(str_replace('-', ' ', $aItem['name'])));
  74. if(!method_exists($this, $sMethod)) {
  75. $aItem = parent::_getMenuItem($aItem);
  76. if($aItem === false)
  77. return false;
  78. $mixedItem = $this->_getMenuItemDefault($aItem);
  79. }
  80. else
  81. $mixedItem = $this->$sMethod($aItem);
  82. if(empty($mixedItem))
  83. return false;
  84. $sItem = $sClass = '';
  85. if(is_array($mixedItem))
  86. list($sItem, $sClass) = $mixedItem;
  87. else
  88. $sItem = $mixedItem;
  89. if(!empty($sClass))
  90. $sClass = ' ' . $sClass;
  91. if($this->_isSelected($aItem))
  92. $sClass .= ' bx-menu-tab-active';
  93. return array(
  94. 'name' => $aItem['name'],
  95. 'class' => $sClass,
  96. 'item' => $sItem
  97. );
  98. }
  99. protected function _getMenuItemMoreAuto ($aItem)
  100. {
  101. $aItem['onclick'] = $this->_sJsObjectMoreAuto . '.more(this);';
  102. $aItem = parent::_getMenuItem($aItem);
  103. if($aItem === false)
  104. return false;
  105. return $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMore(), array(
  106. 'item' => $this->_getMenuItemDefault($aItem),
  107. 'popup' => BxTemplFunctions::getInstance()->transBox($this->_aHtmlIds['more_auto_popup'], $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMorePopup(), array(
  108. 'content' => ''
  109. )), true)
  110. ));
  111. }
  112. protected function _getMenuItemDefault ($aItem)
  113. {
  114. if(!isset($aItem['class_wrp']))
  115. $aItem['class_wrp'] = '';
  116. if(!isset($aItem['class_link']))
  117. $aItem['class_link'] = '';
  118. return $this->_oTemplate->parseHtmlByContent($this->_getTmplContentItem(), $aItem);
  119. }
  120. protected function _getTmplNameItemMore()
  121. {
  122. return $this->_sTmplNameCustomItemMore;
  123. }
  124. protected function _getTmplNameItemMorePopup()
  125. {
  126. return $this->_sTmplNameCustomItemMorePopup;
  127. }
  128. protected function _getTmplContentItem()
  129. {
  130. return self::$_sTmplContentItem;
  131. }
  132. }
  133. /** @} */