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