PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.5.3
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.5.3
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
fluent-cart / app / Modules / Templating / Bricks / DynamicData.php

DynamicData.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.5.3, at app/Modules/Templating/Bricks/DynamicData.php

115 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Modules\Templating\Bricks;
4
5
6 use FluentCart\App\Hooks\Handlers\CPTHandler;
7 use FluentCart\App\Modules\Data\ProductDataSetup;
8 use FluentCart\App\Services\Renderer\ProductCardRender;
9
10 class DynamicData
11 {
12 public function register()
13 {
14 add_filter('bricks/dynamic_tags_list', function ($tags) {
15 $fctTags = $this->getTagsPairs();
16 foreach ($fctTags as $name => $label) {
17 $tags[] = [
18 'name' => '{' . $name . '}',
19 'label' => $label,
20 'group' => 'Product - FluentCart',
21 ];
22 }
23 return $tags;
24 });
25
26 add_filter('bricks/dynamic_data/render_tag', [$this, 'renderValue'], 20, 3);
27 add_filter('bricks/dynamic_data/render_content', [$this, 'renderValue'], 20, 3);
28 add_filter('bricks/frontend/render_data', [$this, 'renderValue'], 20, 3);
29 }
30
31 public function getTagsPairs()
32 {
33 return [
34 'fct_product_title:linked' => __('Product Title', 'fluent-cart'),
35 'fct_product_image' => __('Product Image', 'fluent-cart'),
36 'fct_product_excerpt' => __('Product Excerpt', 'fluent-cart'),
37 'fct_product_price' => __('Product Price', 'fluent-cart'),
38 'fct_product_button' => __('Product Button', 'fluent-cart'),
39 'fct_product_view_button' => __('Product Button', 'fluent-cart'), // Legacy alias for backward compatibility
40 ];
41 }
42
43 public function renderValue($tag, $post, $context = 'text')
44 {
45 if (!is_string($tag)) {
46 return $tag;
47 }
48
49 if (strpos($tag, 'fct_product_') === false) {
50 return $tag;
51 }
52
53 if (!$post) {
54 $post = BricksHelper::getFormCurrentPost();
55 }
56
57 if (!$post || $post->post_type !== 'fluent-products') {
58 return $tag;
59 }
60
61 $tagKey = str_replace(['{', '}'], '', $tag);
62
63 // explode :
64 $tagParts = explode(':', $tagKey);
65 $tagName = array_shift($tagParts);
66
67 switch ($tagName) {
68 case 'fct_product_title':
69 $productName = $post->post_title;
70 if (in_array('linked', $tagParts)) {
71 $productName = '<a href="' . get_permalink($post) . '" data-fct-field="product-title">' . $productName . '</a>';
72 } else {
73 $productName = '<span data-fct-field="product-title">' . $productName . '</span>';
74 }
75 return $productName;
76 case 'fct_product_image':
77 $productModel = ProductDataSetup::getProductModel($post->ID);
78 if ($productModel) {
79 ob_start();
80 (new ProductCardRender($productModel))->renderProductImage();
81 $content = ob_get_clean();
82 return '<span data-fct-field="product-image">' . $content . '</span>';
83 }
84 break;
85 case 'fct_product_excerpt':
86 $excerpt = $post->post_excerpt;
87 if ($excerpt) {
88 return '<span data-fct-field="product-excerpt">' . wp_kses_post($excerpt) . '</span>';
89 }
90 return '';
91 case 'fct_product_price':
92 $productModel = ProductDataSetup::getProductModel($post->ID);
93 if ($productModel) {
94 ob_start();
95 (new ProductCardRender($productModel))->renderPrices();
96 $content = ob_get_clean();
97 return '<span data-fct-field="product-price">' . $content . '</span>';
98 }
99 break;
100 case 'fct_product_view_button': // Legacy alias for backward compatibility
101 case 'fct_product_button':
102 $productModel = ProductDataSetup::getProductModel($post->ID);
103 if ($productModel) {
104 ob_start();
105 (new ProductCardRender($productModel))->showBuyButton();
106 $content = ob_get_clean();
107 return '<span data-fct-field="product-button">' . $content . '</span>';
108 }
109 break;
110 }
111
112 return $tag;
113 }
114 }
115