PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 1.1.2
ShopBuilder – WooCommerce Builder For Elementor v1.1.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 1.1.2, at app/Abstracts/AdditionalQueryCustomLayout.php

230 lines 6.0 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 return apply_filters(
79 'rtsb/elements/elementor/grid_layout_tab/' . $this->rtsb_base,
80 array_merge(
81 $this->widget_layout(),
82 $this->widget_columns(),
83 $this->widget_query(),
84 $this->image(),
85 )
86 );
87 }
88
89 /**
90 * Controls for settings tab
91 *
92 * @return array
93 */
94 protected function settings_tab() {
95 $content_visibility = Controls\SettingsFields::content_visibility( $this );
96
97 $extra_controls['show_section_title'] = [
98 'type' => 'switch',
99 'label' => esc_html__( 'Show Section Title?', 'shopbuilder' ),
100 'description' => esc_html__( 'Switch on to show product title.', 'shopbuilder' ),
101 'label_on' => esc_html__( 'On', 'shopbuilder' ),
102 'label_off' => esc_html__( 'Off', 'shopbuilder' ),
103 'separator' => 'default',
104 ];
105
106 $content_visibility = Fns::insert_controls( 'show_title', $content_visibility, $extra_controls );
107
108 unset( $content_visibility['show_title']['separator'] );
109
110 return apply_filters(
111 'rtsb/elements/elementor/grid_settings_tab/' . $this->rtsb_base,
112 array_merge(
113 $content_visibility,
114 Controls\SettingsFields::section_title( $this ),
115 Controls\SettingsFields::product_title( $this ),
116 Controls\SettingsFields::product_excerpt( $this ),
117 Controls\SettingsFields::action_buttons( $this ),
118 Controls\SettingsFields::add_to_cart( $this ),
119 Controls\SettingsFields::quick_view( $this ),
120 Controls\SettingsFields::compare( $this ),
121 Controls\SettingsFields::wishlist( $this ),
122 Controls\SettingsFields::badges( $this ),
123 Controls\SettingsFields::links( $this )
124 )
125 );
126 }
127 /**
128 * Controls for layout tab
129 *
130 * @return array
131 */
132 protected function widget_layout() {
133 return Controls\LayoutFields::grid_layout( $this );
134 }
135 /**
136 * Controls for layout tab
137 *
138 * @return array
139 */
140 protected function widget_query() {
141 $additional_query = Controls\LayoutFields::additional_query( $this );
142 $additional_query['posts_limit']['separator'] = 'default';
143 return $additional_query;
144 }
145 protected function widget_columns() {
146 $columns = Controls\LayoutFields::columns( $this );
147 unset( $columns['grid_style'] );
148 return $columns;
149 }
150 protected function image() {
151 return Controls\LayoutFields::image( $this );
152 }
153
154 protected function pagination_navigation() {
155 return Controls\StyleFields::pagination( $this );
156 }
157
158 /**
159 * Controls for style tab
160 *
161 * @return $this
162 */
163 protected function style_tab() {
164 return apply_filters(
165 'rtsb/elements/elementor/grid_style_tab/' . $this->rtsb_base,
166 array_merge(
167 Controls\StyleFields::color_scheme( $this ),
168 Controls\StyleFields::section_title( $this ),
169 Controls\StyleFields::product_title( $this ),
170 Controls\StyleFields::short_description( $this ),
171 Controls\StyleFields::product_price( $this ),
172 Controls\StyleFields::product_rating( $this ),
173 Controls\StyleFields::product_badges( $this ),
174 Controls\StyleFields::product_categories( $this ),
175 Controls\StyleFields::product_image( $this ),
176 Controls\StyleFields::product_add_to_cart( $this ),
177 $this->pagination_navigation(),
178 Controls\StyleFields::product_compare( $this ),
179 Controls\StyleFields::product_quick_view( $this ),
180 Controls\StyleFields::product_wishlist( $this ),
181 Controls\StyleFields::hover_icon_button( $this ),
182 Controls\StyleFields::advanced( $this ),
183 )
184 );
185 }
186
187 /**
188 * Widget Field
189 *
190 * @return void|array
191 */
192 protected function render_template_file() {
193 return 'elementor/general/grid/';
194 }
195 /**
196 * Render Function
197 *
198 * @return void
199 */
200 protected function render() {
201 $settings = $this->get_settings_for_display();
202
203 $this->action_button_icon_modify();
204
205 $this->theme_support();
206 $args = [
207 'posts_per_page' => $settings['posts_limit'],
208 'columns' => $settings['posts_limit'],
209 'orderby' => $settings['posts_order_by'], // @codingStandardsIgnoreLine.
210 'order' => $settings['posts_order'],
211 ];
212
213 $settings['query_products'] = $this->get_the_products( $args );
214
215 if ( empty( $settings['query_products'] ) ) {
216 return;
217 }
218
219 if ( $this->is_builder_mode() ) {
220 add_filter( 'wp_kses_allowed_html', [ FilterHooks::class, 'custom_wpkses_post_tags' ], 10, 2 );
221 }
222
223 Fns::print_html( Render::instance()->setup_loop_for_product_view( $this->render_template_file(), $settings ), true );
224 $this->edit_mode_script();
225 $this->action_button_icon_set_default();
226 $this->theme_support( 'render_reset' );
227 }
228
229 }
230