PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / trunk
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid vtrunk
7.9.3 7.9.2 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.2.0 4.2.1 4.2.2 4.2.3 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 6.0.0 7.0.0 7.0.1 7.0.2 7.1.0 7.2.0 7.2.1 7.2.10 7.2.11 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 7.3.0 7.3.1 7.4.0 7.4.1 7.4.2 7.4.3 7.5.0 7.6.0 7.6.1 7.7.0 7.7.1 7.7.10 7.7.11 7.7.12 7.7.13 7.7.14 7.7.15 7.7.16 7.7.17 7.7.18 7.7.19 7.7.2 7.7.20 7.7.21 7.7.22 7.7.3 7.7.4 7.7.5 7.7.6 7.7.7 7.7.8 7.7.9 7.8.0 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1
the-post-grid / app / Controllers / Blocks / GridLayout.php
the-post-grid / app / Controllers / Blocks Last commit date
BlockController 2 months ago BlockBase.php 2 months ago GridHoverLayout.php 2 months ago GridLayout.php 2 months ago ListLayout.php 2 months ago RttpgRow.php 2 years ago SectionTitle.php 1 year ago
GridLayout.php
206 lines
1 <?php
2
3 namespace RT\ThePostGrid\Controllers\Blocks;
4
5 use RT\ThePostGrid\Controllers\Blocks\BlockController\SettingsTabController;
6 use RT\ThePostGrid\Controllers\Blocks\BlockController\StyleTabController;
7 use RT\ThePostGrid\Controllers\Blocks\BlockController\ContentTabController;
8 use RT\ThePostGrid\Helpers\Fns;
9
10 /**
11 * GridLayout Class
12 */
13 class GridLayout extends BlockBase {
14
15 private $prefix;
16 private $attribute_args;
17 private $block_type;
18
19 public function __construct() {
20 add_action( 'init', [ $this, 'register_blocks' ] );
21 $this->prefix = 'grid';
22 $this->block_type = 'rttpg/tpg-' . $this->prefix . '-layout';
23 $this->attribute_args = [
24 'prefix' => $this->prefix,
25 'default_layout' => 'grid-layout1',
26 ];
27 }
28
29 /**
30 * Register Block
31 *
32 * @return void
33 */
34 public function register_blocks() {
35 if ( ! function_exists( 'register_block_type' ) ) {
36 return;
37 }
38 register_block_type(
39 $this->block_type,
40 [
41 'attributes' => $this->get_attributes(),
42 'render_callback' => [ $this, 'render_block' ],
43 ]
44 );
45 }
46
47 /**
48 * Get attributes
49 *
50 * @param bool $default
51 *
52 * @return array
53 */
54 public function get_attributes() {
55 /**
56 * All Attribute
57 * Content Tab | Settings Tab | Style Tab
58 */
59 $content_attribute = ContentTabController::get_controller( $this->attribute_args );
60 $settings_attribute = SettingsTabController::get_controller();
61 $style_attribute = StyleTabController::get_controller();
62
63 return array_merge( $content_attribute, $settings_attribute, $style_attribute );
64 }
65
66 /**
67 * @param array $data
68 *
69 * @return false|string
70 */
71 public function render_block( $data ) {
72 $this->get_script_depends( $data );
73
74 $_prefix = $data['prefix'];
75
76 if ( ! rtTPG()->hasPro() && ! in_array( $data[ $_prefix . '_layout' ], [ 'grid-layout1', 'grid-layout4', 'grid-layout3' ] ) ) {
77 $data[ $_prefix . '_layout' ] = 'grid-layout1';
78 }
79
80 // Query
81 $posts_per_page = ! empty( $data['display_per_page'] ) ? $data['display_per_page'] : ( 'show' == $data['show_pagination'] ? get_option( 'posts_per_page' ) : $data['post_limit'] );
82 $query_args = $this->post_query_guten( $data, $_prefix );
83 if ( 'current_query' == $data['post_type'] && is_archive() ) {
84 global $wp_query;
85 $query = $wp_query;
86 } else {
87 $query = new \WP_Query( $query_args );
88 }
89
90 $rand = wp_rand();
91 $layoutID = 'rt-tpg-container-' . $rand;
92 /**
93 * Get Post Data for render post
94 */
95
96 $post_data = Fns::get_render_data_set( $data, $query->max_num_pages, $posts_per_page, $_prefix, 'yes' );
97
98 /**
99 * Post type render
100 */
101
102 // Category Source if exists
103 if ( isset( $data['category_source'] ) ) {
104 $post_data[ $data['post_type'] . '_taxonomy' ] = $data['category_source'];
105 }
106 // Tag source
107 if ( isset( $data['tag_source'] ) ) {
108 $post_data[ $data['post_type'] . '_tags' ] = $data['tag_source'];
109 }
110
111 $template_path = Fns::tpg_template_path( $post_data, 'gutenberg' );
112 $_layout = $data[ $_prefix . '_layout' ];
113 $_layout_style = $data['grid_layout_style'];
114 $dynamicClass = Fns::get_dynamic_class_gutenberg( $data );
115
116 ob_start();
117 ?>
118 <div class="<?php echo esc_attr( $dynamicClass ); ?>">
119 <div class="rt-container-fluid rt-tpg-container tpg-el-main-wrapper tpg-gutenberg clearfix <?php echo esc_attr( $_layout . '-main' ); ?>"
120 id="<?php echo esc_attr( $layoutID ); ?>"
121 data-layout="<?php echo esc_attr( $data[ $_prefix . '_layout' ] ); ?>"
122 data-grid-style="<?php echo esc_attr( $data['grid_layout_style'] ); ?>" data-sc-id="elementor"
123 data-el-settings='<?php echo Fns::is_filter_enable( $data ) ? esc_attr( htmlspecialchars( wp_json_encode( $post_data ) ) ) : ''; ?>'
124 data-el-query='<?php echo Fns::is_filter_enable( $data ) ? esc_attr( htmlspecialchars( wp_json_encode( $query_args ) ) ) : ''; ?>'
125 data-el-path='<?php echo Fns::is_filter_enable( $data ) ? esc_attr( $template_path ) : ''; ?>'>
126 <?php
127
128 $settings = get_option( rtTPG()->options['settings'] );
129 if ( isset( $settings['tpg_load_script'] ) || isset( $settings['tpg_enable_preloader'] ) ) {
130 ?>
131 <div id="bottom-script-loader" class="bottom-script-loader">
132 <div class="rt-ball-clip-rotate">
133 <div></div>
134 </div>
135 </div>
136 <?php
137 }
138
139 $wrapper_class = [];
140 $wrapper_class[] = str_replace( '-2', '', $_layout );
141 $wrapper_class[] = 'grid-behaviour';
142 $wrapper_class[] = ( in_array( $_layout, [ 'grid-layout2' ] ) ) ? 'tpg-even' : $_layout_style;
143 $wrapper_class[] = $_prefix . '_layout_wrapper';
144 if ( 'masonry' === $_layout_style && in_array(
145 $_layout,
146 [
147 'grid-layout1',
148 'grid-layout3',
149 'grid-layout4',
150 ]
151 ) ) {
152 $wrapper_class[] = 'tpg-masonry';
153 }
154
155 if ( in_array( $_layout, [ 'grid-layout6', 'grid-layout6-2' ] ) && $data['middle_border'] === 'no' ) {
156 $wrapper_class[] = 'disable-middle-border';
157 }
158
159 // Section title settings.
160 $is_carousel = '';
161 if ( rtTPG()->hasPro() && 'carousel' == $data['filter_btn_style'] && 'button' == $data['filter_type'] ) {
162 $is_carousel = 'carousel';
163 }
164
165 ?>
166 <div class='tpg-header-wrapper <?php echo esc_attr( $is_carousel ); ?>'>
167 <?php
168 Fns::get_section_title( $data, true );
169 Fns::print_html( Fns::get_frontend_filter_markup( $data, 'guten' ) );
170 ?>
171 </div>
172
173 <div class="rt-row rt-content-loader gutenberg-inner <?php echo esc_attr( implode( ' ', $wrapper_class ) ); ?>">
174 <?php
175 if ( $query->have_posts() ) {
176 $pCount = 1;
177 while ( $query->have_posts() ) {
178 $query->the_post();
179 set_query_var( 'tpg_post_count', $pCount );
180 set_query_var( 'tpg_total_posts', $query->post_count );
181 Fns::tpg_template( $post_data, 'gutenberg' );
182 $pCount ++;
183 }
184 } else {
185 if ( $data['no_posts_found_text'] ) {
186 printf( "<div class='no_posts_found_text'>%s</div>", esc_html( $data['no_posts_found_text'] ) );
187 } else {
188 printf( "<div class='no_posts_found_text'>%s</div>", esc_html__( 'No post found', 'the-post-grid' ) );
189 }
190 }
191 wp_reset_postdata();
192 ?>
193 </div>
194
195 <?php Fns::print_html( Fns::get_pagination_markup( $query, $data ) ); ?>
196
197 </div>
198 </div>
199 <?php
200
201 do_action( 'tpg_elementor_script' );
202
203 return ob_get_clean();
204 }
205
206 }