BxBaseMenuSwitchTemplate.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. * Site main menu representation.
  11. */
  12. class BxBaseMenuSwitchTemplate extends BxTemplMenu
  13. {
  14. public function __construct ($aObject, $oTemplate)
  15. {
  16. parent::__construct ($aObject, $oTemplate);
  17. }
  18. public function getMenuItems ()
  19. {
  20. $this->loadData();
  21. return parent::getMenuItems();
  22. }
  23. protected function loadData()
  24. {
  25. $sSelTemplate = $this->_oTemplate->getCode();
  26. $iSelMix = $this->_oTemplate->getMix();
  27. if(empty($iSelMix)) {
  28. $aSelTemplate = BxDolModuleQuery::getInstance()->getModuleByUri($sSelTemplate);
  29. $aSelMix = $this->_oQuery->getParamsMixActive($aSelTemplate['name']);
  30. }
  31. else
  32. $aSelMix = $this->_oQuery->getParamsMix($iSelMix);
  33. $sSelected = $sSelTemplate;
  34. if(!empty($aSelMix) && is_array($aSelMix) && (int)$aSelMix['published'] == 1)
  35. $sSelected = $aSelMix['name'];
  36. $this->setSelected('', $sSelected);
  37. $aPage = explode('?', $_SERVER['HTTP_REFERER']);
  38. $aPageParams = array();
  39. if(!empty($aPage[1]))
  40. parse_str($aPage[1], $aPageParams);
  41. $aItems = array();
  42. $aTemplates = get_templates_array(true, false);
  43. foreach($aTemplates as $sUri => $aTemplate) {
  44. $aPageParams['skin'] = $sUri;
  45. $aMixes = $this->_oQuery->getParamsMixes($aTemplate['name'], 1);
  46. if(empty($aMixes) || !is_array($aMixes)) {
  47. $aItems[] = array(
  48. 'id' => $sUri,
  49. 'name' => $sUri,
  50. 'class' => '',
  51. 'title' => $this->getItemTitle($sUri, $aTemplate),
  52. 'target' => '_self',
  53. 'icon' => '',
  54. 'link' => bx_html_attribute(bx_append_url_params($aPage[0], $aPageParams)),
  55. 'onclick' => ''
  56. );
  57. continue;
  58. }
  59. $aPageParamsClone = $aPageParams;
  60. foreach($aMixes as $aMix) {
  61. $aPageParamsClone['mix'] = $aMix['id'];
  62. $aItems[] = array(
  63. 'id' => $aMix['name'],
  64. 'name' => $aMix['name'],
  65. 'class' => '',
  66. 'title' => $this->getItemTitleMix($sUri, $aTemplate, $aMix),
  67. 'target' => '_self',
  68. 'icon' => '',
  69. 'link' => bx_html_attribute(bx_append_url_params($aPage[0], $aPageParamsClone)),
  70. 'onclick' => ''
  71. );
  72. }
  73. }
  74. $this->_aObject['menu_items'] = $aItems;
  75. }
  76. protected function getItemTitle($sUri, $aTemplate)
  77. {
  78. $sMask = '_sys_template_%s';
  79. if(($sTitle = $this->getTitle($sMask, $sUri)) !== false)
  80. return $sTitle;
  81. if(($sTitle = $this->getTitle($sMask, $aTemplate['name'])) !== false)
  82. return $sTitle;
  83. $sTitle = getParam($aTemplate['name'] . '_switcher_title');
  84. if(!empty($sTitle))
  85. return $sTitle;
  86. return $aTemplate['title'];
  87. }
  88. protected function getItemTitleMix($sUri, $aTemplate, $aMix)
  89. {
  90. $sMask = '_sys_template_mixed_%s_%s';
  91. if(($sTitle = $this->getTitle($sMask, $sUri, $aMix['title'])) !== false)
  92. return $sTitle;
  93. if(($sTitle = $this->getTitle($sMask, $aTemplate['name'], $aMix['title'])) !== false)
  94. return $sTitle;
  95. $sTemplateTitle = $this->getItemTitle($sUri, $aTemplate);
  96. return _t('_sys_template_mixed_mask', $sTemplateTitle, $aMix['title']);
  97. }
  98. protected function getTitle()
  99. {
  100. $aArgs = func_get_args();
  101. foreach($aArgs as $iIndex => $sArg) {
  102. if($iIndex == 0)
  103. continue;
  104. $aArgs[$iIndex] = str_replace(' ', '_', strtolower($sArg));
  105. }
  106. $sKey = call_user_func_array('sprintf', $aArgs);
  107. $sValue = _t($sKey);
  108. return strcmp($sKey, $sValue) !== 0 ? $sValue : false;
  109. }
  110. }
  111. /** @} */