PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 2.0.5
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v2.0.5
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 / florence-grid / widgets / florence-grid.php

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

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