vendor/dklemmt/contao_dk_mmenu/src/Helper/MmenuHelper.php line 122

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the ContaoMmenuBundle.
  5.  *
  6.  * (c) Dirk Klemmt
  7.  * (c) inspiredminds
  8.  *
  9.  * @license MIT
  10.  */
  11. namespace DirkKlemmt\ContaoMmenuBundle\Helper;
  12. use Contao\Controller;
  13. use Contao\FrontendTemplate;
  14. use Contao\Module;
  15. use Contao\StringUtil;
  16. use DirkKlemmt\ContaoMmenuBundle\Model\MmenuConfigModel;
  17. class MmenuHelper
  18. {
  19.     /**
  20.      * Process the mmenu module's settings and adds the JavaScript to TL_BODY.
  21.      */
  22.     public static function processModuleSettings(Module $modulestring $jsTemplateName): void
  23.     {
  24.         // Load the config
  25.         if (empty($module->dk_mmenuConfig) || !($config MmenuConfigModel::findByPk($module->dk_mmenuConfig)) instanceof MmenuConfigModel) {
  26.             return;
  27.         }
  28.         // Check for a valid CSS ID
  29.         $cssID $module->cssID;
  30.         if (empty($cssID[0])) {
  31.             $cssID[0] = $module->type.'-'.substr(md5($module->type.$module->id), 08);
  32.             $module->cssID $cssID;
  33.         }
  34.         // Create the JavaScript template
  35.         $jsTemplate = new FrontendTemplate($jsTemplateName);
  36.         $jsTemplate->elementId $cssID[0];
  37.         // Prepare the options and configuration for mmenu
  38.         $options = [];
  39.         $configuration = [
  40.             'classNames' => [
  41.                 'selected' => 'active',
  42.             ],
  43.         ];
  44.         if (!empty($config->navbarTitle)) {
  45.             $options['navbar']['title'] = $config->navbarTitle;
  46.         } elseif ('en' !== $GLOBALS['TL_LANGUAGE']) {
  47.             $options['navbar']['title'] = $GLOBALS['TL_LANG']['DK_MMENU']['title'];
  48.         }
  49.         // https://mmenujs.com/docs/core/off-canvas.html
  50.         if ($config->pageSelector) {
  51.             $configuration['offCanvas']['page']['selector'] = StringUtil::decodeEntities($config->pageSelector);
  52.         }
  53.         if (\in_array($config->position, ['left''right''top''bottom'], true)) {
  54.             $options['offCanvas']['position'] = $config->position;
  55.         }
  56.         if ('back' !== $config->zposition && \in_array($config->position, ['left''right'], true)) {
  57.             $options['offCanvas']['position'] = $config->position.'-'.$config->zposition;
  58.         }
  59.         // https://mmenujs.com/docs/core/options.html
  60.         if ('vertical' === $config->slidingSubmenus) {
  61.             $options['slidingSubmenus'] = false;
  62.         }
  63.         // https://mmenujs.com/docs/core/theme.html
  64.         if (\in_array($config->theme, ['light''dark''white''black'], true)) {
  65.             $options['theme'] = $config->theme;
  66.             if ($config->themeHighContrast) {
  67.                 $options['theme'] = $config->theme.'-contrast';
  68.             }
  69.         }
  70.         // https://mmenujs.com/docs/addons/counters.html
  71.         if ($config->countersAdd) {
  72.             $options['counters']['add'] = true;
  73.         }
  74.         // https://mmenujs.com/docs/addons/searchfield.html
  75.         if ($config->searchfieldAdd) {
  76.             $options['navbars'] = [
  77.                 [
  78.                     'position' => 'top',
  79.                     'content' => [
  80.                         'searchfield',
  81.                     ],
  82.                 ],
  83.             ];
  84.             if ('en' !== $GLOBALS['TL_LANGUAGE']) {
  85.                 $options['searchfield']['noResults'] = $GLOBALS['TL_LANG']['DK_MMENU']['noResult'];
  86.                 $options['searchfield']['placeholder'] = $GLOBALS['TL_LANG']['DK_MMENU']['placeholder'];
  87.             }
  88.         }
  89.         // https://mmenujs.com/docs/addons/icon-panels.html
  90.         if ($config->iconPanels) {
  91.             $options['iconPanels'] = [
  92.                 'add' => true,
  93.                 'visible' => 1,
  94.             ];
  95.         }
  96.         // Add options and configuration to JavaScript template
  97.         $jsTemplate->options $options;
  98.         $jsTemplate->configuration $configuration;
  99.         // Add module JavaScript (and replace insert tags, see #66)
  100.         $GLOBALS['TL_BODY'][] = Controller::replaceInsertTags($jsTemplate->parse());
  101.     }
  102. }