PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.1.3
ShopBuilder – WooCommerce Builder For Elementor v2.1.3
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
← All changes | app/Modules/QuickView/QuickViewFrontEnd.php +73 -71 3.4.22.1.3 View file →
@@ -1,10 +1,5 @@
1 1 <?php
2 -/**
3 - * Quick View Module Class.
4 - *
5 - * @package RadiusTheme\SB
6 - */
7 2
8 3 namespace RadiusTheme\SB\Modules\QuickView;
9 4
10 5 use RadiusTheme\SB\Helpers\Fns;
@@ -15,32 +10,21 @@
15 10 if ( ! defined( 'ABSPATH' ) ) {
16 11 exit( 'This script cannot be accessed directly.' );
17 12 }
18 13
19 -/**
20 - * Quick View Module Class.
21 - */
22 14 class QuickViewFrontEnd {
23 15 use SingletonTrait;
24 16
25 - /**
26 - * Asset Handle
27 - *
28 - * @var string
29 - */
30 - private $handle = 'rtsb-quick-view';
31 -
32 - /**
33 - * Class constructor.
34 - */
35 17 public function __construct() {
36 - add_action( 'wp_enqueue_scripts', [ $this, 'enqueue' ], 99 );
18 + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue' ] );
37 19
38 - // Gallery Plugin Support rtwpvg_disable_enqueue_scripts.
20 + // Gallery Plugin Support rtwpvg_disable_enqueue_scripts
39 21 add_filter( 'rtwpvg_disable_enqueue_scripts', '__return_false', 11 );
40 22
41 23 // Template.
24 +
42 25 add_action( 'rtsb/modules/quick_view/frontend/display', [ $this, 'button_hook' ] );
26 + // Add do_action( 'rtsb/modules/quick_view/frontend/display' ); for display anywhere.
43 27
44 28 add_action( 'rtsb/modules/quick_view/print_button', [ $this, 'print_button' ] );
45 29
46 30 // Load action for product template.
@@ -65,9 +49,9 @@
65 49 * @return void
66 50 * @since 1.0.0
67 51 */
68 52 public function quick_view_action_template() {
69 - wp_enqueue_style( 'elementor-frontend' );
53 +
70 54 // Image.
71 55 add_action( 'rtsb/wcqv/product/image', 'woocommerce_show_product_sale_flash', 10 );
72 56 add_action( 'rtsb/wcqv/product/image', 'woocommerce_show_product_images', 20 );
73 57
@@ -79,17 +63,12 @@
79 63 add_action( 'rtsb/wcqv/product/summary', 'woocommerce_template_single_add_to_cart', 25 );
80 64 add_action( 'rtsb/wcqv/product/summary', 'woocommerce_template_single_meta', 30 );
81 65 }
82 66
83 - /**
84 - * Quick View AJAX.
85 - *
86 - * @return void
87 - */
88 67 public function product_quick_view_ajax() {
89 68 $product_id = isset( $_REQUEST['product_id'] ) ? absint( $_REQUEST['product_id'] ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
90 69
91 - if ( empty( $product_id ) || 'publish' !== get_post_status( $product_id ) ) {
70 + if ( empty( $product_id ) ) {
92 71 wp_send_json_error( esc_html__( 'Product Id not found', 'shopbuilder' ) );
93 72 }
94 73
95 74 global $sitepress;
@@ -105,8 +84,12 @@
105 84 // Remove product thumbnails gallery.
106 85 if ( defined( 'RTWPVG_VERSION' ) ) {
107 86 remove_action( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 );
108 87 }
88 + if ( ! defined( 'RTWPVG_VERSION' ) ) {
89 + add_action( 'woocommerce_product_thumbnails', [ $this, 'woocommerce_product_thumbnails_before' ], 1 );
90 + add_action( 'woocommerce_product_thumbnails', [ $this, 'woocommerce_product_thumbnails_after' ], 25 );
91 + }
109 92
110 93 ob_start();
111 94 Fns::load_template( 'quick-view/content' );
112 95 $html = ob_get_contents(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
@@ -121,8 +104,9 @@
121 104 * @return void
122 105 * @since 1.0.0
123 106 */
124 107 public function attach_button() {
108 +
125 109 $positions = apply_filters(
126 110 'rtsb/module/quick_view/loop_btn_position',
127 111 [
128 112
@@ -141,8 +125,9 @@
141 125 ]
142 126 );
143 127
144 128 // Add the link "Add to wishlist" in the loop.
129 +
145 130 $loop_btn_position = Fns::get_option( 'modules', 'quick_view', 'loop_btn_position', 'after_add_to_cart' );
146 131
147 132 if ( 'shortcode' !== $loop_btn_position && isset( $positions[ $loop_btn_position ]['hook'] ) ) {
148 133 add_action(
@@ -153,9 +138,9 @@
153 138 ],
154 139 isset( $positions[ $loop_btn_position ]['priority'] ) ? $positions[ $loop_btn_position ]['priority'] : ''
155 140 );
156 141 }
157 -
142 + // TODO:: Maybe this hooks is not working. Need to Check gutenberg compatibility.
158 143 // Add the link "Quick view" for Gutenberg blocks.
159 144 add_filter( 'woocommerce_blocks_product_grid_item_html', [ $this, 'add_button_for_block' ], 10, 3 );
160 145 }
161 146
@@ -163,8 +148,30 @@
163 148 * Print "Add to compare" button
164 149 *
165 150 * @return void
166 151 */
152 + public function woocommerce_product_thumbnails_before() {
153 + ?>
154 + <div class="rtsb-gallery-images-wrapper">
155 + <?php
156 + }
157 + /**
158 + * Print "Add to compare" button
159 + *
160 + * @return void
161 + */
162 + public function woocommerce_product_thumbnails_after() {
163 +
164 + ?>
165 + </div>
166 + <?php
167 + }
168 +
169 + /**
170 + * Print "Add to compare" button
171 + *
172 + * @return void
173 + */
167 174 public function button_hook() {
168 175 if ( ! apply_filters( 'rtsb/module/quick_view/show_button', true ) ) {
169 176 return;
170 177 }
@@ -175,13 +182,9 @@
175 182 }
176 183
177 184
178 185 /**
179 - * Print "Add to compare" button.
180 - *
181 - * @param int $product_id Product ID.
182 - *
183 - * @return void
186 + * @return string|void
184 187 */
185 188 public function print_button( $product_id = 0 ) {
186 189 global $product;
187 190
@@ -188,27 +191,25 @@
188 191 if ( ! $product instanceof WC_Product && $product_id ) {
189 192 $product = wc_get_product( $product_id );
190 193 }
191 194
192 - $classes = [];
193 - $button_text = Fns::get_option( 'modules', 'quick_view', 'button_text', esc_html__( 'Quick View', 'shopbuilder' ) );
194 - $has_button_text = ! empty( Fns::get_option( 'modules', 'quick_view', 'button_text', '' ) );
195 + // if ( ! $current_product instanceof WC_Product ) {
196 + // return '';
197 + // }
195 198
196 - if ( $has_button_text ) {
197 - $classes[] = 'has-text';
198 - }
199 + $classes = []; // button class.
200 + $button_text = Fns::get_option( 'modules', 'quick_view', 'button_text', esc_html__( 'Quick View', 'shopbuilder' ) );
199 201
200 202 $icon_html = '<i class="rtsb-icon rtsb-icon-eye"></i>';
201 203 // get product type.
202 204 $product_type = $product->get_type();
203 205 $params = [
204 - 'classes' => $classes,
205 - 'product_id' => $product->get_id(),
206 - 'product_type' => $product_type,
207 - 'button_text' => $button_text,
208 - 'has_button_text' => $has_button_text,
209 - 'left_text' => apply_filters( 'rtsb/module/quick_view/button_left_text', '' ),
210 - 'right_text' => apply_filters( 'rtsb/module/quick_view/button_right_text', '' ),
206 + 'classes' => $classes,
207 + 'product_id' => $product->get_id(),
208 + 'product_type' => $product_type,
209 + 'button_text' => $button_text,
210 + 'left_text' => apply_filters( 'rtsb/module/quick_view/button_left_text', '' ),
211 + 'right_text' => apply_filters( 'rtsb/module/quick_view/button_right_text', '' ),
211 212 ];
212 213 // let third party developer filter options.
213 214 $atts = apply_filters( 'rtsb/module/quick_view/button_params', $params );
214 215 // set fragment options.
@@ -216,51 +217,39 @@
216 217
217 218 Fns::load_template( 'quick-view/button', $atts );
218 219 }
219 220
221 +
220 222 /**
221 223 * Wishlist button Shortcode callable function
222 224 *
223 - * @return string
225 + * @param array $atts
226 + * @param string $content
227 + *
228 + * @return string [HTML]
224 229 */
225 - public function button_shortcode() {
230 + public function button_shortcode( $atts, $content = '' ) {
231 + $this->enqueue();
226 232 global $product;
227 -
228 233 if ( ! $product instanceof WC_Product ) {
229 234 return '';
230 235 }
236 + ob_start();
231 237
232 - ob_start();
233 238 do_action( 'rtsb/modules/quick_view/print_button', $product->get_id() );
234 239
235 240 return ob_get_clean();
236 241 }
237 242
238 - /**
239 - * Enqueue assets.
240 - *
241 - * @return void
242 - */
243 243 public function enqueue() {
244 - wp_enqueue_style( 'elementor-icons-fa-regular' );
245 - wp_enqueue_style( 'elementor-icons-fa-solid' );
246 - wp_enqueue_style( 'elementor-icons-shared-0' );
247 -
248 - if ( ! class_exists( 'WooProductVariationGallery' ) && current_theme_supports( 'wc-product-gallery-slider' ) ) {
249 - wp_enqueue_script( 'wc-flexslider' );
250 - }
251 -
252 244 wp_enqueue_script( 'wc-add-to-cart-variation' );
253 -
254 245 if ( version_compare( WC()->version, '3.0.0', '>=' ) ) {
255 246 if ( current_theme_supports( 'wc-product-gallery-zoom' ) ) {
256 - wp_enqueue_script( 'wc-zoom' );
247 + wp_enqueue_script( 'zoom' );
257 248 }
258 -
259 249 if ( current_theme_supports( 'wc-product-gallery-lightbox' ) ) {
260 - wp_enqueue_script( 'wc-photoswipe-ui-default' );
250 + wp_enqueue_script( 'photoswipe-ui-default' );
261 251 wp_enqueue_style( 'photoswipe-default-skin' );
262 -
263 252 if ( has_action( 'wp_footer', 'woocommerce_photoswipe' ) === false ) {
264 253 add_action( 'wp_footer', 'woocommerce_photoswipe', 15 );
265 254 }
266 255 }
@@ -265,10 +254,23 @@
265 254 }
266 255 }
267 256 wp_enqueue_script( 'wc-single-product' );
268 257 }
269 - // Enqueue assets.
270 - $this->handle = Fns::enqueue_module_assets( $this->handle, 'quick-view' );
258 +
259 + wp_register_style( 'rtsb-modules', rtsb()->get_assets_uri( 'modules/modules.css' ), [], RTSB_VERSION );
260 + wp_register_script(
261 + 'rtsb-quick-view',
262 + rtsb()->get_assets_uri( 'modules/quick-view.js' ),
263 + [
264 + 'jquery',
265 + 'rtsb-public',
266 + ],
267 + RTSB_VERSION,
268 + true
269 + );
270 + wp_enqueue_style( 'rtsb-modules' );
271 + wp_enqueue_script( 'rtsb-quick-view' );
272 +
271 273 // Allow user to load custom style and scripts!
272 274 do_action( 'rtsb/modules/quick_view/custom_scripts' );
273 275
274 276 $params = apply_filters(
@@ -279,9 +281,9 @@
279 281 'isLoggedIn' => is_user_logged_in(),
280 282 ]
281 283 );
282 284
283 - wp_localize_script( $this->handle, 'rtsbQvParams', $params );
285 + wp_localize_script( 'rtsb-quick-view', 'rtsbQvParams', $params );
284 286 }
285 287
286 288
287 289 /**