PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / packages / blocks / Blocks / Product / Media / Block.php
surecart / packages / blocks / Blocks / Product / Media Last commit date
Block.php 1 year ago block.json 1 year ago style.css 2 years ago
Block.php
113 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\Product\Media;
4
5 use SureCartBlocks\Blocks\Product\ProductBlock;
6
7 /**
8 * Product Title Block
9 */
10 class Block extends ProductBlock {
11 /**
12 * Keep track of the instance number of this block.
13 *
14 * @var integer
15 */
16 public static $instance;
17
18 /**
19 * Render the block
20 *
21 * @param array $attributes Block attributes.
22 * @param string $content Post content.
23 *
24 * @return string
25 */
26 public function render( $attributes, $content ) {
27 global $content_width;
28 $product = $this->getProductAndSetInitialState( $attributes['id'] ?? '' );
29 if ( empty( $product ) ) {
30 return '';
31 }
32
33 // no product media, show placeholder.
34 if ( empty( $product->product_medias->data ) ) {
35 return wp_sprintf(
36 '<figure %1$s>
37 <img src="%2$s" alt="%3$s" />
38 </figure>',
39 get_block_wrapper_attributes(),
40 esc_url( trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'images/placeholder.jpg' ),
41 esc_attr( $product->name )
42 );
43 }
44
45 // get images and thumbnails.
46 $images = $this->getImages( $product, $attributes['width'] ?? $content_width ?? 1170 );
47 $thumbnails = $this->getImages( $product, 240, [ 90, 120, 240 ] );
48
49 // if we have more than one, show the slider.
50 if ( count( $product->product_medias->data ) > 1 ) {
51 return wp_sprintf(
52 '<sc-image-slider
53 %1$s
54 product-id="%2$s"
55 images=\'%3$s\'
56 thumbnails=\'%4$s\'
57 has-thumbnails
58 thumbnails-per-page="%5$s"
59 auto-height="%6$s"
60 style="--sc-product-slider-height: %7$s"
61 ></sc-image-slider>',
62 get_block_wrapper_attributes(),
63 esc_attr( $product->id ),
64 wp_json_encode( $images ),
65 wp_json_encode( $thumbnails ),
66 esc_attr( $attributes['thumbnails_per_page'] ?? 5 ),
67 esc_attr( wp_validate_boolean( $attributes['auto_height'] ) ? 'true' : 'false' ),
68 esc_attr( wp_validate_boolean( $attributes['auto_height'] ) ? 'auto' : ( esc_attr( $attributes['height'] ?? 'auto' ) ) )
69 );
70 }
71
72 // show a single image.
73 return wp_sprintf(
74 '<figure %1$s>
75 <img src="%2$s" alt="%3$s" title="%4$s" />
76 </figure>',
77 get_block_wrapper_attributes(),
78 esc_url( $product->product_medias->data[0]->getUrl( 800 ) ),
79 esc_attr( $product->featured_media->alt ),
80 esc_attr( $product->featured_media->title )
81 );
82 }
83
84 /**
85 * Get the block classes.
86 *
87 * @param \SureCart\Models\Product` $product Product object.
88 * @param integer $width Image width.
89 *
90 * @return array
91 */
92 public function getImages( $product, $width, $srcset = [] ) {
93 $width = $width ?? 1170;
94
95 return array_map(
96 function( $product_media ) use ( $product, $width ) {
97 $items = [
98 'src' => esc_url( $product_media->getUrl( $width ) ),
99 'alt' => esc_attr( $product_media->media->alt ?? esc_url( $product_media->media->filename ?? $product->name ?? '' ) ),
100 'title' => $product_media->media->title ?? '',
101 'width' => $product_media->width,
102 'height' => $product_media->height,
103 ];
104 if ( ! empty( $srcset ) ) {
105 $items['srcset'] = $product_media->getSrcset( $srcset );
106 }
107 return $items;
108 },
109 $product->product_medias->data
110 );
111 }
112 }
113