startControlsSection( 'section_selector', [ 'label' => $this->getTitle(), ] ); $this->addControl( 'skin', [ 'label' => __('Skin'), 'type' => ControlsManager::SELECT, 'default' => 'dropdown', 'options' => [ 'classic' => __('Classic'), 'dropdown' => __('Dropdown'), ], 'separator' => 'after', ] ); $this->addControl( 'content', [ 'label' => __('Content'), 'label_block' => true, 'type' => ControlsManager::SELECT2, 'default' => ['name'], 'options' => [ 'flag' => __('Country Flag'), 'code' => __('ISO Code'), 'name' => __('Language'), ], 'multiple' => true, ] ); $this->addControl( 'show_current', [ 'label' => __('Current Language'), 'type' => ControlsManager::SWITCHER, 'label_on' => __('Show'), 'label_off' => __('Hide'), 'prefix_class' => 'elementor-nav--', 'return_value' => 'active', ] ); $this->registerNavContentControls([ 'layout_options' => [ 'horizontal' => __('Horizontal'), 'vertical' => __('Vertical'), ], 'submenu_condition' => [ 'skin' => 'dropdown', ], ]); $this->endControlsSection(); $this->registerNavStyleSection([ 'active_condition' => [ 'show_current!' => '', ], 'space_between_condition' => [ 'skin' => 'classic', ], ]); $this->registerDropdownStyleSection([ 'dropdown_condition' => [ 'skin' => 'dropdown', ], 'active_condition' => [ 'show_current!' => '', ], ]); } protected function getHtmlWrapperClass() { return parent::getHtmlWrapperClass() . ' elementor-widget-nav-menu'; } /** * Render language selector widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 2.5.0 * @access protected * @codingStandardsIgnoreStart Generic.Files.LineLength */ protected function render() { $settings = $this->getActiveSettings(); $context = \Context::getContext(); $languages = \Language::getLanguages(true, $context->shop->id); if (count($languages) <= 1 || !$settings['content']) { return; } $this->indicator = $settings['indicator']; $this->lang_flag = in_array('flag', $settings['content']); $this->lang_code = in_array('code', $settings['content']); $this->lang_name = in_array('name', $settings['content']); $id_lang = $context->language->id; $menu = [ '0' => [ 'id_lang' => $id_lang, 'name' => $context->language->name, 'iso_code' => $context->language->iso_code, 'url' => 'javascript:;', 'current' => false, 'children' => [], ] ]; foreach ($languages as &$lang) { $lang['current'] = $id_lang == $lang['id_lang']; $lang['url'] = $context->link->getLanguageLink($lang['id_lang']); if ($context->controller instanceof \IndexController) { // Remove rewritten URL from home page $lang['url'] = preg_replace('~[^/]+$~', '', $lang['url']); } $menu[0]['children'][] = $lang; } if ('classic' === $settings['skin']) { $menu = &$menu[0]['children']; } $ul_class = 'elementor-nav'; if ('vertical' === $settings['layout']) { $ul_class .= ' sm-vertical'; } // General Menu. ob_start(); $this->selectorList($menu, 0, $ul_class); $menu_html = ob_get_clean(); $this->addRenderAttribute('main-menu', 'class', [ 'elementor-langs', 'elementor-nav--main', 'elementor-nav__container', 'elementor-nav--layout-' . $settings['layout'], ]); if ('none' !== $settings['pointer']) { $animation_type = self::getPointerAnimationType($settings['pointer']); $this->addRenderAttribute('main-menu', 'class', [ 'e--pointer-' . $settings['pointer'], 'e--animation-' . $settings[$animation_type], ]); } ?>