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.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 / ProductCollection / Block.php
surecart / packages / blocks / Blocks / ProductCollection Last commit date
Block.php 1 year ago block.json 2 years ago
Block.php
134 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\ProductCollection;
4
5 use SureCartBlocks\Blocks\ProductItemList\Block as ProductItemListBlock;
6
7 /**
8 * Product Collection block.
9 */
10 class Block extends ProductItemListBlock {
11 /**
12 * Render the block
13 *
14 * @param array $attributes Block attributes.
15 * @param string $content Post content.
16 *
17 * @return string
18 */
19 public function render( $attributes, $content ) {
20 $term = get_queried_object();
21 $collection = sc_get_collection( $term->term_id );
22 $attributes['collection_id'] = $collection->id;
23
24 return \SureCart::block()->productListMigration( $attributes, $this->block )->render();
25
26 self::$instance = wp_unique_id( 'sc-product-item-list-' );
27
28 // check for inner blocks.
29 $product_inner_blocks = $this->block->parsed_block['innerBlocks'] ?? [];
30
31 $product_item_inner_blocks = $product_inner_blocks[0]['innerBlocks'] ?? $this->default_block_template;
32 $product_item_attributes = $product_inner_blocks[0]['attrs'] ?? $attributes;
33
34 $layout_config = array_map(
35 function ( $inner_block ) {
36 return (object) [
37 'blockName' => $inner_block['blockName'],
38 'attributes' => $inner_block['attrs'],
39 ];
40 },
41 $product_item_inner_blocks
42 );
43
44 $style = '';
45 $style .= $this->getStyle( $attributes, $product_item_attributes );
46
47 foreach ( $product_item_inner_blocks as $inner_blocks ) {
48 switch ( $inner_blocks['blockName'] ) {
49 case 'surecart/product-item-image':
50 $style .= $this->getVars( $inner_blocks['attrs'], 'image' );
51 break;
52 case 'surecart/product-item-title':
53 $style .= $this->getVars( $inner_blocks['attrs'], 'title' );
54 break;
55 case 'surecart/product-item-price':
56 $style .= $this->getVars( $inner_blocks['attrs'], 'price' );
57 break;
58 default:
59 break;
60 }
61 }
62
63 $wrapper_attributes = get_block_wrapper_attributes(
64 array(
65 'id' => self::$instance,
66 'style' => $style,
67 )
68 );
69
70 // query posts.
71 $product_query = new \WP_Query(
72 array(
73 'post_type' => 'sc_product',
74 'posts_per_page' => 10,
75 )
76 );
77
78 // get the product for each post.
79 $products = array_map(
80 function ( $post ) {
81 return sc_get_product( $post );
82 },
83 $product_query->posts ?? []
84 );
85
86 \SureCart::assets()->addComponentData(
87 'sc-product-item-list',
88 '#' . self::$instance,
89 [
90 'layoutConfig' => $layout_config,
91 'paginationAlignment' => $attributes['pagination_alignment'],
92 'limit' => (int) $attributes['limit'],
93 'pagination' => [
94 'total' => $product_query->found_posts,
95 'total_pages' => $product_query->max_num_pages,
96 ],
97 'page' => (int) ( $_GET['product-page'] ?? 1 ),
98 'paginationEnabled' => wp_validate_boolean( $attributes['pagination_enabled'] ),
99 'ajaxPagination' => wp_validate_boolean( $attributes['ajax_pagination'] ),
100 'paginationAutoScroll' => wp_validate_boolean( $attributes['pagination_auto_scroll'] ),
101 'searchEnabled' => wp_validate_boolean( $attributes['search_enabled'] ),
102 'sortEnabled' => wp_validate_boolean( $attributes['sort_enabled'] ),
103 'products' => ! \SureCart::account()->isConnected() ? $this->getDummyProducts( $attributes['limit'] ) : $products->data,
104 'collectionEnabled' => false,
105 'collectionId' => $this->getCollectionId( $attributes ),
106 'pageTitle' => get_the_title(),
107 ]
108 );
109
110 return '<sc-product-item-list ' . $wrapper_attributes . '></sc-product-item-list>';
111 }
112
113 /**
114 * Get query for the block.
115 *
116 * @param array $attributes Block attributes.
117 */
118 public function getQuery( $attributes ) {
119 $query = parent::getQuery( $attributes );
120 $query['product_collection_ids'] = [ $this->getCollectionId( $attributes ) ];
121 return $query;
122 }
123
124 /**
125 * Get collection id for the block.
126 *
127 * @param array $attributes Block attributes.
128 */
129 public function getCollectionId( $attributes ) {
130 $query_collection_id = get_query_var( 'sc_collection_page_id' );
131 return $query_collection_id ? $query_collection_id : $attributes['collection_id'] ?? '';
132 }
133 }
134