/** * Output by custom grid */ public function output_by_custom($grid_preview = false, $only_elements = false) { $post_limit = 99999; $base = new Essential_Grid_Base(); $navigation_c = new Essential_Grid_Navigation($this->grid_id); $item_skin = new Essential_Grid_Item_Skin(); $item_skin->grid_id = $this->grid_id; $item_skin->set_grid_type($base->getVar($this->grid_params, 'layout', 'even')); $item_skin->set_default_image_by_id($base->getVar($this->grid_postparams, 'default-image', 0, 'i')); $m = new Essential_Grid_Meta(); $skins_html = ''; $skins_css = ''; $filters = array(); $rows_unlimited = $base->getVar($this->grid_params, 'rows-unlimited', 'on'); $load_more = $base->getVar($this->grid_params, 'load-more', 'none'); $load_more_start = $base->getVar($this->grid_params, 'load-more-start', 3, 'i'); if ($rows_unlimited == 'on' && $load_more !== 'none' && $grid_preview == false) { //grid_preview means disable load more in preview $post_limit = $load_more_start; } $nav_filters = array(); $nav_layout = $base->getVar($this->grid_params, 'navigation-layout', array()); $nav_skin = $base->getVar($this->grid_params, 'navigation-skin', 'minimal-light'); $hover_animation = $base->getVar($this->grid_params, 'hover-animation', 'fade'); $filter_allow = $base->getVar($this->grid_params, 'filter-arrows', 'single'); $filter_start = $base->getVar($this->grid_params, 'filter-start', ''); $filter_all_text = $base->getVar($this->grid_params, 'filter-all-text', __('Filter - All', EG_TEXTDOMAIN)); $filter_dropdown_text = $base->getVar($this->grid_params, 'filter-dropdown-text', __('Filter Categories', EG_TEXTDOMAIN)); $show_count = $base->getVar($this->grid_params, 'filter-counter', 'off'); $search_text = $base->getVar($this->grid_params, 'search-text', __('Search...', EG_TEXTDOMAIN)); $filter_grouping = $base->getVar($this->grid_params, 'filter-grouping', 'false'); $listing_type = $base->getVar($this->grid_params, 'filter-listing', 'list'); //$selected = $base->getVar($this->grid_params, 'filter-selected', array()); $filters_arr['filter-grouping'] = $filter_grouping; $filters_arr['filter-listing'] = $listing_type; $filters_arr['filter-selected'] = array(); //always give empty array (metas ect. may still be checked if Grid was a post based grid before. $navigation_c->set_filter_settings('filter', $filters_arr); $nav_type = $base->getVar($this->grid_params, 'nagivation-type', 'internal'); $do_nav = $nav_type == 'internal' ? true : false; $order_by = explode(',', $base->getVar($this->grid_params, 'sorting-order-by', 'date')); if (!is_array($order_by)) { $order_by = array($order_by); } $order_by_start = $base->getVar($this->grid_params, 'sorting-order-by-start', 'none'); $sort_by_text = $base->getVar($this->grid_params, 'sort-by-text', __('Sort By ', EG_TEXTDOMAIN)); $module_spacings = $base->getVar($this->grid_params, 'module-spacings', '5'); $top_1_align = $base->getVar($this->grid_params, 'top-1-align', 'center'); $top_2_align = $base->getVar($this->grid_params, 'top-2-align', 'center'); $bottom_1_align = $base->getVar($this->grid_params, 'bottom-1-align', 'center'); $bottom_2_align = $base->getVar($this->grid_params, 'bottom-2-align', 'center'); $top_1_margin = $base->getVar($this->grid_params, 'top-1-margin-bottom', 0, 'i'); $top_2_margin = $base->getVar($this->grid_params, 'top-2-margin-bottom', 0, 'i'); $bottom_1_margin = $base->getVar($this->grid_params, 'bottom-1-margin-top', 0, 'i'); $bottom_2_margin = $base->getVar($this->grid_params, 'bottom-2-margin-top', 0, 'i'); $left_margin = $base->getVar($this->grid_params, 'left-margin-left', 0, 'i'); $right_margin = $base->getVar($this->grid_params, 'right-margin-right', 0, 'i'); $nav_styles['top-1'] = array('margin-bottom' => $top_1_margin . 'px', 'text-align' => $top_1_align); $nav_styles['top-2'] = array('margin-bottom' => $top_2_margin . 'px', 'text-align' => $top_2_align); $nav_styles['left'] = array('margin-left' => $left_margin . 'px'); $nav_styles['right'] = array('margin-right' => $right_margin . 'px'); $nav_styles['bottom-1'] = array('margin-top' => $bottom_1_margin . 'px', 'text-align' => $bottom_1_align); $nav_styles['bottom-2'] = array('margin-top' => $bottom_2_margin . 'px', 'text-align' => $bottom_2_align); if ($do_nav) { //only do if internal is selected $navigation_c->set_special_class('esg-fgc-' . $this->grid_id); $navigation_c->set_dropdown_text($filter_dropdown_text); $navigation_c->set_show_count($show_count); $navigation_c->set_filter_text($filter_all_text); $navigation_c->set_specific_styles($nav_styles); $navigation_c->set_search_text($search_text); $navigation_c->set_layout($nav_layout); //set the layout $navigation_c->set_orders($order_by); //set order of filter $navigation_c->set_orders_text($sort_by_text); $navigation_c->set_orders_start($order_by_start); //set order of filter } $item_skin->init_by_id($base->getVar($this->grid_params, 'entry-skin', 0, 'i')); $lazy_load = $base->getVar($this->grid_params, 'lazy-loading', 'off'); if ($lazy_load == 'on') { $item_skin->set_lazy_load(true); } $default_media_source_order = $base->getVar($this->grid_postparams, 'media-source-order', ''); $item_skin->set_default_media_source_order($default_media_source_order); $default_lightbox_source_order = $base->getVar($this->grid_params, 'lb-source-order', ''); $item_skin->set_default_lightbox_source_order($default_lightbox_source_order); $default_aj_source_order = $base->getVar($this->grid_params, 'aj-source-order', ''); $item_skin->set_default_ajax_source_order($default_aj_source_order); $post_media_source_type = $base->getVar($this->grid_postparams, 'image-source-type', 'full'); $default_video_poster_order = $base->getVar($this->grid_params, 'poster-source-order', ''); $item_skin->set_default_video_poster_order($default_video_poster_order); $layout = $base->getVar($this->grid_params, 'layout', 'even'); $layout_sizing = $base->getVar($this->grid_params, 'layout-sizing', 'boxed'); $ajax_container_position = $base->getVar($this->grid_params, 'ajax-container-position', 'top'); if ($layout_sizing !== 'fullwidth' && $layout == 'masonry') { $item_skin->set_poster_cropping(true); } $skins_css = ''; $skins_html = ''; $found_filter = array(); $i = 1; if (!empty($order_by_start) && !empty($this->grid_layers)) { if (is_array($order_by_start)) { foreach ($order_by_start as $c_order) { if ($c_order == 'rand') { $this->grid_layers = $base->shuffle_assoc($this->grid_layers); break; } } } else { if ($order_by_start == 'rand') { $this->grid_layers = $base->shuffle_assoc($this->grid_layers); } } } if (!empty($this->grid_layers) && count($this->grid_layers) > 0) { foreach ($this->grid_layers as $key => $entry) { $post_media_source_data = $base->get_custom_media_source_data($entry, $post_media_source_type); $post_video_ratios = $m->get_custom_video_ratios($entry); $filters = array(); if (is_array($order_by) && !empty($order_by)) { //$sort = $this->prepare_sorting_array_by_post($post, $order_by); //$item_skin->set_sorting($sort); } if (!empty($entry['custom-filter'])) { $cats = explode(',', $entry['custom-filter']); if (!is_array($cats)) { $cats = (array) $cats; } foreach ($cats as $category) { $filters[sanitize_key($category)] = array('name' => $category, 'slug' => sanitize_key($category)); } } $found_filter = $found_filter + $filters; //these are the found filters, only show filter that the posts have //switch to different skin $use_item_skin_id = $base->getVar($entry, 'use-skin', '-1'); if (intval($use_item_skin_id) === 0) { $use_item_skin_id = -1; } $item_skin->switch_item_skin($use_item_skin_id); $item_skin->register_layer_css(); $item_skin->register_skin_css(); if ($i > $post_limit) { $this->load_more_post_array[$key] = $filters; //set for load more, only on elements that will not be loaded from beginning continue; //Load only selected numbers of items at start (for load more) } $i++; $item_skin->set_filter($filters); $item_skin->set_media_sources($post_media_source_data); $item_skin->set_media_sources_type($post_media_source_type); $item_skin->set_video_ratios($post_video_ratios); $item_skin->set_layer_values($entry); ob_start(); $item_skin->output_item_skin($grid_preview); $skins_html .= ob_get_contents(); ob_clean(); ob_end_clean(); if ($only_elements == false && $grid_preview == false) { ob_start(); $item_skin->output_element_css_by_meta(); $skins_css .= ob_get_contents(); ob_clean(); ob_end_clean(); } } } if ($grid_preview !== false && $only_elements == false) { //add the add more box at the end ob_start(); $item_skin->output_add_more(); $skins_html .= ob_get_contents(); ob_clean(); ob_end_clean(); } if ($do_nav) { //only do if internal is selected $navigation_c->set_filter($found_filter); //set filters $nav_filters $found_filter $navigation_c->set_filter_type($filter_allow); $navigation_c->set_filter_start_select($filter_start); } if ($only_elements == false) { ob_start(); $item_skin->generate_element_css($grid_preview); $skins_css .= ob_get_contents(); ob_clean(); ob_end_clean(); if ($do_nav) { //only do if internal is selected $navigation_skin = $base->getVar($this->grid_params, 'navigation-skin', 'minimal-light'); ob_start(); $navigation_c->output_navigation_skin($navigation_skin); $nav_css = ob_get_contents(); ob_clean(); ob_end_clean(); echo $nav_css; } echo $skins_css; if ($item_skin->ajax_loading == true && $ajax_container_position == 'top') { echo $this->output_ajax_container(); } $this->output_wrapper_pre($grid_preview); if ($do_nav) { //only do if internal is selected $navigation_c->output_layout('top-1', $module_spacings); $navigation_c->output_layout('top-2', $module_spacings); } $this->output_grid_pre(); } echo $skins_html; if ($only_elements == false) { $this->output_grid_post(); if ($do_nav) { //only do if internal is selected $navigation_c->output_layout('bottom-1', $module_spacings); $navigation_c->output_layout('bottom-2', $module_spacings); $navigation_c->output_layout('left'); $navigation_c->output_layout('right'); //check if search was added. If yes, we also need to add the "Filter All" filter if not existing $navigation_c->check_for_search(); } $this->output_wrapper_post(); if ($item_skin->ajax_loading == true && $ajax_container_position == 'bottom') { echo $this->output_ajax_container(); } $load_lightbox = $item_skin->do_lightbox_loading(); if (!$grid_preview) { $this->output_grid_javascript($load_lightbox); } } }