PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 2.0.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v2.0.5
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / gutenberg / blocks / categorygrid.php

categorygrid.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 2.0.5, at includes/gutenberg/blocks/categorygrid.php

234 lines 8.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Functions to register client-side assets (scripts and stylesheets) for the
5 * Gutenberg block.
6 *
7 * @package betterdocs
8 */
9
10 /**
11 * Registers all block assets so that they can be enqueued through Gutenberg in
12 * the corresponding context.
13 *
14 * @see https://wordpress.org/gutenberg/handbook/designers-developers/developers/tutorials/block-tutorial/applying-styles-with-stylesheets/
15 */
16 function betterdocs_categorygrid_block_init()
17 {
18 // Skip block registration if Gutenberg is not enabled/merged.
19 if (!function_exists('register_block_type')) {
20 return;
21 }
22 $dir = dirname(__FILE__);
23
24 $index_js = 'categorygrid/index.js';
25 wp_register_script(
26 'betterdocs-categorygrid-block-editor',
27 plugins_url($index_js, __FILE__),
28 array(
29 'wp-blocks',
30 'wp-i18n',
31 'wp-element',
32 'wp-editor',
33 'wp-block-editor',
34 'masonry'
35 ),
36 filemtime("$dir/$index_js")
37 );
38
39 $editor_style = 'categorygrid/style.css';
40 wp_register_style(
41 'betterdocs-categorygrid-block-editor',
42 plugins_url($editor_style, __FILE__),
43 array(),
44 filemtime("$dir/$editor_style"),
45 'all'
46 );
47
48 $grid_script = 'categorygrid/assets/js/categorygrid.js';
49 wp_register_script(
50 'betterdocs-categorygrid-js',
51 plugins_url($grid_script, __FILE__),
52 array('masonry'),
53 filemtime("$dir/$grid_script")
54 );
55
56
57
58 register_block_type(__DIR__ . '/categorygrid', array(
59 'editor_script' => 'betterdocs-categorygrid-block-editor',
60 'editor_style' => 'betterdocs-categorygrid-block-editor',
61 'render_callback' => 'betterdocs_categorygrid_server_side_render'
62 ));
63 }
64 add_action('init', 'betterdocs_categorygrid_block_init');
65
66 /**
67 * Category Grid Server Side Render
68 */
69 function betterdocs_categorygrid_server_side_render(array $attributes)
70 {
71 if (!is_admin()) {
72 wp_enqueue_style("betterdocs-categorygrid-block-editor");
73 wp_enqueue_script("betterdocs-categorygrid-js");
74 }
75
76 $attributes = wp_parse_args(
77 $attributes,
78 [
79 'blockId' => '',
80 'categories' => array(),
81 'includeCategories' => '',
82 'excludeCategories' => '',
83 'gridPerPage' => 9,
84 'orderBy' => 'name',
85 'order' => 'asc',
86 'layout' => 'default',
87 'showIcon' => true,
88 'showTitle' => true,
89 'titleTag' => 'h2',
90 'showCount' => true,
91 'showIcon' => true,
92 'showTitle' => true,
93 'showList' => true,
94 'layoutMode' => 'grid',
95 'showHeader' => true,
96 'showButton' => true,
97 'buttonText' => esc_html__('Explore More', 'betterdocs'),
98 'listIcon' => 'far fa-file-alt',
99 'postsPerPage' => 5,
100 'postsOrderBy' => 'date',
101 'postsOrder' => 'asc',
102 'enableNestedSubcategory' => false,
103 'postPerSubcategory' => 3,
104 'buttonIconPosition' => 'after',
105 'buttonIcon' => 'fas fa-angle-right',
106 'buttonPosition' => 'after',
107 'showButtonIcon' => true,
108 'colRange' => 3,
109 'TABcolRange' => 2,
110 'MOBcolRange' => 1,
111 'gridSpaceRange' => 10,
112 'TABgridSpaceRange' => 10,
113 'MOBgridSpaceRange' => 10,
114 ]
115 );
116
117 $blockId = $attributes['blockId'];
118 $includeCategories = $attributes['includeCategories'];
119 $excludeCategories = $attributes['excludeCategories'];
120 $gridPerPage = $attributes['gridPerPage'];
121 $orderBy = $attributes['orderBy'];
122 $order = $attributes['order'];
123 $layout = $attributes['layout'];
124 $showIcon = $attributes['showIcon'];
125 $showTitle = $attributes['showTitle'];
126 $titleTag = $attributes['titleTag'];
127 $showCount = $attributes['showCount'];
128 $enableNestedSubcategory = $attributes['enableNestedSubcategory'];
129 $postsPerPage = $attributes['postsPerPage'];
130 $postsOrderBy = $attributes['postsOrderBy'];
131 $postsOrder = $attributes['postsOrder'];
132 $colRange = $attributes['colRange'];
133 $TABcolRange = $attributes['TABcolRange'];
134 $MOBcolRange = $attributes['MOBcolRange'];
135 $showHeader = $attributes['showHeader'];
136 $showList = $attributes['showList'];
137 $listIcon = $attributes['listIcon'];
138 $showButton = $attributes['showButton'];
139 $showButtonIcon = $attributes['showButtonIcon'];
140 $buttonIconPosition = $attributes['buttonIconPosition'];
141 $buttonIcon = $attributes['buttonIcon'];
142 $buttonText = $attributes['buttonText'];
143 $postPerSubcategory = $attributes['postPerSubcategory'];
144 $layoutMode = $attributes['layoutMode'];
145 $gridSpaceRange = $attributes['gridSpaceRange'];
146 $TABgridSpaceRange = $attributes['TABgridSpaceRange'];
147 $MOBgridSpaceRange = $attributes['MOBgridSpaceRange'];
148 $multiple_kb = false;
149
150 // responsive class name
151 $gridColomnDesktopClass = $colRange ? " betterdocs-grid-$colRange" : "betterdocs-grid-3";
152 $gridColomnTabClass = $TABcolRange ? " betterdocs-grid-tablet-$TABcolRange" : "betterdocs-grid-tablet-2";
153 $gridColomnMobileClass = $MOBcolRange ? " betterdocs-grid-mobile-$MOBcolRange" : "betterdocs-grid-mobile-1";
154
155
156
157 $terms_object = array(
158 'taxonomy' => 'doc_category',
159 'order' => $order,
160 'orderby' => $orderBy,
161 'number' => $gridPerPage ? $gridPerPage : 5,
162 'hide_empty' => true,
163 );
164
165 if ('doc_category_order' === $orderBy) {
166 $terms_object['meta_key'] = 'doc_category_order';
167 $terms_object['orderby'] = 'meta_value_num';
168 }
169
170 if ($enableNestedSubcategory) {
171 $terms_object['parent'] = 0;
172 }
173
174 $includes = array();
175 if ($includeCategories && $includeCategories !== '[]') {
176 $includes = json_decode($includeCategories, true);
177 $includes = array_map(function ($item) {
178 return $item['value'];
179 }, $includes);
180 }
181
182 $excludes = array();
183 if ($excludeCategories && $excludeCategories !== '[]') {
184 $excludes = json_decode($excludeCategories, true);
185 $excludes = array_map(function ($item) {
186 return $item['value'];
187 }, $excludes);
188 }
189
190 if (is_array($includes) && count($includes)) {
191 $terms_object['include'] = array_diff($includes, (array) $excludes);
192 }
193
194 if (is_array($excludes) && count($excludes)) {
195 $terms_object['exclude'] = $excludes;
196 }
197
198 $taxonomy_objects = get_terms($terms_object);
199
200 $html = '';
201
202
203 $html .= '<div class="betterdocs-block ' . $blockId . $gridColomnDesktopClass . $gridColomnTabClass . $gridColomnMobileClass . '">';
204 $html .= '<div class="betterdocs-category-grid-wrapper">';
205 $html .= '<div class="betterdocs-category-grid ' . $layoutMode . '" data-column="' . $colRange . '" data-tab-column="' . $TABcolRange . '" data-mobile-column="' . $MOBcolRange . '" data-colomn-space="' . $gridSpaceRange . '" data-tab-colomn-space="' . $TABgridSpaceRange . '" data-mobile-colomn-space="' . $MOBgridSpaceRange . '">';
206
207
208 if ($taxonomy_objects && !is_wp_error($taxonomy_objects)) {
209 foreach ($taxonomy_objects as $term) {
210 $term_id = $term->term_id;
211 $term_slug = $term->slug;
212 $count = $term->count;
213 $get_term_count = betterdocs_get_postcount($count, $term_id, $enableNestedSubcategory);
214 $term_count = apply_filters('betterdocs_postcount', $get_term_count, false, $term_id, $term_slug, $count, $enableNestedSubcategory);
215 if ($term_count > 0) {
216 if ($layout === 'default') {
217 include BETTERDOCS_DIR_PATH . 'includes/gutenberg/template/category-grid/Layout_Default.php';
218 } else if ($layout === 'layout-2') {
219 include BETTERDOCS_DIR_PATH . 'includes/gutenberg/template/category-grid/Layout_2.php';
220 }
221 }
222 }
223 } else {
224 $html .= '<p class="no-posts-found">' . __('No posts found!', 'betterdocs') . '</p>';
225 }
226 wp_reset_postdata();
227
228 $html .= '</div>';
229 $html .= '</div>';
230 $html .= '</div>';
231
232 return $html;
233 }
234