PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.0.2
ShopBuilder – WooCommerce Builder For Elementor v2.0.2
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
shopbuilder / app / Abstracts / AdditionalQueryCustomLayout.php

AdditionalQueryCustomLayout.php in ShopBuilder – WooCommerce Builder For Elementor 2.0.2, at app/Abstracts/AdditionalQueryCustomLayout.php

221 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * ProductsGrid class.
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Abstracts;
9
10 use RadiusTheme\SB\Helpers\Fns;
11 use RadiusTheme\SB\Elementor\Render\Render;
12 use RadiusTheme\SB\Elementor\Widgets\Controls;
13 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
14 use RadiusTheme\SB\Traits\ActionBtnTraits;
15
16 // Do not allow directly accessing this file.
17
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 'This script cannot be accessed directly.' );
20 }
21
22 /**
23 * ProductsGrid class.
24 */
25 abstract class AdditionalQueryCustomLayout extends ElementorWidgetBase {
26 /**
27 * Control Fields
28 *
29 * @var array
30 */
31 /**
32 * Action Button Traits.
33 */
34 use ActionBtnTraits;
35
36 /**
37 * Construct function
38 *
39 * @param array $data default array.
40 * @param mixed $args default arg.
41 */
42 public function __construct( $data = [], $args = null ) {
43 $this->rtsb_base = $this->get_the_base();
44 parent::__construct( $data, $args );
45 $this->pro_tab = 'layout';
46 }
47 /**
48 * @return string
49 */
50 abstract protected function get_the_base();
51
52 /**
53 * Output the related products.
54 *
55 * @param array $args Provided arguments.
56 */
57 abstract public function get_the_products( $args = [] );
58
59 /**
60 * Widget Field
61 *
62 * @return array
63 */
64 public function widget_fields() {
65 return array_merge(
66 $this->layout_tab(),
67 $this->settings_tab(),
68 $this->style_tab()
69 );
70 }
71
72 /**
73 * Controls for layout tab
74 *
75 * @return array
76 */
77 protected function layout_tab() {
78 $fields = apply_filters(
79 'rtsb/elements/elementor/grid_layout_tab/' . $this->rtsb_base,
80 array_merge(
81 $this->widget_layout(),
82 $this->widget_query()
83 )
84 );
85
86 unset( $fields['grid_style'] );
87
88 return $fields;
89 }
90
91 /**
92 * Controls for settings tab
93 *
94 * @return array
95 */
96 protected function settings_tab() {
97 $content_visibility = Controls\SettingsFields::content_visibility( $this );
98
99 $extra_controls['show_section_title'] = [
100 'type' => 'switch',
101 'label' => esc_html__( 'Show Section Title?', 'shopbuilder' ),
102 'description' => esc_html__( 'Switch on to show product title.', 'shopbuilder' ),
103 'label_on' => esc_html__( 'On', 'shopbuilder' ),
104 'label_off' => esc_html__( 'Off', 'shopbuilder' ),
105 'separator' => 'default',
106 ];
107
108 $content_visibility = Fns::insert_controls( 'show_title', $content_visibility, $extra_controls );
109
110 unset( $content_visibility['show_title']['separator'] );
111
112 $sections = array_merge(
113 $content_visibility,
114 Controls\SettingsFields::image( $this ),
115 Controls\SettingsFields::action_buttons( $this ),
116 Controls\SettingsFields::section_title( $this ),
117 Controls\SettingsFields::product_title( $this ),
118 Controls\SettingsFields::product_excerpt( $this ),
119 Controls\SettingsFields::badges( $this ),
120 Controls\SettingsFields::variation_swatch( $this ),
121 Controls\SettingsFields::links( $this )
122 );
123 return apply_filters( 'rtsb/elements/elementor/product_custom_settings_tab', $sections, $this );
124 }
125 /**
126 * Controls for layout tab
127 *
128 * @return array
129 */
130 protected function widget_layout() {
131 return Controls\LayoutFields::grid_layout( $this );
132 }
133 /**
134 * Controls for layout tab
135 *
136 * @return array
137 */
138 protected function widget_query() {
139 $additional_query = Controls\LayoutFields::additional_query( $this );
140 $additional_query['posts_limit']['separator'] = 'default';
141 return $additional_query;
142 }
143
144 protected function pagination_navigation() {
145 return Controls\StyleFields::pagination( $this );
146 }
147
148 /**
149 * Controls for style tab
150 *
151 * @return array
152 */
153 protected function style_tab() {
154 return apply_filters(
155 'rtsb/elementor/grid_style_tab',
156 array_merge(
157 Controls\StyleFields::color_scheme( $this ),
158 Controls\StyleFields::layout_design( $this ),
159 Controls\StyleFields::product_image( $this ),
160 Controls\StyleFields::section_title( $this ),
161 Controls\StyleFields::product_title( $this ),
162 Controls\StyleFields::short_description( $this ),
163 Controls\StyleFields::product_price( $this ),
164 Controls\StyleFields::product_categories( $this ),
165 Controls\StyleFields::product_rating( $this ),
166 Controls\StyleFields::product_add_to_cart( $this ),
167 Controls\StyleFields::product_wishlist( $this ),
168 Controls\StyleFields::product_quick_view( $this ),
169 Controls\StyleFields::product_compare( $this ),
170 Controls\StyleFields::product_badges( $this ),
171 $this->pagination_navigation(),
172 Controls\StyleFields::hover_icon_button( $this )
173 ),
174 $this
175 );
176 }
177
178 /**
179 * Widget Field
180 *
181 * @return void|array
182 */
183 protected function render_template_file() {
184 return 'elementor/general/grid/';
185 }
186 /**
187 * Render Function
188 *
189 * @return void
190 */
191 protected function render() {
192 $settings = $this->get_settings_for_display();
193
194 $this->action_button_icon_modify();
195
196 $this->render_start();
197 $args = [
198 'posts_per_page' => $settings['posts_limit'],
199 'columns' => $settings['posts_limit'],
200 'orderby' => $settings['posts_order_by'], // @codingStandardsIgnoreLine.
201 'order' => $settings['posts_order'],
202 ];
203
204 $settings['query_products'] = $this->get_the_products( $args );
205
206 if ( empty( $settings['query_products'] ) ) {
207 return;
208 }
209
210 if ( $this->is_builder_mode() ) {
211 add_filter( 'wp_kses_allowed_html', [ FilterHooks::class, 'custom_wpkses_post_tags' ], 10, 2 );
212 }
213
214 Fns::print_html( Render::instance()->setup_loop_for_product_view( $this->render_template_file(), $settings, $this ), true );
215
216 $this->action_button_icon_set_default();
217 $this->render_end();
218 }
219
220 }
221