PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.2
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.2
4.9.2 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 All 200 releases
← All changes | includes/Editors/BlockEditor/Blocks/Sidebar.php +136 -55 3.4.04.9.2 View file →
@@ -1,87 +1,168 @@
1 1 <?php
2 +// phpcs:disable WordPress.DB.SlowDBQuery.slow_db_query_meta_query,WordPress.DB.SlowDBQuery.slow_db_query_meta_key,WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- core block query; meta/tax filtering required.
3 +namespace WPDeveloper\BetterDocs\Editors\BlockEditor\Blocks;
2 4
3 -namespace WPDeveloper\BetterDocs\Editors\BlockEditor\Blocks;
5 +if ( ! defined( 'ABSPATH' ) ) {
6 + exit;
7 +}
4 8
9 +
5 10 use WPDeveloper\BetterDocs\Editors\BlockEditor\Block;
6 11
7 12 class Sidebar extends Block {
8 13
9 - protected $editor_styles = [
10 - 'betterdocs-sidebar'
11 - ];
14 + public $view_wrapper = 'betterdocs-toc-block';
12 15
13 - protected $frontend_styles = [
14 - 'betterdocs-sidebar'
15 - ];
16 + protected $editor_styles = [
17 + 'betterdocs-sidebar',
18 + 'betterdocs-search-modal',
19 + 'betterdocs-extend-search-modal'
20 + ];
16 21
17 - public function get_name() {
18 - return 'sidebar';
19 - }
22 + protected $frontend_styles = [
23 + 'betterdocs-sidebar',
24 + 'betterdocs-fontawesome'
25 + ];
20 26
27 + protected $frontend_scripts = [
28 + 'betterdocs',
29 + 'betterdocs-category-grid',
30 + 'betterdocs-search-modal'
31 + ];
32 +
33 + public function get_name() {
34 + return 'sidebar';
35 + }
36 +
37 + public function register_scripts() {
38 + if( is_admin() ){ // load for wordpress admin panel only
39 + if ( function_exists( 'betterdocs_pro' ) && betterdocs_pro()->assets != null ) { // get the sidebar modal on gutenberg edit mode
40 + betterdocs_pro()->assets->enqueue( 'betterdocs-extend-search-modal', 'public/js/extend-search-modal.js', [] );
41 + }
42 + $this->assets_manager->enqueue(
43 + 'betterdocs-search-modal',
44 + 'shortcodes/js/search-modal.js',
45 + [ 'jquery' ]
46 + );
47 + }
48 + }
49 +
21 50 public function get_default_attributes() {
22 51 return [
23 - 'blockId' => '',
24 - 'sidebar_layout' => 'layout-1',
25 - 'includeCategories' => '',
26 - 'excludeCategories' => '',
27 - 'terms_per_page' => -1,
28 - 'terms_order' => 'asc',
29 - 'terms_orderby' => 'doc_category_order',
30 - 'docs_per_page' => -1,
31 - 'docs_orderby' => 'title',
32 - 'docs_order' => 'asc',
33 - 'enableNestedSubcategory' => false,
34 - 'docs_per_subcategory' => 10,
35 - 'titleTag' => 'h1',
36 - 'enableStickyTOC' => false
52 + 'blockId' => '',
53 + 'sidebar_layout' => 'layout-1',
54 + 'selectKB' => '',
55 + 'includeCategories' => '',
56 + 'excludeCategories' => '',
57 + 'terms_per_page' => -1,
58 + 'terms_order' => 'asc',
59 + 'terms_orderby' => 'doc_category_order',
60 + 'docs_per_page' => -1,
61 + 'postsOrderBy' => 'title',
62 + 'postsOrder' => 'asc',
63 + 'enableNestedSubcategory' => false,
64 + // Default follows the global "Lazy Load Sidebar Docs & Subcategories"
65 + // setting, mirroring the Elementor sidebar widget's control default, so
66 + // enabling the setting lazy-loads the block too unless overridden.
67 + 'enableLazyLoad' => (bool) betterdocs()->settings->get( 'archive_lazy_load_descendants' ),
68 + 'docs_per_subcategory' => 10,
69 + 'titleTag' => 'h1',
70 + 'show_count' => false,
71 + 'enableStickyTOC' => false,
72 + 'listIcon' => '',
73 + 'listIconImageUrl' => '',
74 + 'initialDocsQueryNumber' => 5,
75 + 'initialFAQQueryNumber' => 5,
76 + 'searchModalQueryTermIds' => '', //for search modal
77 + 'searchModalQueryDocIds' => '', //for search modal
78 + 'searchModalQueriesFaqGroupIds' => ''
37 79 ];
38 80 }
39 81
40 - public function render( $attributes, $content ) {
41 - $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
42 - $layout = str_replace( 'layout-', '', $layout );
82 + public function render( $attributes, $content ) {
83 + $layout = isset( $this->attributes['sidebar_layout'] ) ? $this->attributes['sidebar_layout'] : 'layout-1';
84 + $layout = str_replace( 'layout-', '', $layout );
85 + $layout_mapper = [
86 + 1 => 1,
87 + 2 => 4,
88 + 3 => 5,
89 + 4 => 2,
90 + 5 => 3,
91 + 6 => 6,
92 + 7 => 7,
93 + 8 => 8,
94 + ];
95 + $sidebar_layout = isset( $layout_mapper[ $layout ] ) ? $layout_mapper[ $layout ] : 1;
43 96
44 - $sidebar_layout = $layout;
97 + if ( ! betterdocs()->is_pro_active() ) {
98 + $sidebar_layout = 1;
99 + }
45 100
46 - if ( ! betterdocs()->is_pro_active() && ( $sidebar_layout == 2 || $sidebar_layout == 3 ) ) {
47 - $sidebar_layout = 1;
48 - }
101 + add_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10, 1 );
102 + $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
103 + if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
104 + $this->views( 'widgets/sticky-toc-block' );
105 + }
106 + remove_filter( 'betterdocs_base_terms_args', [ $this, 'filter_base_args' ], 10 );
107 + }
49 108
50 - add_filter( 'betterdocs_base_terms_args', [$this, 'filter_base_args'], 10, 1 );
51 - $this->views( 'templates/sidebars/sidebar-' . $sidebar_layout );
52 - if ( $this->attributes['enableStickyTOC'] && $sidebar_layout == 1 ) {
53 - $this->views( 'widgets/sticky-toc-block' );
54 - }
55 - remove_filter( 'betterdocs_base_terms_args', [$this, 'filter_base_args'], 10 );
56 - }
109 + public function filter_base_args( $term_args ) {
110 + if ( $term_args['orderby'] == 'doc_category_order' ) {
111 + $term_args['meta_key'] = 'doc_category_order';
112 + $term_args['orderby'] = 'meta_value_num';
113 + }
114 + return $term_args;
115 + }
57 116
58 - public function filter_base_args( $term_args ) {
59 - if ( $term_args['orderby'] == 'doc_category_order' ) {
60 - $term_args['meta_key'] = 'doc_category_order';
61 - $term_args['orderby'] = 'meta_value_num';
62 - }
63 - return $term_args;
64 - }
117 + public function view_params() {
118 + $settings = &$this->attributes;
65 119
66 - public function view_params() {
67 - $settings = &$this->attributes;
120 + $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
121 + $kb_slug = ! empty( $settings['selectKB'] ) && isset( $settings['selectKB'] ) ? json_decode( $settings['selectKB'] )->value : '';
122 + $layout_seven_params = [];
68 123
69 - $default_multiple_kb = betterdocs()->settings->get( 'multiple_kb' );
70 - $kb_slug = isset( $settings['selected_knowledge_base'] ) ? $settings['selected_knowledge_base'] : '';
71 - return [
124 + if ( $settings['sidebar_layout'] == 'layout-1' || $settings['sidebar_layout'] == 'layout-6' || $settings['sidebar_layout'] == 'layout-7' ) {
125 + $settings['show_count'] = true;
126 + }
127 +
128 + $default_view_params = [
72 129 'shortcode_attr' => [
73 130 'terms_order' => $settings['terms_order'],
74 - 'terms_orderby' => $settings['terms_orderby'],
131 + 'terms_orderby' => $settings['terms_orderby'] == 'doc_category_order' ? 'betterdocs_order' : $settings['terms_orderby'],
75 132 'terms_include' => array_diff( $this->string_to_array( $settings['includeCategories'] ), $this->string_to_array( $settings['excludeCategories'] ) ),
76 133 'terms_exclude' => isset( $settings['excludeCategories'] ) ? $this->string_to_array( $settings['excludeCategories'] ) : '',
77 134 'nested_subcategory' => $settings['enableNestedSubcategory'],
78 - 'multiple_knowledge_base' => $default_multiple_kb,
79 - 'kb_slug' => $kb_slug,
135 + 'lazy_load' => ! empty( $settings['enableLazyLoad'] ),
80 136 'sidebar_list' => true,
137 + 'list_icon_url' => '',
138 + 'list_icon_name' => $settings['sidebar_layout'] == 'layout-4' ? '' : ( ! empty( $this->attributes['listIconImageUrl'] ) ? $this->attributes['listIconImageUrl'] : ( ! empty( $this->attributes['listIcon'] ) ? $this->attributes['listIcon'] : ( ! empty( betterdocs()->settings->get( 'docs_list_icon' ) ) ? betterdocs()->settings->get( 'docs_list_icon' )['url'] : 'list' ) ) ),
139 + 'layout_type' => 'block',
81 140 'disable_customizer_style' => true,
82 141 'posts_per_page' => -1,
83 - 'title_tag' => $settings['titleTag']
142 + 'title_tag' => $settings['titleTag'],
143 + 'show_count' => $settings['show_count'],
144 + 'orderby' => $settings['postsOrderBy'],
145 + 'order' => $settings['postsOrder']
84 146 ]
85 147 ];
86 - }
148 +
149 + if ( $settings['sidebar_layout'] == 'layout-7' ) {
150 + $default_view_params['number_of_docs'] = $settings['initialDocsQueryNumber'];
151 + $default_view_params['number_of_faqs'] = $settings['initialFAQQueryNumber'];
152 + $default_view_params['faq_term_ids'] = $settings['searchModalQueriesFaqGroupIds'];
153 + $default_view_params['doc_ids'] = $settings['searchModalQueryDocIds'];
154 + $default_view_params['doc_term_ids'] = $settings['searchModalQueryTermIds'];
155 + }
156 +
157 + // Pass a KB scope only when one is explicitly selected on the block. When none is
158 + // set, omit kb_slug so the betterdocs_sidebar_template_shortcode_params filter
159 + // (Pro/MKB) can inject the current knowledge_base context on KB templates — the
160 + // same path the default sidebar uses. (Passing kb_slug='' would block injection.)
161 + if ( ! empty( $kb_slug ) ) {
162 + $default_view_params['shortcode_attr']['kb_slug'] = $kb_slug;
163 + $default_view_params['shortcode_attr']['multiple_knowledge_base'] = (bool) $default_multiple_kb;
164 + }
165 +
166 + return $default_view_params;
167 + }
87 168 }