PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.6.5
ShopBuilder – WooCommerce Builder For Elementor v2.6.5
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
shopbuilder / app / Elementor / Widgets / Single / ProductImages.php

ProductImages.php in ShopBuilder – WooCommerce Builder For Elementor 2.6.5, at app/Elementor/Widgets/Single/ProductImages.php

260 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Main ProductImages class.
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Elementor\Widgets\Single;
9
10 use RadiusTheme\SB\Helpers\BuilderFns;
11 use RadiusTheme\SB\Helpers\ElementorDataMap;
12 use RadiusTheme\SB\Helpers\Fns;
13 use RadiusTheme\SB\Abstracts\ElementorWidgetBase;
14 use RadiusTheme\SB\Elementor\Widgets\Controls\ProductImagesSettings;
15 use RadiusTheme\SBPRO\Helpers\BuilderFunPro;
16
17 // Do not allow directly accessing this file.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 'This script cannot be accessed directly.' );
20 }
21
22 /**
23 * Product Images class
24 */
25 class ProductImages extends ElementorWidgetBase {
26 /**
27 * Construct function
28 *
29 * @param array $data default array.
30 * @param mixed $args default arg.
31 */
32 public function __construct( $data = [], $args = null ) {
33 $this->rtsb_name = esc_html__( 'Product Images', 'shopbuilder' );
34 $this->rtsb_base = 'rtsb-product-image';
35 parent::__construct( $data, $args );
36 add_action( 'wp_footer', 'woocommerce_photoswipe' );
37 $this->the_hooks();
38 }
39 /**
40 * Widget Field
41 *
42 * @return array
43 */
44 public function widget_fields() {
45 return $this->modify_widget_fields();
46 }
47
48 /**
49 * Widget Field
50 *
51 * @return array
52 */
53 public function modify_widget_fields() {
54 $fields = ProductImagesSettings::widget_fields( $this );
55 $extra_controls['image_border'] = [
56 'mode' => 'group',
57 'type' => 'border',
58 'selector' => $this->selectors['image_border'],
59 'size_units' => [ 'px' ],
60 'fields_options' => [
61 'border' => [
62 'label' => esc_html__( 'Border', 'shopbuilder' ),
63 'label_block' => true,
64 ],
65 'color' => [
66 'label' => esc_html__( 'Border Color', 'shopbuilder' ),
67 ],
68 ],
69 ];
70 $fields = Fns::insert_controls( 'image_width', $fields, $extra_controls, true );
71 return $fields;
72 }
73
74
75 /**
76 * Widget Field.
77 *
78 * @return void
79 */
80 public function init_scripts() {
81 ?>
82 <script>
83 /*
84 * Initialize all galleries on page.
85 */
86 jQuery('.woocommerce-product-gallery').each(function () {
87 const that = this;
88 jQuery(this).trigger('wc-product-gallery-before-init', [this, wc_single_product_params]);
89 setTimeout(function () {
90 jQuery(that).wc_product_gallery(wc_single_product_params);
91 }, 1000);
92
93 jQuery(this).trigger('wc-product-gallery-after-init', [this, wc_single_product_params]);
94 });
95 <?php if ( function_exists( 'rtwpvg' ) ) { ?>
96 setTimeout(function () {
97 jQuery('.rtwpvg-wrapper, .rtwpvg-grid-wrapper').rtWpVGallery();
98 }, 1000);
99 <?php } ?>
100
101 jQuery(document).ready(function ($) {
102 setTimeout(function () {
103 const zoomIcon = $('.rtsb-product-images').attr('data-zoom-icon');
104 if (!zoomIcon) {
105 $('.rtsb-product-images')
106 .find('.woocommerce-product-gallery__trigger,.rtwpvg-trigger')
107 .remove();
108 }
109 $('.rtsb-product-images')
110 .find('.woocommerce-product-gallery__trigger,.rtwpvg-trigger')
111 .html(zoomIcon);
112 }, 50);
113 });
114 </script>
115 <?php
116 }
117
118 /**
119 * Widget Field.
120 *
121 * @param array $control Control.
122 *
123 * @return void
124 */
125 public function the_hooks( $control = [] ) {
126 if ( empty( $control ) ) {
127 return;
128 }
129 add_filter(
130 'woocommerce_product_thumbnails_columns',
131 function ( $col ) {
132 $col = 0;
133
134 return $col;
135 }
136 );
137 if ( empty( $control['show_zoom'] ) ) {
138 add_filter( 'rtwpvg_trigger_icon', '__return_false' );
139 }
140 if ( empty( $control['show_thumbnails'] ) ) {
141 add_filter( 'rtwpvg_show_product_thumbnail_slider', '__return_false' );
142 remove_action( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
143 }
144 add_filter( 'rtwpvg_thumbnail_slider_js_options', [ $this, 'thumbnail_slider_js_options' ], 50 );
145 add_filter( 'rtwpvg_thumbnail_position', [ $this, 'thumbnail_position' ], 50 );
146 add_filter( 'rtwpvg_thumbnails_columns', [ $this, 'thumbnails_columns' ] );
147 add_filter( 'rtwpvg_sm_thumbnails_columns', [ $this, 'thumbnails_columns_sm' ] );
148 add_filter( 'rtwpvg_xs_thumbnails_columns', [ $this, 'thumbnails_columns_xs' ] );
149 // add_filter( 'rtwpvg_image_classes', [ $this, 'rtwpvg_image_classes' ], 15 );.
150 }
151
152 /**
153 * @param $position
154 *
155 * @return mixed
156 */
157 public function rtwpvg_image_classes( $classes ) {
158 $controllers = $this->get_settings_for_display();
159 $show_thumbnails = ! empty( $controllers['show_thumbnails'] ) ? $controllers['show_thumbnails'] : false;
160
161 if ( ! $show_thumbnails ) {
162 $key = array_search( 'rtwpvg-has-product-thumbnail', $classes );
163 if ( $key ) {
164 unset( $classes[ $key ] );
165 add_filter( 'rtwpvg_show_product_thumbnail_slider', '__return_false', 20 );
166 }
167 }
168
169 return $classes;
170 }
171
172 public function thumbnail_slider_js_options( $options ) {
173 if ( isset( $options['spaceBetween'] ) ) {
174 $controllers = $this->get_settings_for_display();
175 $options['spaceBetween'] = $controllers['gallery_thumbs_column_gap']['size'];
176 }
177 return $options;
178 }
179
180 public function thumbnails_columns( $column ) {
181 $controllers = $this->get_settings_for_display();
182 $column = ! empty( $controllers['gallery_thumbs_column']['size'] ) ? $controllers['gallery_thumbs_column']['size'] : $column;
183
184 return $column;
185 }
186
187 public function thumbnails_columns_sm( $column ) {
188 $controllers = $this->get_settings_for_display();
189 $column = ! empty( $controllers['gallery_thumbs_column_tablet']['size'] ) ? $controllers['gallery_thumbs_column_tablet']['size'] : $column;
190
191 return $column;
192 }
193
194 public function thumbnails_columns_xs( $column ) {
195 $controllers = $this->get_settings_for_display();
196 $column = ! empty( $controllers['gallery_thumbs_column_mobile']['size'] ) ? $controllers['gallery_thumbs_column_mobile']['size'] : $column;
197
198 return $column;
199 }
200
201 /**
202 * @param $position
203 *
204 * @return mixed
205 */
206 public function thumbnail_position( $position ) {
207
208 if ( ! function_exists( 'rtwpvg' ) || ! rtwpvg()->active_pro() || ! ( BuilderFns::is_product() || BuilderFns::is_quick_views_page() ) ) {
209 return $position;
210 }
211
212 $controllers = $this->get_settings_for_display();
213 $show_thumbnails = ! empty( $controllers['show_thumbnails'] ) ? $controllers['show_thumbnails'] : false;
214
215 if ( ! $show_thumbnails ) {
216 add_filter( 'rtwpvg_show_product_thumbnail_slider', '__return_false', 20 );
217 return 'bottom';
218 }
219
220 return ! empty( $controllers['image_layout'] ) ? $controllers['image_layout'] : 'bottom';
221 }
222
223 /**
224 * Render Function
225 *
226 * @return void
227 */
228 protected function render() {
229 global $product, $post;
230 $_product = $product;
231 $product = Fns::get_product();
232 $controllers = $this->get_settings_for_display();
233 if ( empty( $controllers['show_module_badges'] ) ) {
234 add_filter( 'rtsb/module/badges/show', '__return_false', 99 );
235 }
236
237 $this->theme_support();
238
239 $controllers['lightbox_icon'] = Fns::icons_manager( $controllers['lightbox_icon'] );
240 $data = [
241 'template' => 'elementor/single-product/product-images',
242 'controllers' => $controllers,
243 ];
244 $this->the_hooks( $controllers );
245
246 Fns::load_template( $data['template'], $data );
247
248 if ( $this->is_builder_mode() ) {
249 $this->init_scripts();
250 }
251
252 if ( empty( $controllers['show_module_badges'] ) ) {
253 remove_filter( 'rtsb/module/badges/show', '__return_false', 99 );
254 }
255
256 $this->theme_support( 'render_reset' );
257 $product = $_product; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
258 }
259 }
260