1
0

BxBaseMenuCustom.php 5.1 KB

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