PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 1.6.3
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v1.6.3
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-carousel / widgets / florence-carousel.php

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

378 lines 14.4 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\FlorenceCarousel\Widgets;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Group_Control_Border;
7 use Elementor\Group_Control_Box_Shadow;
8 use Elementor\Group_Control_Background;
9 use Elementor\Group_Control_Typography;
10 use UltimateStoreKit\Base\Module_Base;
11 use UltimateStoreKit\traits\Global_Widget_Controls;
12 use UltimateStoreKit\traits\Global_Widget_Template;
13 // use UltimateStoreKit\traits\Global_Swiper_Template;
14 use UltimateStoreKit\Includes\Controls\GroupQuery\Group_Control_Query;
15 use WP_Query;
16
17 if (!defined('ABSPATH')) {
18 exit;
19 }
20
21 // Exit if accessed directly
22
23 class Florence_Carousel extends Module_Base {
24 use Global_Widget_Controls;
25 use Global_Widget_Template;
26 use Group_Control_Query;
27
28 /**
29 * @var \WP_Query
30 */
31 private $_query = null;
32
33
34 public function get_name() {
35 return 'usk-florence-carousel';
36 }
37
38 public function get_title() {
39 return esc_html__('Florence Carousel', 'ultimate-store-kit');
40 }
41
42 public function get_icon() {
43 return 'usk-widget-icon usk-icon-florence-carousel';
44 }
45
46 public function get_categories() {
47 return ['ultimate-store-kit'];
48 }
49
50 public function get_keywords() {
51 return ['product', 'product-carousel', 'table', 'wc'];
52 }
53
54 public function get_script_depends() {
55 return ['micromodal'];
56 }
57
58 public function get_style_depends() {
59 if ($this->usk_is_edit_mode()) {
60 return ['usk-all-styles'];
61 } else {
62 return ['ultimate-store-kit-font', 'usk-florence-carousel'];
63 }
64 }
65
66 public function get_custom_help_url() {
67 return 'https://youtu.be/eqAsEwqcKdM';
68 }
69
70 public function get_query() {
71 return $this->_query;
72 }
73 protected function register_controls() {
74
75 $this->start_controls_section(
76 'section_woocommerce_layout',
77 [
78 'label' => esc_html__('Layout', 'ultimate-store-kit'),
79 ]
80 );
81
82 $this->add_responsive_control(
83 'columns',
84 [
85 'label' => esc_html__('Columns', 'ultimate-store-kit'),
86 'type' => Controls_Manager::SELECT,
87 'default' => 3,
88 'tablet_default' => 2,
89 'mobile_default' => 1,
90 'options' => [
91 1 => '1',
92 2 => '2',
93 3 => '3',
94 4 => '4',
95 5 => '5',
96 6 => '6',
97 ],
98 ]
99 );
100 $this->add_responsive_control(
101 'items_gap',
102 [
103 'label' => esc_html__('Item Gap', 'ultimate-store-kit'),
104 'type' => Controls_Manager::SLIDER,
105 'default' => [
106 'size' => 30,
107 ],
108 'range' => [
109 'px' => [
110 'min' => 0,
111 'max' => 100,
112 ],
113 ],
114 'tablet_default' => [
115 'size' => 20,
116 ],
117 'mobile_default' => [
118 'size' => 20,
119 ],
120 ]
121 );
122
123 $this->register_global_controls_grid_layout();
124
125 $this->end_controls_section();
126 $this->start_controls_section(
127 'section_post_query_builder',
128 [
129 'label' => __('Query', 'ultimate-store-kit'),
130 'tab' => Controls_Manager::TAB_CONTENT,
131 ]
132 );
133 $this->register_query_builder_controls();
134 $this->register_controls_wc_additional();
135 $this->end_controls_section();
136 $this->register_global_controls_additional();
137 $this->register_global_controls_carousel_navigation();
138 $this->register_global_controls_carousel_settings();
139 $this->start_controls_section(
140 'section_style_item',
141 [
142 'label' => esc_html__('Items', 'ultimate-store-kit'),
143 'tab' => Controls_Manager::TAB_STYLE,
144 ]
145 );
146
147 $this->start_controls_tabs('item_tabs');
148
149 $this->start_controls_tab(
150 'item_tab_normal',
151 [
152 'label' => esc_html__('Normal', 'ultimate-store-kit'),
153 ]
154 );
155
156 $this->add_group_control(
157 Group_Control_Border::get_type(),
158 [
159 'name' => 'item_border',
160 'selector' => '{{WRAPPER}} .usk-florence-carousel .usk-item',
161 ]
162 );
163
164 $this->add_responsive_control(
165 'item_border_radius',
166 [
167 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
168 'type' => Controls_Manager::DIMENSIONS,
169 'size_units' => ['px', '%', 'em'],
170 'selectors' => [
171 '{{WRAPPER}} .usk-florence-carousel .usk-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
172 ],
173 ]
174 );
175
176 $this->add_responsive_control(
177 'item_padding',
178 [
179 'label' => esc_html__('Padding', 'ultimate-store-kit'),
180 'type' => Controls_Manager::DIMENSIONS,
181 'size_units' => ['px', '%', 'em'],
182 'selectors' => [
183 '{{WRAPPER}} .usk-florence-carousel .usk-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
184 ],
185 ]
186 );
187 $this->end_controls_tab();
188
189 $this->start_controls_tab(
190 'item_tab_hover',
191 [
192 'label' => esc_html__('Hover', 'ultimate-store-kit'),
193 ]
194 );
195
196 $this->add_control(
197 'item_hover_border_color',
198 [
199 'label' => esc_html__('Border Color', 'ultimate-store-kit'),
200 'type' => Controls_Manager::COLOR,
201 'selectors' => [
202 '{{WRAPPER}} .usk-florence-carousel .usk-item:hover' => 'border-color: {{VALUE}}',
203 ],
204 ]
205 );
206
207 $this->end_controls_tab();
208
209 $this->end_controls_tabs();
210
211 $this->end_controls_section();
212 $this->register_global_controls_grid_image();
213 $this->register_global_controls_content();
214 $this->register_global_controls_title();
215 $this->register_global_controls_category();
216 $this->register_global_controls_price();
217 $this->register_global_controls_rating();
218 $this->register_global_controls_badge();
219 $this->register_global_controls_action_btn();
220 $this->register_global_controls_navigation_style();
221 }
222
223 public function render_image() {
224 global $product;
225 $tooltip_position = 'left';
226 $settings = $this->get_settings_for_display();
227 $gallery_thumbs = $product->get_gallery_image_ids();
228 $product_image = wp_get_attachment_image_url(get_post_thumbnail_id(), $settings['image_size']);
229 if ($gallery_thumbs) {
230 foreach ($gallery_thumbs as $key => $gallery_thumb) {
231 if ($key == 0) :
232 $gallery_image_link = wp_get_attachment_image_url($gallery_thumb, $settings['image_size']);
233 endif;
234 }
235 } else {
236 $gallery_image_link = wp_get_attachment_image_url(get_post_thumbnail_id(), $settings['image_size']);
237 }
238 ?>
239 <div class="usk-image">
240 <a href="<?php echo esc_url(get_permalink()); ?>">
241 <img class="img image-default" src="<?php echo esc_url($product_image); ?>" alt="<?php echo esc_html(get_the_title()); ?>">
242 <img class="img image-hover" src="<?php echo esc_url($gallery_image_link); ?>" alt="<?php echo esc_html(get_the_title()); ?>">
243 </a>
244 <div class="usk-shoping">
245 <?php
246 $this->register_global_template_add_to_wishlist($tooltip_position);
247 $this->register_global_template_quick_view($product->get_id(), $tooltip_position);
248 $this->register_global_template_add_to_cart($tooltip_position);
249 ?>
250 </div>
251 <div class="usk-badge-label-wrapper">
252 <div class="usk-badge-label-content">
253 <?php $this->register_global_template_badge_label(); ?>
254 </div>
255 </div>
256 </div>
257 <?php
258 }
259 public function render_add_to_cart() {
260 global $product;
261 $settings = $this->get_settings_for_display();
262 if ('yes' == $settings['show_cart']) : ?>
263 <?php if ($product) {
264 $defaults = [
265 'quantity' => 1,
266 'class' => implode(
267 ' usk-button ',
268 array_filter(
269 [
270 'product_type_' . $product->get_type(),
271 $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
272 $product->supports('ajax_add_to_cart') && $product->is_purchasable() && $product->is_in_stock() ? 'ajax_add_to_cart' : '',
273 ]
274 )
275 ),
276 'attributes' => [
277 'data-product_id' => $product->get_id(),
278 'data-product_sku' => $product->get_sku(),
279 'aria-label' => $product->add_to_cart_description(),
280 'rel' => 'nofollow',
281 ],
282 ];
283 $args = apply_filters('woocommerce_loop_add_to_cart_args', wp_parse_args($defaults), $product);
284 if (isset($args['attributes']['aria-label'])) {
285 $args['attributes']['aria-label'] = wp_strip_all_tags($args['attributes']['aria-label']);
286 }
287 echo wp_kses_post(apply_filters(
288 'woocommerce_loop_add_to_cart_link', // WPCS: XSS ok.
289 sprintf(
290 '<a href="%s" data-quantity="%s" class="%s" %s>%s <i class="button-icon usk-icon-arrow-right-8"></i></a>',
291 esc_url($product->add_to_cart_url()),
292 esc_attr(isset($args['quantity']) ? $args['quantity'] : 1),
293 esc_attr(isset($args['class']) ? $args['class'] : 'button'),
294 isset($args['attributes']) ? wc_implode_html_attributes($args['attributes']) : '',
295 esc_html($product->add_to_cart_text())
296 ),
297 $product,
298 $args
299 ));
300 }; ?>
301 <?php endif;
302 }
303 public function print_price_output($output) {
304 $tags = [
305 'del' => ['aria-hidden' => []],
306 'span' => ['class' => []],
307 'bdi' => [],
308 'ins' => [],
309 ];
310
311 if (isset($output)) {
312 echo wp_kses($output, $tags);
313 }
314 }
315 public function render_loop_item() {
316 $settings = $this->get_settings_for_display();
317 $id = 'usk-wc-product-' . $this->get_id();
318 $modal_id = wp_unique_id('modal-id-');
319 $this->query_product();
320 $wp_query = $this->get_query();
321
322 if ($wp_query->have_posts()) { ?>
323 <?php while ($wp_query->have_posts()) : $wp_query->the_post();
324 global $product;
325 $rating_count = $product->get_rating_count();
326 $average = $product->get_average_rating();
327 if ('yes' === $settings['show_rating']) {
328 $this->add_render_attribute('usk-item', 'class', ['usk-item', 'usk-have-rating'], true);
329 } else {
330 $this->add_render_attribute('usk-item', 'class', ['usk-item'], true);
331 }
332
333 $categories = str_replace(',', '', wc_get_product_category_list($product->get_id()));
334 ?>
335 <div class="swiper-slide">
336 <div <?php $this->print_render_attribute_string('usk-item'); ?>>
337 <div class="usk-item-box">
338 <?php $this->render_image(); ?>
339 <div class="usk-content">
340 <div class="usk-content-inner">
341 <?php if ('yes' == $settings['show_category']) : ?>
342 <?php printf('<%1$s class="usk-category">%2$s</%1$s>', esc_attr($settings['category_tags']), wp_kses_post($categories)); ?>
343 <?php endif; ?>
344 <?php if ('yes' == $settings['show_title']) :
345 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()));
346 endif; ?>
347 <?php if ('yes' == $settings['show_price']) : ?>
348 <div class="usk-price">
349 <?php $this->print_price_output($product->get_price_html()); ?>
350 </div>
351 <?php endif; ?>
352 <?php if ('yes' == $settings['show_rating']) : ?>
353 <div class="usk-rating">
354 <span><?php echo wp_kses_post($this->register_global_template_wc_rating($average, $rating_count)); ?></span>
355 </div>
356 <?php endif; ?>
357 </div>
358 </div>
359 </div>
360 </div>
361 </div>
362 <?php endwhile;
363 wp_reset_postdata();
364 } else {
365 echo '<div class="usk-alert-warning" usk-alert>' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
366 }
367 }
368 public function render() {
369 $this->register_global_template_carousel_header();
370 $this->render_loop_item();
371 $this->usk_register_global_template_carousel_footer();
372 }
373 public function query_product() {
374 $default = $this->getGroupControlQueryArgs();
375 $this->_query = new WP_Query($default);
376 }
377 }
378