Example #1
0
 /**
  * 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);
         }
     }
 }