класс FastwpAltiusMenu {
private static $nav_template = '';
private static $nav_overlay = '';
function __construct() {
global $fastwp_altius_data, $fastwp_altius_menu_type;
$templates = array();
$templates[1] = array( 'nav' => 'fastwp-menu-default', 'overlay' => '' );
$templates[2] = array( 'nav' => 'fastwp-menu-overlay', 'overlay' => 'fastwp-menu-overlay2' );
if( is_page() ) {
$fastwp_altius_meta_type = get_post_meta( get_the_ID(), 'p_nav_style', true );
if( $fastwp_altius_meta_type == 1 || $fastwp_altius_meta_type == 2 ) {
$fastwp_altius_data['nav_style'] = $fastwp_altius_meta_type;
}
}
$menu = !empty( $fastwp_altius_data['nav_style'] ) && in_array( (int) $fastwp_altius_data['nav_style'], array_keys( $templates ) ) ? (int) $fastwp_altius_data['nav_style'] : 1;
$fastwp_altius_menu_type= $menu;
self::$nav_template = $templates[$menu]['nav'];
self::$nav_overlay = $templates[$menu]['overlay'];
}
public static function nav( $echo = true ) {
if( (boolean) $echo ) {
echo get_template_part( 'fastwp/menu/' . self::$nav_template );
}
ob_start();
get_template_part( 'fastwp/menu/' . self::$nav_template );
$content = ob_get_contents();
ob_end_clean();
return $content;
}
public static function overlay( $echo = true ) {
$nav_overlay = self::$nav_overlay;
if( !empty( $nav_overlay ) ) {
if( (boolean) $echo ) {
echo get_template_part( 'fastwp/menu/' . $nav_overlay );
}
ob_start();
get_template_part( 'fastwp/menu/' . $nav_overlay );
$content = ob_get_contents();
ob_end_clean();
return $content;
}
}
}
класс FastwpAltiusWalker {
var $one_page = false;
function __construct( $menu_id, $menu = 0 ) {
$this->override_menu = $menu;
$elements = $this->nice_elements( $menu_id );
$this->main_elements = isset( $elements['main'] ) ? $elements['main'] : array();
$this->subnav_elements = isset( $elements['subnav'] ) ? $elements['subnav'] : array();
}
function set_onePage() {
$this->one_page = true;
}
function add_one_page_section( $item ) {
if( $this->one_page ) {
global $fastwp_altius_one_page_sections;
if( $item->object == 'page' ) {
if( empty( $fastwp_altius_one_page_sections ) ) $fastwp_altius_one_page_sections = array();
$section_name = preg_replace( '/[^a-z0-9_]/i', '', str_replace( ' ', '_', $item->title ) );
if( in_array( $section_name, array_keys( $fastwp_altius_one_page_sections ) ) ) {
$section_name = $section_name . '_' . $item->ID;
}
$fastwp_altius_one_page_sections[$section_name] = $item->object_id;
return '#section-' . $section_name;
}
}
return $item->url;
}
function get_menu() {
$output = '';
if( !empty( $this->main_elements ) ) {
/* Add Visual Composer meta */
global $fastwp_altius_one_page_css_vc;
$fastwp_altius_one_page_css_vc = array();
foreach( $this->main_elements as $item ) {
$item = $item[0];
$typeparent = get_post_meta( $item->ID, '_menu_item_menutype', true );
/* Add Visual Composer meta */
if( isset( $item->object_id ) ) {
$fastwp_altius_one_page_css_vc[$item->object_id] = get_post_meta( $item->object_id, '_wpb_shortcodes_custom_css', true );
}
$a_classes = $li_classes = $a_atts = $li_atts = array();
if( get_the_ID() == $item->object_id ) {
$li_classes[] = 'current';
}
if( isset( $item->hasChildren ) && $item->hasChildren ) {
$a_classes[] = 'sf-with-ul';
}
if( isset( $this->subnav_elements[$item->ID] ) ) {
$li_classes[] = 'parentMenuItem';
}
if( !empty( $item->classes ) ) {
$a_classes[] = implode( ' ', $item->classes );
}
$childrens = '';
if( $typeparent == 'mega2' ) {
$li_classes[] = 'dropDown megaMenu';
$items_array = $this->levels_recursive_array( $item->ID );
unset( $items_array['subnav'] );
$items_per_col = ceil( count( $items_array ) / 2 );
$col1_items = $col2_items = '';
foreach( $items_array as $k => $mitem ) {
$typechild = get_post_meta( $mitem->ID, '_menu_item_menutype2', true );
if( $k >= $items_per_col ) {
$col2_items .= $this->link_type( $mitem, $typechild );
} else {
$col1_items .= $this->link_type( $mitem, $typechild );
}
}
$childrens = '<div class="megaMenuContent cols2 clearfix">';
$childrens .= '<ul>' . $col1_items . '</ul>';
$childrens .= '<ul>' . $col2_items . '</ul>';
$childrens .= '</div>';
} else if( $typeparent == 'mega3' ) {
$li_classes[] = 'dropDown megaMenu';
$items_array = $this->levels_recursive_array( $item->ID );
unset( $items_array['subnav'] );
$items_per_col = ceil( count( $items_array ) / 3 );
$col1_items = $col2_items = $col3_items = '';
foreach( $items_array as $k => $mitem ) {
$typechild = get_post_meta( $mitem->ID, '_menu_item_menutype2', true );
if( $k < $items_per_col ) {
$col1_items .= $this->link_type( $mitem, $typechild );
} else if( $k/2 >= $items_per_col ) {
$col3_items .= $this->link_type( $mitem, $typechild );
} else {
$col2_items .= $this->link_type( $mitem, $typechild );
}
}
$childrens = '<div class="megaMenuContent cols3 clearfix">';
$childrens .= '<ul>' . $col1_items . '</ul>';
$childrens .= '<ul>' . $col2_items . '</ul>';
$childrens .= '<ul>' . $col3_items . '</ul>';
$childrens .= '</div>';
} else {
$childrens = $this->levels_recursive( $item->ID );
}
$output .= sprintf( "\n" . '<li%s%s><a href="%s"%s%s>%s</a>%s</li>',
( !empty( $li_classes ) ? ' class="' . implode( $li_classes, ' ' ) . '"' : '' ),
( !empty( $li_atts ) ? ' ' . implode( ' ', $li_atts ) : '' ),
$this->add_one_page_section( $item ),
( !empty( $a_classes ) ? ' class="' . implode( $a_classes, ' ' ) . '"' : ' ' ),
( !empty( $a_atts ) ? ' ' . implode( ' ', $a_atts ) : '' ),
$item->title,
$childrens );
}
}
return $output;
}
function link_type( $item = '', $type = '' ) {
$li_classes = array();
if( get_the_ID() == $item->object_id ) {
$li_classes[] = 'current';
}
if( $type == 'title' ) {
return '<li class="megaMenuTitle' . ( !empty( $li_classes ) ? ' ' . implode( ' ', $li_classes ) : '' ) . '">' . $item->title . '</li>';
} else {
return '<li' . ( !empty( $li_classes ) ? ' class="' . implode( ' ', $li_classes ) . '"' : '' ) . '><a href="' . $this->add_one_page_section( $item ) . '">' . $item->title . '</a></li>';
}
}
function levels_recursive( $parent = 0, $level = 1 ) {
if( empty( $parent ) ) return ;
$output = '';
if( isset( $this->subnav_elements[$parent] ) ) {
$output .= '<ul class="fastwp-menu-level-' . $level . '">';
foreach( $this->subnav_elements[$parent] as $item ) {
$output .= '<li' . ( $this->item_has_children( $item->ID ) ? ' class="dropDown"' : '' ) . '><a href="' . $this->add_one_page_section( $item ) . '">' . $item->title . '</a>';
$output .= $this->levels_recursive( $item->ID, ($level+1) );
$output .= '</li>';
}
$output .= '</ul>';
}
return $output;
}
function item_has_children( $item = '' ) {
if( in_array( $item, array_keys( $this->subnav_elements ) ) ) {
return true;
}
return false;
}
function levels_recursive_array( $parent = 0 ) {
if( empty( $parent ) ) return array();
$output = array();
if( isset( $this->subnav_elements[$parent] ) ) {
foreach( $this->subnav_elements[$parent] as $item ) {
$output[] = $item;
$output['subnav'] = $this->levels_recursive( $item->ID );
}
}
return $output;
}
function nice_elements( $menu_id ) {
$elements = array();
foreach( $this->get_elements( $menu_id ) as $element ) {
if( !empty( $element->menu_item_parent ) ) {
$elements['subnav'][$element->menu_item_parent][] = $element;
} else {
$elements['main'][$element->ID][] = $element;
}
}
return $elements;
}
function get_elements( $menu_id = 'primary' ) {
$locations = get_nav_menu_locations();
if( !empty( $this->override_menu ) ) {
$menu = $this->override_menu;
} else {
$menu = $locations[$menu_id];
}
$elems = wp_get_nav_menu_items( get_term( $menu, 'nav_menu' ), array( 'depth' => 1 ) );
$return_elems = array();
foreach( $elems as $elem ) {
$return_elems[] = $elem;
}
return $return_elems;
}
}