# quadmenu/3.3.8/lib/integrations/beaver/class-module.php

QuadMenu – Mega Menu, version 3.3.8. 311 lines.

- Page: https://pluginprobe.com/plugins/quadmenu/3.3.8/code/lib/integrations/beaver/class-module.php
- Raw: https://pluginprobe.com/plugins/quadmenu/3.3.8/raw/lib/integrations/beaver/class-module.php
- Modified: 2024-10-03T08:33:36+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/quadmenu/3.3.8/code/lib/integrations/beaver/class-module.php#L10-L20`.

```php
<?php

namespace QuadLayers\QuadMenu\Integrations\Beaver;

class Module extends \FLBuilderModule {

	private static $instance;

	public static $fl_builder_page_id;

	public function __construct() {

		parent::__construct(
			array(
				'name'            => __( 'QuadMenu', 'quadmenu' ),
				'description'     => __( 'Renders a WordPress menu.', 'quadmenu' ),
				'category'        => __( 'Actions', 'quadmenu' ),
				'partial_refresh' => true,
				'editor_export'   => false,
				'icon'            => 'hamburger-menu.svg',
			)
		);

		add_action( 'pre_get_posts', __CLASS__ . '::set_pre_get_posts_query', 10, 2 );
	}

	public static function get_attachment_data( $id ) {
		$data = wp_prepare_attachment_for_js( $id );

		if ( gettype( $data ) == 'array' ) {
			return json_decode( json_encode( $data ) );
		}

		return $data;
	}

	public static function _get_menus() {
		$get_menus = get_terms(
			'nav_menu',
			array(
				'hide_empty' => true,
			)
		);
		$fields    = array(
			'type'   => 'select',
			'label'  => __( 'Menu', 'quadmenu' ),
			'helper' => __( 'Select a WordPress menu that you created in the admin under Appearance > Menus.', 'quadmenu' ),
		);

		if ( $get_menus ) {

			foreach ( $get_menus as $key => $menu ) {

				if ( 0 == $key ) {
					$fields['default'] = $menu->name;
				}

				$menus[ $menu->slug ] = $menu->name;
			}

			$fields['options'] = $menus;
		} else {
			$fields['options'] = array(
				'' => __( 'No Menus Found', 'quadmenu' ),
			);
		}

		return $fields;
	}

	public static function set_pre_get_posts_query( $query ) {
		if ( ! is_admin() && $query->is_main_query() ) {

			if ( $query->queried_object_id ) {

				self::$fl_builder_page_id = $query->queried_object_id;
				// Fix when menu module is rendered via hook
			} elseif ( isset( $query->query_vars['page_id'] ) && 0 != $query->query_vars['page_id'] ) {
				self::$fl_builder_page_id = $query->query_vars['page_id'];
			}
		}
	}

	public static function instance() {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new self();
			// Register_module is here because it needs to be called outside the __construct, loop will ocurre if not
			self::register_module();
		}
		return self::$instance;
	}

	public static function register_module() {
		\FLBuilder::register_module(
			'\\QuadLayers\\QuadMenu\\Integrations\\Beaver\\Module',
			array(
				'general'  => array(// Tab
					'title'    => __( 'General', 'quadmenu' ), // Tab title
					'sections' => array(// Tab Sections
						'general' => array(// Section
							'title'  => '', // Section Title
							'fields' => array(// Section Fields
								'menu'   => self::_get_menus(),
								'layout' => array(
									'type'    => 'select',
									'label'   => __( 'Layout', 'quadmenu' ),
									'default' => 'collapse',
									'options' => array(
										// 'embed' => esc_html__('Embed', 'quadmenu'),
										'collapse'  => esc_html__( 'Collapse', 'quadmenu' ),
										'offcanvas' => esc_html__( 'Offcanvas', 'quadmenu' ),
										// 'vertical' => esc_html__('Vertical', 'quadmenu'),
										'inherit'   => esc_html__( 'Inherit', 'quadmenu' ),
									),
								),
								'theme'  => array(
									'type'    => 'select',
									'label'   => __( 'Theme', 'quadmenu' ),
									'default' => 'default_theme',
									'options' => $GLOBALS['quadmenu_themes'],
								),
							),
						),
						'layout'  => array(
							'title'  => __( 'Layout', 'quadmenu' ),
							'fields' => array(
								'navbar_logo'        => array(
									'type'        => 'photo',
									'label'       => esc_html__( 'Logo', 'quadmenu' ),
									'connections' => array( 'photo' ),
									'show_remove' => true,
									'default'     => QUADMENU_PLUGIN_URL . 'assets/frontend/images/logo.png',
								),
								/*
								'navbar_logo_height' => array(
									'type' => 'number',
									'label' => esc_html__('Height', 'quadmenu'),
									'description' => esc_html__('Max logo height in px.', 'quadmenu'),
									'required' => array(
										array('layout', '=', array('collapse', 'offcanvas', 'vertical', 'inherit')),
									),
									'default' => QUADMENU_PLUGIN_URL . 'assets/frontend/images/logo.png'
								),*/
								'layout_align'       => array(
									'customizer' => true,
									'transport'  => 'selective',
									'id'         => 'layout_align',
									'type'       => 'select',
									'label'      => esc_html__( 'Align', 'quadmenu' ),
									'subtitle'   => esc_html__( 'Menu items alignment.', 'quadmenu' ),
									'options'    => array(
										'left'   => esc_html__( 'Left', 'quadmenu' ),
										'center' => esc_html__( 'Center', 'quadmenu' ),
										'right'  => esc_html__( 'Right', 'quadmenu' ),
									),
									'required'   => array(
										array( 'layout', '=', array( 'embed', 'collapse', 'offcanvas' ) ),
									),
									'default'    => 'left',
								),
								// Behaviour
								// ---------------------------------------------------------
								'layout_breakpoint'  => array(
									'type'        => 'text',
									'label'       => esc_html__( 'Breakpoint', 'quadmenu' ),
									'default'     => '768',
									'maxlength'   => '4',
									'size'        => '4',
									'description' => 'px',
									'preview'     => array(
										// 'type' => 'css',
										// 'selector' => '.menu',
										// 'property' => 'font-size',
										'unit' => 'px',
									),
								),
								'layout_width'       => array(
									'type'        => 'select',
									'label'       => esc_html__( 'Width', 'quadmenu' ),
									'description' => esc_html__( 'Try to force menu width to fit screen.', 'quadmenu' ),
									'options'     => array(
										'yes'   => esc_html__( 'Yes', 'quadmenu' ),
										'false' => esc_html__( 'No', 'quadmenu' ),
									),
									'required'    => array(
										array( 'layout', '=', array( 'collapse', 'offcanvas' ) ),
									),
									'default'     => 'false',
								),
								'layout_width_inner' => array(
									'type'     => 'select',
									'label'    => esc_html__( 'Inner', 'quadmenu' ),
									'options'  => array(
										'yes'   => esc_html__( 'Yes', 'quadmenu' ),
										'false' => esc_html__( 'No', 'quadmenu' ),
									),
									'required' => array(
										array( 'layout', '=', array( 'collapse', 'offcanvas' ) ),
									),
									'default'  => 'false',
								),
								'layout_width_inner_selector' => array(
									'type'        => 'text',
									'label'       => esc_html__( 'Selector', 'quadmenu' ),
									'description' => esc_html__( 'The menu container will take the width of this selector.', 'quadmenu' ),
									'default'     => '.container',
									'required'    => array(
										array( 'layout', '=', array( 'collapse', 'offcanvas' ) ),
									),
									'required'    => array(
										array( 'layout_width_inner', '=', 1 ),
									),
								),
								'layout_lazyload'    => array(
									'type'        => 'select',
									'label'       => esc_html__( 'Lazyload', 'quadmenu' ),
									'options'     => array(
										'yes'   => esc_html__( 'Yes', 'quadmenu' ),
										'false' => esc_html__( 'No', 'quadmenu' ),
									),
									'default'     => 'false',
									'description' => esc_html__( 'This is a beta function, please test it carefully.', 'quadmenu' ),
								),
								'layout_current'     => array(
									'type'        => 'select',
									'label'       => esc_html__( 'Open', 'quadmenu' ),
									'options'     => array(
										'yes'   => esc_html__( 'Yes', 'quadmenu' ),
										'false' => esc_html__( 'No', 'quadmenu' ),
									),
									'default'     => 'false',
									'description' => esc_html__( 'Open dropdown if is current page.', 'quadmenu' ),
								),
								'layout_divider'     => array(
									'type'        => 'select',
									'label'       => esc_html__( 'Divider', 'quadmenu' ),
									'description' => esc_html__( 'Show a small divider bar between each menu item.', 'quadmenu' ),
									'options'     => array(
										'show' => esc_html__( 'Show', 'quadmenu' ),
										'hide' => esc_html__( 'Hide', 'quadmenu' ),
									),
									'required'    => array(
										array( 'layout', '=', array( 'embed', 'collapse', 'offcanvas' ) ),
									),
									'default'     => 'hide',
								),
								'layout_caret'       => array(
									'type'        => 'select',
									'label'       => esc_html__( 'Caret', 'quadmenu' ),
									'description' => esc_html__( 'Show carets on items with dropdown menus.', 'quadmenu' ),
									'options'     => array(
										'show' => esc_html__( 'Show', 'quadmenu' ),
										'hide' => esc_html__( 'Hide', 'quadmenu' ),
									),
									'required'    => array(
										array( 'layout', '=', array( 'embed', 'collapse', 'offcanvas' ) ),
									),
									'default'     => 'hide',
								),
								'layout_classes'     => array(
									'type'    => 'text',
									'label'   => esc_html__( 'Classes', 'quadmenu' ),
									'default' => '',
								),
							),
						),
					),
				),
				// Dropdown
				// ---------------------------------------------------------
				'dropdown' => array(// Tab
					'title'    => __( 'Dropdown', 'quadmenu' ), // Tab title
					'sections' => array(// Tab Sections
						'general_style' => array(
							'title'  => '',
							'fields' => array(
								'layout_trigger' => array(
									'type'     => 'select',
									'label'    => esc_html__( 'Trigger', 'quadmenu' ),
									'options'  => array(
										'hoverintent' => esc_html__( 'Hover', 'quadmenu' ),
										'click'       => esc_html__( 'Click', 'quadmenu' ),
									),
									'subtitle' => esc_html__( 'Open dropdown menu on mouseover or click.', 'quadmenu' ),
									'default'  => 'hoverintent',
									'required' => array(
										array( 'layout', '=', array( 'embed', 'collapse', 'offcanvas' ) ),
									),
								),
								'layout_dropdown_maxheight' => array(
									'type'     => 'select',
									'label'    => esc_html__( 'Max Height', 'quadmenu' ),
									'subtitle' => esc_html__( 'Set the max height of dropdowns.', 'quadmenu' ),
									'options'  => array(
										'yes'   => esc_html__( 'Yes', 'quadmenu' ),
										'false' => esc_html__( 'No', 'quadmenu' ),
									),
									'default'  => 'false',
									'required' => array(
										array( 'layout', '=', array( 'embed', 'collapse', 'offcanvas' ) ),
									),
								),
							),
						),
					),
				),
			)
		);
	}
}

```
