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

441 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\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'];
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 ['ultimate-store-kit-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 ' .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__('Columns 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-content-position-' . $settings['alignment'] . ''], 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 get_permalink(); ?>">
340 <img class="img image-default" src="<?php echo esc_url($product_image); ?>" alt="<?php echo get_the_title(); ?>">
341 <img class="img image-hover" src="<?php echo esc_url($gallery_image_link); ?>" alt="<?php echo 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_quick_view($product->get_id(), $tooltip_position);
347 $this->register_global_template_add_to_cart($tooltip_position);
348 ?>
349 </div>
350 <div class="usk-badge-label-wrapper">
351 <div class="usk-badge-label-content">
352 <?php $this->register_global_template_badge_label(); ?>
353 </div>
354 </div>
355 </div>
356 <?php
357 }
358 public function print_price_output($output) {
359 $tags = [
360 'del' => ['aria-hidden' => []],
361 'span' => ['class' => []],
362 'bdi' => [],
363 'ins' => [],
364 ];
365
366 if (isset($output)) {
367 echo wp_kses($output, $tags);
368 }
369 }
370 public function render_loop_item() {
371 $settings = $this->get_settings_for_display();
372 // $wp_query = $this->register_global_template_query();
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', 'usk-grid-' . $settings['columns'] . '']);
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 $rating_count = $product->get_rating_count();
385 $average = $product->get_average_rating();
386 if ($settings['show_rating'] == 'yes') {
387 $this->add_render_attribute('usk-item', 'class', ['usk-item', 'usk-have-rating'], true);
388 } else {
389 $this->add_render_attribute('usk-item', 'class', ['usk-item'], true);
390 }
391 ?>
392 <div <?php $this->print_render_attribute_string('usk-item'); ?>>
393 <div class="usk-item-box">
394 <?php $this->render_image(); ?>
395 <div class="usk-content">
396 <div class="usk-content-inner">
397 <?php if ('yes' == $settings['show_category']) : ?>
398 <?php printf('<%1$s class="usk-category">%2$s</%1$s>', $settings['category_tags'], wc_get_product_category_list($product->get_id())); ?>
399 <?php endif; ?>
400 <?php 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())); ?>
401 <?php if ('yes' == $settings['show_excerpt']) : ?>
402 <div class="usk-desc">
403 <?php echo wp_trim_words($product->get_short_description(), $settings['excerpt_limit'], '...'); ?>
404 </div>
405 <?php endif; ?>
406 <?php if ('yes' == $settings['show_price']) : ?>
407 <div class="usk-price">
408 <?php $this->print_price_output($product->get_price_html()); ?>
409 </div>
410 <?php endif; ?>
411 <?php if ('yes' == $settings['show_rating']) : ?>
412 <div class="usk-rating">
413 <span><?php echo $this->register_global_template_wc_rating($average, $rating_count); ?></span>
414 </div>
415 <?php endif; ?>
416 </div>
417 </div>
418 </div>
419 </div>
420 <?php endwhile; ?>
421 </div>
422 <?php if ($settings['show_pagination']) :
423 ultimate_store_kit_post_pagination($wp_query);
424 endif;
425 wp_reset_postdata();
426 } else {
427 echo '<div class="usk-alert-warning">' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
428 }
429 }
430
431 public function render() {
432 $this->render_header();
433 $this->render_loop_item();
434 $this->render_footer();
435 }
436 public function query_product() {
437 $default = $this->getGroupControlQueryArgs();
438 $this->_query = new WP_Query($default);
439 }
440 }
441