PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 1.5.2
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v1.5.2
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 1.5.2, at modules/glossy-grid/widgets/glossy-grid.php

454 lines 17.8 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 WP_Query;
11
12 if (!defined('ABSPATH')) {
13 exit;
14 }
15
16 // Exit if accessed directly
17
18 class Glossy_Grid extends Module_Base {
19 use Global_Widget_Controls;
20 use Global_Widget_Template;
21 use Group_Control_Query;
22 // use Global_Widget_Template;
23
24 /**
25 * @var \WP_Query
26 */
27 private $_query = null;
28 public function get_name() {
29 return 'usk-glossy-grid';
30 }
31
32 public function get_title() {
33 return esc_html__('Glossy Grid', 'ultimate-store-kit');
34 }
35
36 public function get_icon() {
37 return 'usk-widget-icon usk-icon-glossy-grid';
38 }
39
40 public function get_categories() {
41 return ['ultimate-store-kit'];
42 }
43
44 public function get_keywords() {
45 return ['product', 'product-grid', 'table', 'wc'];
46 }
47
48 public function get_style_depends() {
49 if ($this->usk_is_edit_mode()) {
50 return ['usk-all-styles'];
51 } else {
52 return ['ultimate-store-kit-font', 'usk-glossy-grid'];
53 }
54 }
55
56 public function get_script_depends() {
57 return ['micromodal'];
58 }
59
60 public function get_custom_help_url() {
61 return 'https://youtu.be/H-EwEpbeXFA';
62 }
63
64 public function get_query() {
65 return $this->_query;
66 }
67 protected function register_controls() {
68
69 $this->start_controls_section(
70 'section_woocommerce_layout',
71 [
72 'label' => esc_html__('Layout', 'ultimate-store-kit'),
73 ]
74 );
75
76 $this->add_control(
77 'layout_style',
78 [
79 'label' => esc_html__('Style', 'ultimate-store-kit'),
80 'type' => Controls_Manager::SELECT,
81 'default' => 'grid',
82 'options' => [
83 'grid' => esc_html__('Grid', 'ultimate-store-kit'),
84 'list' => esc_html__('List', 'ultimate-store-kit'),
85 ],
86 ]
87 );
88 $this->add_responsive_control(
89 'columns',
90 [
91 'label' => esc_html__('Columns', 'ultimate-store-kit'),
92 'type' => Controls_Manager::SELECT,
93 'default' => '3',
94 'tablet_default' => '2',
95 'mobile_default' => '1',
96 'options' => [
97 '1' => '1',
98 '2' => '2',
99 '3' => '3',
100 '4' => '4',
101 '5' => '5',
102 '6' => '6',
103 ],
104 'condition' => [
105 'layout_style' => 'grid'
106 ],
107 'selectors' => [
108 ' .usk-glossy-grid .usk-grid' => 'grid-template-columns: repeat({{VALUE}}, 1fr);',
109
110 ],
111 'render_type' => 'template'
112 ]
113 );
114
115 $this->add_responsive_control(
116 'items_columns_gap',
117 [
118 'label' => esc_html__('Columns Gap', 'ultimate-wook'),
119 'type' => Controls_Manager::SLIDER,
120 'default' => [
121 'size' => 30,
122 ],
123 'selectors' => [
124 '{{WRAPPER}} .usk-glossy-grid .usk-grid' => 'grid-column-gap: {{SIZE}}px;',
125 ],
126 ]
127 );
128
129 $this->add_responsive_control(
130 'items_row_gap',
131 [
132 'label' => esc_html__('Row Gap', 'ultimate-wook'),
133 'type' => Controls_Manager::SLIDER,
134 'default' => [
135 'size' => 30,
136 ],
137 'selectors' => [
138 '{{WRAPPER}} .usk-glossy-grid .usk-grid' => 'grid-row-gap: {{SIZE}}px;',
139 ],
140 ]
141 );
142
143 $this->register_global_controls_grid_layout();
144
145 $this->add_control(
146 'show_tab',
147 [
148 'label' => esc_html__('Columns Filter', 'ultimate-store-kit'),
149 'type' => Controls_Manager::SWITCHER,
150 'separator' => 'before'
151 ]
152 );
153 $this->add_control(
154 'filter_column_lists',
155 [
156 'label' => __('Select Column Type', 'ultimate-store-kit'),
157 'type' => Controls_Manager::SELECT2,
158 'label_block' => true,
159 'multiple' => true,
160 'options' => [
161 'list-2' => __('List view', 'ultimate-store-kit'),
162 'grid-2' => __('Column 2', 'ultimate-store-kit'),
163 'grid-3' => __('Column 3', 'ultimate-store-kit'),
164 'grid-4' => __('Column 4', 'ultimate-store-kit'),
165 'grid-5' => __('Column 5', 'ultimate-store-kit'),
166 'grid-6' => __('Column 6', 'ultimate-store-kit'),
167
168 ],
169 'condition' => [
170 'show_tab' => 'yes'
171 ],
172 'default' => ['list-2', 'grid-2', 'grid-3', 'grid-4'],
173 ]
174 );
175 $this->add_control(
176 'show_result_count',
177 [
178 'label' => esc_html__('Result Count', 'ultimate-store-kit'),
179 'type' => Controls_Manager::SWITCHER,
180 'label_on' => esc_html__('Show', 'ultimate-store-kit'),
181 'label_off' => esc_html__('Hide', 'ultimate-store-kit'),
182 'return_value' => 'yes',
183 'default' => 'yes',
184 'condition' => [
185 'show_tab' => 'yes'
186 ]
187 ]
188 );
189
190 $this->add_control(
191 'show_pagination',
192 [
193 'label' => esc_html__('Pagination', 'ultimate-store-kit'),
194 'type' => Controls_Manager::SWITCHER,
195 'separator' => 'before'
196 ]
197 );
198
199 $this->end_controls_section();
200 $this->start_controls_section(
201 'section_post_query_builder',
202 [
203 'label' => __('Query', 'ultimate-store-kit'),
204 'tab' => Controls_Manager::TAB_CONTENT,
205 ]
206 );
207 $this->register_query_builder_controls();
208 $this->register_controls_wc_additional();
209 $this->end_controls_section();
210 $this->register_global_controls_additional();
211 $this->register_global_controls_grid_columns();
212 $this->register_global_controls_result_count();
213 $this->register_global_controls_grid_items();
214 $this->register_global_controls_content();
215 $this->register_global_controls_grid_image();
216 $this->register_global_controls_title();
217 $this->register_global_controls_price();
218 $this->register_global_controls_rating();
219 $this->register_global_controls_badge();
220 $this->register_global_controls_action_btn();
221 $this->register_global_controls_grid_pagination();
222 }
223
224 public function render_header() {
225 $settings = $this->get_settings_for_display();
226 $this->add_render_attribute(
227 'usk-glossy-grid',
228 [
229 'class' => [
230 'usk-glossy-grid',
231 'usk-content-position-' . $settings['alignment'] . ''
232 ],
233 'data-filter' => [
234 $settings['show_tab']
235 ]
236 ]
237 );
238 ?>
239 <div class="ultimate-store-kit">
240 <div <?php $this->print_render_attribute_string('usk-glossy-grid'); ?>>
241 <?php $this->template_grid_columns(); ?>
242 <?php
243 }
244 public function render_footer() {
245 ?>
246 </div>
247 </div>
248 <?php
249 }
250 public function render_image() {
251 global $product;
252 $settings = $this->get_settings_for_display();
253 $gallery_thumbs = $product->get_gallery_image_ids();
254 $product_image = wp_get_attachment_image_url(get_post_thumbnail_id(), $settings['image_size']);
255 if ($gallery_thumbs) {
256 foreach ($gallery_thumbs as $key => $gallery_thumb) {
257 if ($key == 0) :
258 $gallery_image_link = wp_get_attachment_image_url($gallery_thumb, $settings['image_size']);
259 endif;
260 }
261 } else {
262 $gallery_image_link = wp_get_attachment_image_url(get_post_thumbnail_id(), $settings['image_size']);
263 }
264 ?>
265 <div class="usk-image">
266 <a href="<?php echo get_permalink(); ?>">
267 <img class="img default-image" src="<?php echo esc_url($product_image); ?>" alt="<?php echo get_the_title(); ?>">
268 <img class="img hover-image" src="<?php echo esc_url($gallery_image_link); ?>" alt="<?php echo get_the_title(); ?>">
269 </a>
270 <div class="usk-badge-label-wrapper">
271 <div class="usk-badge-label-content">
272 <?php $this->register_global_template_badge_label(); ?>
273 </div>
274 </div>
275 </div>
276 <?php
277 }
278
279 public function print_price_output($output) {
280 $tags = [
281 'del' => ['aria-hidden' => []],
282 'span' => ['class' => []],
283 'bdi' => [],
284 'ins' => [],
285 ];
286
287 if (isset($output)) {
288 echo wp_kses($output, $tags);
289 }
290 }
291 public function render_loop_item() {
292 $tooltip_position = 'left';
293 $settings = $this->get_settings_for_display();
294 // $wp_query = $this->register_global_template_query();
295 $this->query_product();
296 $wp_query = $this->get_query();
297 if ($settings['layout_style'] === 'grid') {
298 $this->add_render_attribute('usk-grid', 'class', ['usk-grid', 'usk-grid-layout', 'usk-grid-' . $settings['columns'] . '']);
299 } else {
300 $this->add_render_attribute('usk-grid', 'class', ['usk-grid', 'usk-list-layout', 'usk-grid-2']);
301 }
302 if ($wp_query->have_posts()) { ?>
303 <div <?php $this->print_render_attribute_string('usk-grid'); ?>>
304 <?php while ($wp_query->have_posts()) : $wp_query->the_post();
305 global $product;
306 $tooltip_position = 'right';
307 $rating_count = $product->get_rating_count();
308 $average = $product->get_average_rating();
309
310 if ($settings['show_rating'] == 'yes') {
311 $this->add_render_attribute('usk-item', 'class', ['usk-item', 'usk-have-rating'], true);
312 } else {
313 $this->add_render_attribute('usk-item', 'class', ['usk-item'], true);
314 }
315 ?>
316 <div <?php $this->print_render_attribute_string('usk-item'); ?>>
317 <div class="usk-item-box">
318 <?php $this->render_image(); ?>
319 <div class="usk-content">
320 <div class="usk-content-inner">
321 <?php if ('yes' == $settings['show_title']) :
322 printf('<a href="%2$s" class="usk-title"><%1$s class="title">%3$s</%1$s></a>', $settings['title_tags'], esc_url($product->get_permalink()), esc_html($product->get_title()));
323 endif; ?>
324 <?php if ('yes' == $settings['show_excerpt']) : ?>
325 <div class="usk-desc">
326 <span class="desc"><?php echo wp_trim_words($product->get_short_description(), $settings['excerpt_limit'], '...') ?></span>
327 </div>
328 <?php endif; ?>
329 <?php if ('yes' == $settings['show_price']) : ?>
330 <div class="usk-price">
331 <?php $this->print_price_output($product->get_price_html()); ?>
332 </div>
333 <?php endif; ?>
334 <?php if ('yes' == $settings['show_rating']) : ?>
335 <div class="usk-rating">
336 <span><?php echo $this->register_global_template_wc_rating($average, $rating_count); ?></span>
337 </div>
338 <?php endif; ?>
339 </div>
340 </div>
341 <div class="usk-shoping">
342 <?php
343 $this->register_global_template_add_to_wishlist($tooltip_position);
344 $this->register_global_template_quick_view($product->get_id(), $tooltip_position);
345 $this->register_global_template_add_to_cart($tooltip_position);
346 ?>
347 </div>
348 </div>
349 </div>
350 <?php endwhile; ?>
351 </div>
352 <?php
353
354 if ($settings['show_pagination']) :
355 ultimate_store_kit_post_pagination($wp_query);
356 endif;
357 wp_reset_postdata();
358 } else {
359 echo '<div class="usk-alert-warning" usk-alert>' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
360 }
361 }
362
363 public function render() {
364 $this->render_header();
365 $this->render_loop_item();
366 $this->render_footer();
367 }
368 public function query_product() {
369 $default = $this->getGroupControlQueryArgs();
370 $this->_query = new WP_Query($default);
371 }
372 protected function template_grid_columns() {
373 $settings = $this->get_settings_for_display();
374 $this->query_product();
375 $wp_query = $this->get_query();
376 if (get_query_var('paged')) {
377 $paged = get_query_var('paged');
378 } elseif (get_query_var('page')) {
379 $paged = get_query_var('page');
380 } else {
381 $paged = 1;
382 }
383 $args = array(
384 'total' => $wp_query->found_posts,
385 'per_page' => $settings['product_limit'],
386 'current' => $paged,
387 );
388 if ($settings['show_tab'] == 'yes') : ?>
389 <div class="usk-grid-header usk-visible@l">
390 <?php if (($settings['show_result_count'] == 'yes')) :
391 wc_get_template('loop/result-count.php', $args);
392 endif;
393 ?>
394 <ul class="usk-grid-header-tabs">
395 <?php if (in_array("list-2", $settings['filter_column_lists'])) : ?>
396 <li class="usk-grid-tabs-list">
397 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-list-2">
398 <span class="usk-icon-grid-list"></span>
399 </a>
400 </li>
401 <?php
402 endif;
403 if (in_array('grid-2', $settings['filter_column_lists'])) :
404 ?>
405 <li class="usk-grid-tabs-list">
406 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-grid-2">
407 <span class="usk-icon-grid-2"></span>
408 </a>
409 </li>
410 <?php
411 endif;
412 if (in_array('grid-3', $settings['filter_column_lists'])) :
413 ?>
414 <li class="usk-grid-tabs-list">
415 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-grid-3">
416 <span class="usk-icon-grid-3"></span>
417 </a>
418 </li>
419 <?php
420 endif;
421 if (in_array('grid-4', $settings['filter_column_lists'])) :
422 ?>
423 <li class="usk-grid-tabs-list">
424 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-grid-4">
425 <span class="usk-icon-grid-4"></span>
426 </a>
427 </li>
428 <?php
429 endif;
430 if (in_array('grid-5', $settings['filter_column_lists'])) :
431 ?>
432 <li class="usk-grid-tabs-list">
433 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-grid-5">
434 <span class="usk-icon-grid-5"></span>
435 </a>
436 </li>
437 <?php
438 endif;
439 if (in_array('grid-6', $settings['filter_column_lists'])) :
440 ?>
441 <li class="usk-grid-tabs-list">
442 <a class="tab-option" href="javascript:void(0)" data-grid-column="usk-grid-6">
443 <span class="usk-icon-grid-6"></span>
444 </a>
445 </li>
446 <?php
447 endif;
448 ?>
449 </ul>
450 </div>
451 <?php endif;
452 }
453 }
454