File "menu.php"
Full path: /home/webide/saman-clinic.ir/wp-content/plugins/codevz-plus/elementor/widgets/menu.php
File size: 15.02 KB
MIME-type: text/x-php
Charset: utf-8
<?php if ( ! defined( 'ABSPATH' ) ) {exit;} // Exit if accessed directly.
use Codevz_Plus as Codevz_Plus;
use Elementor\Widget_Base;
use Elementor\Icons_Manager;
use Elementor\Controls_Manager;
class Xtra_Elementor_Widget_menu extends Widget_Base {
protected $id = 'cz_menu';
public function get_name() {
return $this->id;
}
public function get_title() {
return esc_html__( 'Header - Menu', 'codevz' );
}
public function get_icon() {
return 'xtra-menu';
}
public function get_categories() {
return [ 'xtra' ];
}
public function get_keywords() {
return [
esc_html__( 'codevz', 'codevz' ),
esc_html__( 'Menu', 'codevz' ),
esc_html__( 'Navigation', 'codevz' ),
];
}
public function register_controls() {
$this->start_controls_section(
'section_content',
[
'label' => esc_html__( 'Settings', 'codevz' ),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'menu_location',
[
'label' => esc_html__( 'Menu', 'codevz' ),
'type' => Controls_Manager::SELECT,
'options' => [
'' => esc_html__( '~ Select ~', 'codevz' ),
'primary' => esc_html__( 'Primary', 'codevz' ),
'secondary' => esc_html__( 'Secondary', 'codevz' ),
'one-page' => esc_html__( 'One Page', 'codevz' ),
'footer' => esc_html__( 'Footer', 'codevz' ),
'mobile' => esc_html__( 'Mobile', 'codevz' ),
'custom-1' => esc_html__( 'Custom 1', 'codevz' ),
'custom-2' => esc_html__( 'Custom 2', 'codevz' ),
'custom-3' => esc_html__( 'Custom 3', 'codevz' ),
'custom-4' => esc_html__( 'Custom 4', 'codevz' ),
'custom-5' => esc_html__( 'Custom 5', 'codevz' ),
'custom-6' => esc_html__( 'Custom 6', 'codevz' ),
'custom-7' => esc_html__( 'Custom 7', 'codevz' ),
'custom-8' => esc_html__( 'Custom 8', 'codevz' )
],
]
);
$this->add_control(
'menu_type',
[
'label' => esc_html__( 'Type', 'codevz' ),
'type' => Controls_Manager::SELECT,
'options' => [
'' => esc_html__( '~ Default ~', 'codevz' ),
'offcanvas_menu_left' => esc_html__( 'Offcanvas left', 'codevz' ),
'offcanvas_menu_right' => esc_html__( 'Offcanvas right', 'codevz' ),
'fullscreen_menu' => esc_html__( 'Full screen', 'codevz' ),
'dropdown_menu' => esc_html__( 'Dropdown', 'codevz' ),
'open_horizontal inview_left' => esc_html__( 'Sliding menu left', 'codevz' ),
'open_horizontal inview_right' => esc_html__( 'Sliding menu right', 'codevz' ),
'left_side_dots side_dots' => esc_html__( 'Vertical dots left', 'codevz' ),
'right_side_dots side_dots' => esc_html__( 'Vertical dots right', 'codevz' ),
],
]
);
$this->add_control(
'menu_position',
[
'label' => esc_html__( 'Position', 'codevz' ),
'type' => Controls_Manager::SELECT,
'options' => [
'' => esc_html__( '~ Default ~', 'codevz' ),
'cz_helm_pos_left' => esc_html__( 'Left', 'codevz' ),
'cz_helm_pos_center' => esc_html__( 'Center', 'codevz' ),
'cz_helm_pos_right' => esc_html__( 'Right', 'codevz' ),
]
]
);
$this->add_control(
'menu_icon',
[
'label' => esc_html__( 'Icon', 'codevz' ),
'type' => Controls_Manager::ICONS,
'skin' => 'inline',
'label_block' => false,
'default' => [
'value' => 'fas fa-bars',
'library' => 'fa-solid',
],
'condition' => [
'menu_type' => [
'offcanvas_menu_left',
'offcanvas_menu_right',
'fullscreen_menu',
'dropdown_menu',
'open_horizontal inview_left',
'open_horizontal inview_right'
]
]
]
);
$this->add_control(
'menu_title',
[
'label' => esc_html__( 'Title', 'codevz' ),
'type' => Controls_Manager::TEXT,
'condition' => [
'menu_type' => [
'offcanvas_menu_left',
'offcanvas_menu_right',
'fullscreen_menu',
'dropdown_menu',
'open_horizontal inview_left',
'open_horizontal inview_right'
]
]
]
);
$this->add_control(
'menu_disable_dots',
[
'label' => esc_html__( 'Disable Dots', 'codevz' ),
'type' => Controls_Manager::SWITCHER,
'condition' => [
'menu_type' => ''
]
]
);
$this->add_control(
'indicator_icon',
[
'label' => esc_html__( 'Indicator', 'codevz' ),
'type' => Controls_Manager::ICONS,
'skin' => 'inline',
'label_block' => false
]
);
$this->add_control(
'indicator_icon2',
[
'label' => esc_html__( 'Indicator Inner', 'codevz' ),
'type' => Controls_Manager::ICONS,
'skin' => 'inline',
'label_block' => false
]
);
$this->end_controls_section();
// Parallax settings.
Xtra_Elementor::parallax_settings( $this );
$this->start_controls_section(
'section_style',
[
'label' => esc_html__( 'Style', 'codevz' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'sk_menu_icon',
[
'label' => esc_html__( 'Icon', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.czi:not(.cz_close_popup), .elementor-widget-container > i:not(.cz_close_popup)' ),
]
);
$this->add_responsive_control(
'sk_menu_title',
[
'label' => esc_html__( 'Title', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.czi span, .elementor-widget-container > i span' ),
]
);
$this->add_responsive_control(
'sk_menu_con',
[
'label' => esc_html__( 'Container', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu' ),
]
);
$this->add_responsive_control(
'sk_menu_li',
[
'label' => esc_html__( 'Menus li', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz' ),
]
);
$this->add_responsive_control(
'sk_menu_a',
[
'label' => esc_html__( 'Menus', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz > a', '.sf-menu > .cz > a:hover, .sf-menu > .cz:hover > a, .sf-menu > .cz.current_menu > a, .sf-menu > .current-menu-parent > a' ),
]
);
$this->add_responsive_control(
'sk_menu_shape',
[
'label' => esc_html__( 'Shape', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz > a:before' ),
]
);
$this->add_responsive_control(
'sk_menu_subtitle',
[
'label' => esc_html__( 'Subtitle', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz > a > .cz_menu_subtitle', '.sf-menu > .cz > a:hover > .cz_menu_subtitle, .sf-menu > .cz:hover > a > .cz_menu_subtitle, .sf-menu > .cz.current_menu > a > .cz_menu_subtitle, .sf-menu > .current-menu-parent > a > .cz_menu_subtitle' ),
]
);
$this->add_responsive_control(
'sk_menu_icons',
[
'label' => esc_html__( 'Subtitle', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz > a span i', '.sf-menu > .cz > a:hover span i, .sf-menu > .cz:hover > a span i, .sf-menu > .cz.current_menu > a span i, .sf-menu > .current-menu-parent > a span i' ),
]
);
$this->add_responsive_control(
'sk_menu_indicator',
[
'label' => esc_html__( 'Indicator', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz > a .cz_indicator' ),
]
);
$this->add_responsive_control(
'sk_menu_delimiter',
[
'label' => esc_html__( 'Delimiter', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu > .cz:after' ),
]
);
$this->add_responsive_control(
'sk_menu_dropdown',
[
'label' => esc_html__( 'Dropdown', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .cz .sub-menu:not(.cz_megamenu_inner_ul), .sf-menu .cz_megamenu_inner_ul .cz_megamenu_inner_ul' ),
]
);
$this->add_responsive_control(
'sk_menu_ul_a',
[
'label' => esc_html__( 'Inner Menus', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .cz .cz a', '.sf-menu .cz .cz a:hover, .sf-menu .cz .cz:hover > a, .sf-menu .cz .cz.current_menu > a, .sf-menu .cz .current_menu > .current_menu' ),
]
);
$this->add_responsive_control(
'sk_menu_ul_a_indicator',
[
'label' => esc_html__( 'Inner Idicator', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .cz .cz a .cz_indicator' ),
]
);
$this->add_responsive_control(
'sk_menu_ul_ul',
[
'label' => esc_html__( '3rd Level', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .sub-menu .sub-menu:not(.cz_megamenu_inner_ul)' ),
]
);
$this->add_responsive_control(
'sk_menu_inner_megamenu',
[
'label' => esc_html__( 'Megamenu', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .cz_parent_megamenu > [class^="cz_megamenu_"] > .cz, .sf-menu .cz_parent_megamenu > [class*=" cz_megamenu_"] > .cz' ),
]
);
$this->add_responsive_control(
'sk_menu_a_h6',
[
'label' => esc_html__( 'Megamenu Title', 'codevz' ),
'type' => 'stylekit',
'settings' => [ 'color', 'background', 'border' ],
'selectors' => Xtra_Elementor::sk_selectors( '.sf-menu .cz .cz h6' ),
]
);
$this->end_controls_section();
}
public function render() {
$settings = $this->get_settings_for_display();
Xtra_Elementor::parallax( $settings );
//$icon = empty( $settings['shopcart_icon'] ) ? 'fa fa-bars' : $settings['shopcart_icon'];
ob_start();
Icons_Manager::render_icon( $settings['menu_icon'], [ 'class' => 'xtra-search-icon', 'data-xtra-icon' => ( empty( $settings['menu_icon'][ 'value' ] ) ? 'fa fa-bars' : $settings['menu_icon'][ 'value' ] ) ] );
$menu_icon = ob_get_clean();
$type = empty( $settings['menu_type'] ) ? 'cz_menu_default' : $settings['menu_type'];
if ( $type === 'offcanvas_menu_left' ) {
$type = 'offcanvas_menu inview_left';
} else if ( $type === 'offcanvas_menu_right' ) {
$type = 'offcanvas_menu inview_right';
}
$menu_title = isset( $settings['menu_title'] ) ? do_shortcode( $settings['menu_title'] ) : '';
$menu_icon_class = $menu_title ? ' icon_plus_text' : '';
// Pos icon.
if ( $settings[ 'menu_position' ] ) {
$menu_icon_class .= ' ' . $settings[ 'menu_position' ];
}
// Add icon and mobile menu
if ( $type && $type !== 'offcanvas_menu' && $type !== 'cz_menu_default' ) {
echo '<i class="' . esc_attr( ( empty( $settings['menu_icon'][ 'value' ] ) ? 'fa fa-bars' : $settings['menu_icon'][ 'value' ] ) . ' icon_' . $type . $menu_icon_class ) . '"><span>' . esc_html( $menu_title ) . '</span></i>';
}
if ( $settings[ 'menu_type' ] != 'offcanvas_menu_left' && $settings[ 'menu_type' ] != 'offcanvas_menu_right' ) {
$menu_icon_class .= ' hide';
}
echo '<i class="' . esc_attr( ( empty( $settings['menu_icon'][ 'value' ] ) ? 'fa fa-bars' : $settings['menu_icon'][ 'value' ] ) . ' icon_mobile_' . $type . $menu_icon_class ) . '"><span>' . esc_html( $menu_title ) . '</span></i>';
// Default
if ( empty( $settings['menu_location'] ) ) {
$settings['menu_location'] = 'primary';
}
// Check for meta box and set one page instead primary
$page_menu = Codevz_Plus::meta( 0, 'one_page' );
if ( $settings['menu_location'] === 'primary' && $page_menu ) {
$settings['menu_location'] = ( $page_menu === '1' ) ? 'one-page' : $page_menu;
}
// Disable three dots auto responsive
$type .= empty( $settings['menu_disable_dots'] ) ? '' : ' cz-not-three-dots';
// Indicators
$indicator = empty( $settings['indicator_icon'][ 'value' ] ) ? '' : $settings['indicator_icon'][ 'value' ];
$indicator2 = empty( $settings['indicator_icon2'][ 'value' ] ) ? '' : $settings['indicator_icon2'][ 'value' ];
// Pos.
if ( $settings[ 'menu_position' ] ) {
$type .= ' ' . $settings[ 'menu_position' ];
}
$rand = 'cz_menu_' . rand( 111, 999 );
// Menu
wp_nav_menu(
apply_filters( 'codevz_nav_menu',
[
'theme_location' => esc_attr( $settings['menu_location'] ),
'cz_row_id' => '',
'cz_indicator' => $indicator,
'container' => false,
'fallback_cb' => false,
'walker' => class_exists( 'Codevz_Walker_nav' ) ? new Codevz_Walker_nav() : false,
'items_wrap' => '<ul class="sf-menu clr ' . esc_attr( $rand ) . ' ' . esc_attr( $type ) . '" data-indicator="' . esc_attr( $indicator ) . '" data-indicator2="' . esc_attr( $indicator2 ) . '">%3$s</ul>'
]
)
);
echo '<i class="fa czico-198-cancel cz_close_popup xtra-close-icon hide"></i>';
// Fix live.
if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
echo '<style>.menu-item-has-children:hover > ul {display:block!important}</style>';
echo "<script>
jQuery( function( $ ) {
var x = $( '." . esc_attr( $rand ) . "' ),
indicator = x.attr( 'data-indicator' ),
indicator2 = x.attr( 'data-indicator2' );
// Menu indicators.
$( '.sub-menu', x ).parent().each( function() {
var en = $( this ),
a = en.find( '> a, > h6' );
if ( ! a.find( '.cz_indicator' ).length ) {
if ( $( '.cz_menu_subtitle', a ).length ) {
$( '.cz_menu_subtitle', a ).before( '<i class=\"cz_indicator\" aria-hidden=\"true\"></i>' );
} else {
a.append( '<i class=\"cz_indicator\" aria-hidden=\"true\"></i>' );
}
}
if ( indicator || indicator2 ) {
$( '.cz_indicator', a ).addClass( a.closest( '.sub-menu' ).length ? indicator2 : indicator );
}
if ( ! en.find( 'li, div' ).length ) {
en.find( '.cz_indicator' ).remove();
en.next( 'ul' ).remove();
}
});
});
</script>";
}
Xtra_Elementor::parallax( $settings, true );
}
}