BxBaseMenuCustom.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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';
  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("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. $sItem = $this->_getMenuItemDefault($aItem);
  79. }
  80. else
  81. $sItem = $this->$sMethod($aItem);
  82. if(empty($sItem))
  83. return false;
  84. return array(
  85. 'name' => $aItem['name'],
  86. 'class' => $this->_isSelected($aItem) ? ' bx-menu-tab-active' : '',
  87. 'item' => $sItem
  88. );
  89. }
  90. protected function _getMenuItemMoreAuto ($aItem)
  91. {
  92. $aItem['onclick'] = $this->_sJsObjectMoreAuto . '.more(this);';
  93. $aItem = parent::_getMenuItem($aItem);
  94. if($aItem === false)
  95. return false;
  96. return $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMore(), array(
  97. 'item' => $this->_getMenuItemDefault($aItem),
  98. 'popup' => BxTemplFunctions::getInstance()->transBox($this->_aHtmlIds['more_auto_popup'], $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMorePopup(), array(
  99. 'content' => ''
  100. )), true)
  101. ));
  102. }
  103. protected function _getMenuItemDefault ($aItem)
  104. {
  105. if(!isset($aItem['class_wrp']))
  106. $aItem['class_wrp'] = '';
  107. if(!isset($aItem['class_link']))
  108. $aItem['class_link'] = '';
  109. return $this->_oTemplate->parseHtmlByContent($this->_getTmplContentItem(), $aItem);
  110. }
  111. protected function _getTmplNameItemMore()
  112. {
  113. return $this->_sTmplNameCustomItemMore;
  114. }
  115. protected function _getTmplNameItemMorePopup()
  116. {
  117. return $this->_sTmplNameCustomItemMorePopup;
  118. }
  119. protected function _getTmplContentItem()
  120. {
  121. return self::$_sTmplContentItem;
  122. }
  123. }
  124. /** @} */