PluginProbe
QuadMenu – Mega Menu / 3.3.3
QuadMenu – Mega Menu v3.3.3
3.3.7 3.3.6 trunk 1.8.4 1.8.5 1.8.7 1.8.8 1.8.9 1.9.0 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 All 87 releases
quadmenu / lib / integrations / elementor / class-module.php

class-module.php in QuadMenu – Mega Menu 3.3.3, at lib/integrations/elementor/class-module.php

362 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace QuadLayers\QuadMenu\Integrations\Elementor;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 die( '-1' );
7 }
8
9 class Module extends \Elementor\Widget_Base {
10
11 public function get_name() {
12 return 'quadmenu';
13 }
14
15 public function get_title() {
16 return __( 'QuadMenu', 'quadmenu' );
17 }
18
19 public function get_icon() {
20 return 'eicon-menu-bar';
21 }
22
23 private function get_available_menus() {
24 $menus = wp_get_nav_menus();
25
26 $options = array();
27
28 foreach ( $menus as $menu ) {
29 $options[ $menu->slug ] = $menu->name;
30 }
31
32 return $options;
33 }
34
35 protected function _register_controls() {
36
37 $this->start_controls_section(
38 'general',
39 array( 'label' => esc_html__( 'QuadMenu', 'quadmenu' ) )
40 );
41
42 $menus = $this->get_available_menus();
43
44 if ( ! empty( $menus ) ) {
45 $this->add_control(
46 'menu',
47 array(
48 'label' => __( 'Menu', 'quadmenu' ),
49 'type' => \Elementor\Controls_Manager::SELECT,
50 'options' => $menus,
51 'default' => array_keys( $menus )[0],
52 'save_default' => true,
53 'separator' => 'after',
54 'description' => sprintf( __( 'Go to the <a href="%s" target="_blank">Menus screen</a> to manage your menus.', 'quadmenu' ), admin_url( 'nav-menus.php' ) ),
55 )
56 );
57 } else {
58 $this->add_control(
59 'menu',
60 array(
61 'type' => \Elementor\Controls_Manager::RAW_HTML,
62 'raw' => sprintf( __( 'There are no menus in your site.<br>Go to the <a href="%s" target="_blank">Menus screen</a> to create one.', 'quadmenu' ), admin_url( 'nav-menus.php' ) ),
63 'separator' => 'after',
64 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
65 )
66 );
67 }
68
69 $this->add_control(
70 'layout',
71 array(
72 'type' => \Elementor\Controls_Manager::SELECT,
73 'label' => __( 'Layout', 'quadmenu' ),
74 'default' => 'collapse',
75 'options' => array(
76 // 'embed' => esc_html__('Embed', 'quadmenu'),
77 'collapse' => esc_html__( 'Collapse', 'quadmenu' ),
78 'offcanvas' => esc_html__( 'Offcanvas', 'quadmenu' ),
79 // 'vertical' => esc_html__('Vertical', 'quadmenu'),
80 'inherit' => esc_html__( 'Inherit', 'quadmenu' ),
81 ),
82 )
83 );
84
85 $this->add_control(
86 'theme',
87 array(
88 'type' => \Elementor\Controls_Manager::SELECT,
89 'label' => __( 'Theme', 'quadmenu' ),
90 'default' => 'default_theme',
91 'options' => $GLOBALS['quadmenu_themes'],
92 'description' => sprintf( __( 'Go to the <a href="%s" target="_blank">QuadMenu Options</a> to manage your menu themes.', 'quadmenu' ), admin_url( 'admin.php?page=' . QUADMENU_PANEL ) ),
93 'separator' => 'after',
94 )
95 );
96
97 $this->add_control(
98 'navbar_logo',
99 array(
100 'type' => \Elementor\Controls_Manager::MEDIA,
101 'label' => __( 'Logo', 'quadmenu' ),
102 'description' => esc_html__( 'Max logo height in px.', 'quadmenu' ),
103 'default' => array(
104 'url' => QUADMENU_PLUGIN_URL . 'assets/frontend/images/logo.png',
105 ),
106 'show_label' => false,
107 )
108 );
109
110 /*
111 $this->add_control('navbar_logo_height', array(
112 'type' => Controls_Manager::SLIDER,
113 'label' => __('Height', 'quadmenu'),
114 'default' => array(
115 'unit' => 'px',
116 'size' => 25,
117 ),
118 'range' => array(
119 'px' => array(
120 'min' => 20,
121 'max' => 160,
122 ),
123 ),
124 )); */
125
126 $this->add_control(
127 'layout_align',
128 array(
129 'type' => \Elementor\Controls_Manager::SELECT,
130 'label' => esc_html__( 'Align', 'quadmenu' ),
131 'subtitle' => esc_html__( 'Menu items alignment.', 'quadmenu' ),
132 'options' => array(
133 'left' => esc_html__( 'Left', 'quadmenu' ),
134 'center' => esc_html__( 'Center', 'quadmenu' ),
135 'right' => esc_html__( 'Right', 'quadmenu' ),
136 ),
137 'condition' => array(
138 'layout' => array( 'embed', 'collapse', 'offcanvas' ),
139 ),
140 'default' => 'left',
141 )
142 );
143
144 // Behaviour
145 // ---------------------------------------------------------
146 $this->add_control(
147 'layout_breakpoint',
148 array(
149 'type' => \Elementor\Controls_Manager::SLIDER,
150 'label' => esc_html__( 'Breakpoint', 'quadmenu' ),
151 'default' => array(
152 'unit' => 'px',
153 'size' => 768,
154 ),
155 'range' => array(
156 'px' => array(
157 'min' => 10,
158 'max' => 300,
159 ),
160 ),
161 )
162 );
163
164 $this->add_control(
165 'layout_width',
166 array(
167 'type' => \Elementor\Controls_Manager::SELECT,
168 'type' => 'select',
169 'label' => esc_html__( 'Width', 'quadmenu' ),
170 'description' => esc_html__( 'Try to force menu width to fit screen.', 'quadmenu' ),
171 'options' => array(
172 'yes' => esc_html__( 'Yes', 'quadmenu' ),
173 'false' => esc_html__( 'No', 'quadmenu' ),
174 ),
175 'condition' => array(
176 'layout' => array( 'collapse', 'offcanvas' ),
177 ),
178 'default' => 'false',
179 )
180 );
181 $this->add_control(
182 'layout_width_inner',
183 array(
184 'type' => \Elementor\Controls_Manager::SELECT,
185 'label' => esc_html__( 'Inner', 'quadmenu' ),
186 'options' => array(
187 'yes' => esc_html__( 'Yes', 'quadmenu' ),
188 'false' => esc_html__( 'No', 'quadmenu' ),
189 ),
190 'condition' => array(
191 'layout' => array( 'collapse', 'offcanvas' ),
192 ),
193 'default' => 'false',
194 )
195 );
196 $this->add_control(
197 'layout_width_inner_selector',
198 array(
199 'type' => \Elementor\Controls_Manager::TEXT,
200 'label' => esc_html__( 'Selector', 'quadmenu' ),
201 'description' => esc_html__( 'The menu container will take the width of this selector.', 'quadmenu' ),
202 'default' => '.container',
203 'condition' => array(
204 'layout' => array( 'collapse', 'offcanvas' ),
205 'layout_width_inner' => 'yes',
206 ),
207 )
208 );
209 $this->add_control(
210 'layout_lazyload',
211 array(
212 'type' => \Elementor\Controls_Manager::SELECT,
213 'label' => esc_html__( 'Lazyload', 'quadmenu' ),
214 'options' => array(
215 'yes' => esc_html__( 'Yes', 'quadmenu' ),
216 'false' => esc_html__( 'No', 'quadmenu' ),
217 ),
218 'default' => 'false',
219 'description' => esc_html__( 'This is a beta function, please test it carefully.', 'quadmenu' ),
220 )
221 );
222 $this->add_control(
223 'layout_current',
224 array(
225 'type' => \Elementor\Controls_Manager::SELECT,
226 'label' => esc_html__( 'Open', 'quadmenu' ),
227 'options' => array(
228 'yes' => esc_html__( 'Yes', 'quadmenu' ),
229 'false' => esc_html__( 'No', 'quadmenu' ),
230 ),
231 'default' => 'false',
232 'description' => esc_html__( 'Open dropdown if is current page.', 'quadmenu' ),
233 )
234 );
235 $this->add_control(
236 'layout_divider',
237 array(
238 'type' => \Elementor\Controls_Manager::SELECT,
239 'label' => esc_html__( 'Divider', 'quadmenu' ),
240 'description' => esc_html__( 'Show a small divider bar between each menu item.', 'quadmenu' ),
241 'options' => array(
242 'show' => esc_html__( 'Show', 'quadmenu' ),
243 'hide' => esc_html__( 'Hide', 'quadmenu' ),
244 ),
245 'condition' => array(
246 'layout' => array( 'embed', 'collapse', 'offcanvas' ),
247 ),
248 'default' => 'hide',
249 )
250 );
251 $this->add_control(
252 'layout_caret',
253 array(
254 'type' => \Elementor\Controls_Manager::SELECT,
255 'label' => esc_html__( 'Caret', 'quadmenu' ),
256 'description' => esc_html__( 'Show carets on items with dropdown menus.', 'quadmenu' ),
257 'options' => array(
258 'show' => esc_html__( 'Show', 'quadmenu' ),
259 'hide' => esc_html__( 'Hide', 'quadmenu' ),
260 ),
261 'condition' => array(
262 'layout' => array( 'embed', 'collapse', 'offcanvas' ),
263 ),
264 'default' => 'hide',
265 )
266 );
267 $this->add_control(
268 'layout_classes',
269 array(
270 'type' => \Elementor\Controls_Manager::TEXT,
271 'label' => esc_html__( 'Classes', 'quadmenu' ),
272 'default' => '',
273 // 'separator' => 'after',
274 )
275 );
276
277 $this->add_control(
278 'layout_trigger',
279 array(
280 'type' => \Elementor\Controls_Manager::SELECT,
281 'label' => esc_html__( 'Trigger', 'quadmenu' ),
282 'options' => array(
283 'hoverintent' => esc_html__( 'Hover', 'quadmenu' ),
284 'click' => esc_html__( 'Click', 'quadmenu' ),
285 ),
286 'subtitle' => esc_html__( 'Open dropdown menu on mouseover or click.', 'quadmenu' ),
287 'default' => 'hoverintent',
288 'condition' => array(
289 'layout' => array( 'embed', 'collapse', 'offcanvas' ),
290 ),
291 )
292 );
293
294 $this->add_control(
295 'layout_dropdown_maxheight',
296 array(
297 'type' => \Elementor\Controls_Manager::SELECT,
298 'type' => 'select',
299 'label' => esc_html__( 'Max Height', 'quadmenu' ),
300 'subtitle' => esc_html__( 'Set the max height of dropdowns.', 'quadmenu' ),
301 'options' => array(
302 'yes' => esc_html__( 'Yes', 'quadmenu' ),
303 'false' => esc_html__( 'No', 'quadmenu' ),
304 ),
305 'default' => 'false',
306 'condition' => array(
307 'layout' => array( 'embed', 'collapse', 'offcanvas' ),
308 ),
309 )
310 );
311
312 $this->end_controls_section();
313 }
314
315 protected function render() {
316
317 $available_menus = $this->get_available_menus();
318
319 if ( ! $available_menus ) {
320 return;
321 }
322
323 $settings = $this->get_active_settings();
324
325 if ( ! empty( $settings['menu'] ) ) {
326
327 $args = array(
328 'echo' => false,
329 'menu' => $settings['menu'],
330 'theme' => $settings['theme'],
331 'layout' => $settings['layout'],
332 'layout_align' => $settings['layout_align'],
333 'layout_divider' => $settings['layout_divider'],
334 'layout_caret' => $settings['layout_caret'],
335 'layout_classes' => $settings['layout_classes'],
336 'layout_width' => wp_validate_boolean( $settings['layout_width'] ),
337 'layout_width_inner' => wp_validate_boolean( $settings['layout_width_inner'] ),
338 'layout_width_inner_selector' => esc_html( $settings['layout_width_inner_selector'] ),
339 'layout_lazyload' => wp_validate_boolean( $settings['layout_lazyload'] ),
340 'layout_current' => wp_validate_boolean( $settings['layout_current'] ),
341 // 'navbar_logo_height' => $settings['navbar_logo_height'],
342 );
343
344 if ( isset( $settings['navbar_logo']['url'] ) ) {
345 $args['navbar_logo']['url'] = $settings['navbar_logo']['url'];
346 }
347
348 if ( wp_doing_ajax() ) {
349 $args['layout_classes'] = 'js';
350 }
351
352 echo quadmenu( $args );
353 }
354 }
355
356 protected function content_template() {
357 }
358
359 public function render_plain_content( $instance = array() ) {
360 }
361 }
362