PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 3.1.4
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v3.1.4
3.1.4 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.0.7 3.0.5 3.0.4 3.0.3 3.0.2 trunk 1.5.0 1.5.1 1.5.2 1.6.1 1.6.2 1.6.3 1.6.4 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 All 93 releases
ultimate-store-kit / modules / glossy-grid / widgets / glossy-grid.php

glossy-grid.php in Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder 3.1.4, at modules/glossy-grid/widgets/glossy-grid.php

361 lines 12.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace UltimateStoreKit\Modules\GlossyGrid\Widgets;
4
5 use Elementor\Controls_Manager;
6 use UltimateStoreKit\Base\Module_Base;
7 use UltimateStoreKit\Includes\Controls\GroupQuery\Group_Control_Query;
8 use UltimateStoreKit\Traits\Global_Widget_Controls;
9 use UltimateStoreKit\Traits\Global_Widget_Template;
10 use UltimateStoreKit\Templates\USK_Glossy_Grid_Template;
11 use WP_Query;
12
13 if (!defined('ABSPATH')) {
14 exit;
15 }
16
17 // Exit if accessed directly
18
19 class Glossy_Grid extends Module_Base {
20 use Global_Widget_Controls;
21 use Global_Widget_Template;
22 use Group_Control_Query;
23 // use Global_Widget_Template;
24
25 /**
26 * @var \WP_Query
27 */
28 private $_query = null;
29 public function get_name() {
30 return 'usk-glossy-grid';
31 }
32
33 public function get_title() {
34 return esc_html__('Glossy Grid', 'ultimate-store-kit');
35 }
36
37 public function get_icon() {
38 return 'usk-widget-icon usk-icon-glossy-grid';
39 }
40
41 public function get_categories() {
42 return ['ultimate-store-kit'];
43 }
44
45 public function get_keywords() {
46 return ['product', 'product-grid', 'table', 'wc'];
47 }
48
49 public function get_style_depends() {
50 if ($this->usk_is_edit_mode()) {
51 return ['usk-all-styles'];
52 } else {
53 return ['usk-font', 'usk-glossy-grid'];
54 }
55 }
56
57 public function get_script_depends() {
58 if ($this->usk_is_edit_mode()) {
59 return ['ultimate-store-kit-micromodal', 'usk-site'];
60 } else {
61 return ['ultimate-store-kit-micromodal', 'usk-shiny-grid'];
62 }
63 }
64
65 public function get_custom_help_url() {
66 return 'https://youtu.be/H-EwEpbeXFA';
67 }
68
69 public function get_query() {
70 return $this->_query;
71 }
72 public function has_widget_inner_wrapper(): bool {
73 return !\Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup');
74 }
75 protected function register_controls() {
76
77 $this->start_controls_section(
78 'section_woocommerce_layout',
79 [
80 'label' => esc_html__('Layout', 'ultimate-store-kit'),
81 ]
82 );
83
84 $this->add_control(
85 'layout_style',
86 [
87 'label' => esc_html__('Style', 'ultimate-store-kit'),
88 'type' => Controls_Manager::SELECT,
89 'default' => 'grid',
90 'options' => [
91 'grid' => esc_html__('Grid', 'ultimate-store-kit'),
92 'list' => esc_html__('List', 'ultimate-store-kit'),
93 ],
94 'condition' => [
95 'show_tab!' => 'yes'
96 ]
97 ]
98 );
99 $this->add_responsive_control(
100 'columns',
101 [
102 'label' => esc_html__('Columns', 'ultimate-store-kit'),
103 'type' => Controls_Manager::SELECT,
104 'default' => '3',
105 'tablet_default' => '2',
106 'mobile_default' => '1',
107 'options' => [
108 '1' => '1',
109 '2' => '2',
110 '3' => '3',
111 '4' => '4',
112 '5' => '5',
113 '6' => '6',
114 ],
115 'condition' => [
116 'layout_style' => 'grid',
117 'show_tab!' => 'yes'
118 ],
119 'selectors' => [
120 '{{WRAPPER}} .usk-glossy-grid .usk-grid.usk-grid-layout' => 'grid-template-columns: repeat({{VALUE}}, 1fr);',
121
122 ],
123 'render_type' => 'template'
124 ]
125 );
126
127 $this->add_responsive_control(
128 'columns_list',
129 [
130 'label' => esc_html__('Columns', 'ultimate-store-kit'),
131 'type' => Controls_Manager::SELECT,
132 'default' => '2',
133 'tablet_default' => '2',
134 'mobile_default' => '1',
135 'options' => [
136 '1' => '1',
137 '2' => '2',
138 '3' => '3',
139 '4' => '4',
140 '5' => '5',
141 '6' => '6',
142 ],
143 'condition' => [
144 'layout_style' => 'list'
145 ],
146 'selectors' => [
147 '{{WRAPPER}} .usk-glossy-grid .usk-grid.usk-list-layout' => 'grid-template-columns: repeat({{VALUE}}, 1fr);',
148
149 ],
150 'render_type' => 'template'
151 ]
152 );
153
154 $this->add_responsive_control(
155 'items_columns_gap',
156 [
157 'label' => esc_html__('Columns Gap', 'ultimate-store-kit'),
158 'type' => Controls_Manager::SLIDER,
159 'default' => [
160 'size' => 30,
161 ],
162 'selectors' => [
163 '{{WRAPPER}} .usk-glossy-grid .usk-grid' => 'grid-column-gap: {{SIZE}}px;',
164 ],
165 ]
166 );
167
168 $this->add_responsive_control(
169 'items_row_gap',
170 [
171 'label' => esc_html__('Row Gap', 'ultimate-store-kit'),
172 'type' => Controls_Manager::SLIDER,
173 'default' => [
174 'size' => 30,
175 ],
176 'selectors' => [
177 '{{WRAPPER}} .usk-glossy-grid .usk-grid' => 'grid-row-gap: {{SIZE}}px;',
178 ],
179 ]
180 );
181
182 $this->register_global_controls_grid_layout();
183
184 $this->add_control(
185 'show_tab',
186 [
187 'label' => esc_html__('Columns Filter', 'ultimate-store-kit'),
188 'type' => Controls_Manager::SWITCHER,
189 'separator' => 'before',
190 'condition' => [
191 'layout_style' => 'grid'
192 ]
193 ]
194 );
195 $this->add_control(
196 'filter_column_lists',
197 [
198 'label' => __('Select Column Type', 'ultimate-store-kit'),
199 'type' => Controls_Manager::SELECT2,
200 'label_block' => true,
201 'multiple' => true,
202 'options' => [
203 'list-2' => __('List view', 'ultimate-store-kit'),
204 'grid-2' => __('Column 2', 'ultimate-store-kit'),
205 'grid-3' => __('Column 3', 'ultimate-store-kit'),
206 'grid-4' => __('Column 4', 'ultimate-store-kit'),
207 'grid-5' => __('Column 5', 'ultimate-store-kit'),
208 'grid-6' => __('Column 6', 'ultimate-store-kit'),
209
210 ],
211 'condition' => [
212 'show_tab' => 'yes',
213 'layout_style' => 'grid'
214 ],
215 'default' => ['list-2', 'grid-2', 'grid-3', 'grid-4'],
216 ]
217 );
218 $this->add_control(
219 'show_result_count',
220 [
221 'label' => esc_html__('Result Count', 'ultimate-store-kit'),
222 'type' => Controls_Manager::SWITCHER,
223 'label_on' => esc_html__('Show', 'ultimate-store-kit'),
224 'label_off' => esc_html__('Hide', 'ultimate-store-kit'),
225 'return_value' => 'yes',
226 'default' => 'yes',
227 'condition' => [
228 'show_tab' => 'yes'
229 ]
230 ]
231 );
232
233 $this->add_control(
234 'show_pagination',
235 [
236 'label' => esc_html__('Pagination', 'ultimate-store-kit'),
237 'type' => Controls_Manager::SWITCHER,
238 'separator' => 'before'
239 ]
240 );
241
242 $this->end_controls_section();
243 $this->start_controls_section(
244 'section_post_query_builder',
245 [
246 'label' => __('Query', 'ultimate-store-kit'),
247 'tab' => Controls_Manager::TAB_CONTENT,
248 ]
249 );
250 $this->register_query_builder_controls();
251 $this->register_controls_wc_additional();
252 $this->end_controls_section();
253 $this->register_global_controls_additional();
254 $this->register_global_controls_grid_columns();
255 $this->register_global_controls_result_count();
256 $this->register_global_controls_grid_items();
257 $this->register_global_controls_content();
258 $this->register_global_controls_grid_image();
259 $this->register_global_controls_title();
260 $this->register_global_controls_price();
261 $this->register_global_controls_rating();
262 $this->register_global_controls_badge();
263 $this->register_global_controls_action_btn();
264 $this->register_global_controls_grid_pagination();
265 }
266
267 public function render_header() {
268 $settings = $this->get_settings_for_display();
269 $this->add_render_attribute(
270 'usk-glossy-grid',
271 [
272 'class' => [
273 'usk-glossy-grid',
274 'usk-css-grid',
275 'usk-grid-carousel',
276 'usk-content-position-' . $settings['alignment'] . ''
277 ],
278 'data-filter' => [
279 $settings['show_tab']
280 ]
281 ]
282 );
283 ?>
284 <div class="ultimate-store-kit">
285 <div <?php $this->print_render_attribute_string('usk-glossy-grid'); ?>>
286 <?php $this->template_grid_columns(); ?>
287 <?php
288 }
289 public function render_footer() {
290 ?>
291 </div>
292 </div>
293 <?php
294 }
295 public function render_loop_item() {
296 $settings = $this->get_settings_for_display();
297 $this->query_product();
298 $wp_query = $this->get_query();
299 if ($settings['layout_style'] === 'grid') {
300 $this->add_render_attribute('usk-grid', 'class', ['usk-grid', 'usk-grid-layout']);
301 } else {
302 $this->add_render_attribute('usk-grid', 'class', ['usk-grid', 'usk-list-layout']);
303 }
304 if ($wp_query->have_posts()): ?>
305 <div <?php $this->print_render_attribute_string('usk-grid'); ?>>
306 <?php while ($wp_query->have_posts()):
307 $wp_query->the_post();
308 global $product;
309 $template = new USK_Glossy_Grid_Template($settings, 'glossy-grid');
310 $template->render_glossy_grid_item($product, $settings); ?>
311 <?php endwhile; ?>
312 </div>
313 <?php
314
315 if ($settings['show_pagination']):
316 ultimate_store_kit_post_pagination($wp_query);
317 endif;
318 wp_reset_postdata();
319 else:
320 echo '<div class="usk-alert-warning" usk-alert>' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
321 endif;
322 }
323
324 public function render() {
325 $this->render_header();
326 $this->render_loop_item();
327 $this->render_footer();
328 }
329 public function query_product() {
330 $default = $this->getGroupControlQueryArgs();
331 $this->_query = $this->build_query_from_args($default);
332 }
333 protected function template_grid_columns() {
334 $settings = $this->get_settings_for_display();
335 $this->query_product();
336 $wp_query = $this->get_query();
337 if (get_query_var('paged')) {
338 $paged = get_query_var('paged');
339 } elseif (get_query_var('page')) {
340 $paged = get_query_var('page');
341 } else {
342 $paged = 1;
343 }
344 $args = array(
345 'total' => $wp_query->found_posts,
346 'per_page' => $settings['product_limit'],
347 'current' => $paged,
348 'orderedby' => $wp_query->get('orderby'),
349 );
350 if ($settings['show_tab'] == 'yes'): ?>
351 <div class="usk-grid-header usk-visible@l">
352 <?php if (($settings['show_result_count'] == 'yes')):
353 wc_get_template('loop/result-count.php', $args);
354 endif;
355 ?>
356 <?php $this->register_templates_grid_columns_markup($settings); ?>
357 </div>
358 <?php endif;
359 }
360 }
361