fix(header): full zibll 1:1 for top multifunc search/cards/admin
Wire hero search through aksrt_get_search_box, device-gated cards/blur (zib_m_pc_is_show), expanded admin schema, and keyword/type UI styles matching zibll header-slider.
This commit is contained in:
@@ -127,8 +127,8 @@ class SchemaPageDisplay {
|
||||
['key' => 'search', 'title' => '搜索组件', 'fields' => [
|
||||
['key' => 'header_components_search_pc', 'label' => 'PC 端显示搜索', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
['key' => 'header_components_search_mobile', 'label' => '移动端显示搜索', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
['key' => 'header_components_search_show_keywords', 'label' => '显示热门搜索词', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
['key' => 'header_components_search_popular_limit', 'label' => '热词数量', 'type' => 'number', 'default' => 5, 'min' => 1, 'max' => 20, 'dependsOn' => ['key' => 'header_components_search_show_keywords', 'value' => true]],
|
||||
['key' => 'header_components_search_show_keywords', 'label' => '热门搜索', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
['key' => 'header_components_search_popular_limit', 'label' => '关键词最多显示', 'type' => 'number', 'default' => 6, 'min' => 2, 'max' => 50, 'dependsOn' => ['key' => 'header_components_search_show_keywords', 'value' => true]],
|
||||
['key' => 'header_components_search_show_input_cat', 'label' => '显示分类搜索', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
['key' => 'header_components_search_show_type', 'label' => '显示类型切换', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_search_enabled', 'value' => true]],
|
||||
[
|
||||
@@ -152,7 +152,7 @@ class SchemaPageDisplay {
|
||||
],
|
||||
]],
|
||||
['key' => 'cards', 'title' => '图标卡片样式', 'fields' => [
|
||||
['key' => 'header_components_filter_blur_devices', 'label' => '容器模糊设备', 'type' => 'checkbox', 'default' => [], 'dependsOn' => ['key' => 'header_components_cards_enabled', 'value' => true], 'options' => [
|
||||
['key' => 'header_components_filter_blur_devices', 'label' => '组件高斯模糊特效', 'type' => 'checkbox', 'default' => ['pc', 'mobile'], 'options' => [
|
||||
['label' => 'PC', 'value' => 'pc'],
|
||||
['label' => '移动端', 'value' => 'mobile'],
|
||||
]],
|
||||
@@ -161,7 +161,6 @@ class SchemaPageDisplay {
|
||||
['label' => '移动端', 'value' => 'mobile'],
|
||||
]],
|
||||
['key' => 'header_components_card_shared_bg', 'label' => '共享卡片背景', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_cards_enabled', 'value' => true]],
|
||||
['key' => 'header_components_card_blur', 'label' => '启用卡片模糊效果', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'header_components_cards_enabled', 'value' => true]],
|
||||
['key' => 'header_components_card_icon_shape', 'label' => '图标形状', 'type' => 'radio', 'default' => 'circle', 'dependsOn' => ['key' => 'header_components_cards_enabled', 'value' => true], 'options' => [
|
||||
['label' => '圆形', 'value' => 'circle'],
|
||||
['label' => '方形', 'value' => 'square'],
|
||||
|
||||
@@ -79,36 +79,76 @@ class DisplayRuntime {
|
||||
$show = $is_mobile ? $mobile_on : $pc_on;
|
||||
|
||||
$show_kw = !empty($settings['header_components_search_show_keywords']);
|
||||
$kw_limit = max(1, min(20, (int) ($settings['header_components_search_popular_limit'] ?? 5)));
|
||||
$kw_limit = max(1, min(50, (int) ($settings['header_components_search_popular_limit'] ?? 6)));
|
||||
$show_cat = !empty($settings['header_components_search_show_input_cat']);
|
||||
$show_type = !empty($settings['header_components_search_show_type']);
|
||||
$in_cat = sanitize_text_field((string) ($settings['header_components_search_in_cat'] ?? ''));
|
||||
$in_type = sanitize_key((string) ($settings['header_components_search_in_type'] ?? 'post')) ?: 'post';
|
||||
$more_cats = isset($settings['header_components_search_more_cats'])
|
||||
? array_values(array_filter(array_map('absint', (array) $settings['header_components_search_more_cats'])))
|
||||
: [];
|
||||
|
||||
// Mobile: hide hot keywords to keep the overlay short (zibll parity).
|
||||
// Mobile: hide hot keywords (zibll).
|
||||
if ($is_mobile) {
|
||||
$show_kw = false;
|
||||
}
|
||||
|
||||
$keywords = [];
|
||||
if ($show && $show_kw) {
|
||||
$raw = $settings['hot_search_keywords'] ?? '';
|
||||
$keywords = is_array($raw) ? $raw : preg_split('/[\s,]+/', (string) $raw, -1, PREG_SPLIT_NO_EMPTY);
|
||||
$keywords = array_slice(array_map('sanitize_text_field', $keywords), 0, $kw_limit);
|
||||
if (function_exists('aksrt_get_search_hot_keywords')) {
|
||||
$keywords = (array) aksrt_get_search_hot_keywords();
|
||||
} else {
|
||||
$raw = $settings['hot_search_keywords'] ?? '';
|
||||
$keywords = is_array($raw) ? $raw : preg_split('/[\s,]+/', (string) $raw, -1, PREG_SPLIT_NO_EMPTY);
|
||||
}
|
||||
$keywords = array_slice(array_map('sanitize_text_field', array_values($keywords)), 0, $kw_limit);
|
||||
}
|
||||
|
||||
$categories = [];
|
||||
if ($show && $show_cat) {
|
||||
$cats = get_categories(['hide_empty' => false, 'number' => 50]);
|
||||
$cat_args = ['hide_empty' => true, 'number' => 50];
|
||||
if ($more_cats) {
|
||||
$cat_args['include'] = $more_cats;
|
||||
$cat_args['orderby'] = 'include';
|
||||
$cat_args['hide_empty'] = false;
|
||||
}
|
||||
$cats = get_categories($cat_args);
|
||||
foreach ($cats as $cat) {
|
||||
$categories[] = ['id' => $cat->term_id, 'name' => $cat->name];
|
||||
$categories[] = ['id' => (int) $cat->term_id, 'name' => (string) $cat->name];
|
||||
}
|
||||
}
|
||||
|
||||
$type_options = [];
|
||||
if ($show && $show_type) {
|
||||
$types = Settings::get_search_content_types();
|
||||
foreach (($types['enabled'] ?? []) as $type_key => $type_value) {
|
||||
if ($type_value) {
|
||||
$type_options[] = ['key' => $type_key, 'label' => $type_key];
|
||||
$labels = [
|
||||
'post' => __('文章', 'aksrt'),
|
||||
'user' => __('用户', 'aksrt'),
|
||||
'product' => __('商品', 'aksrt'),
|
||||
'forum' => __('帖子', 'aksrt'),
|
||||
'forum_topic' => __('帖子', 'aksrt'),
|
||||
'plate' => __('版块', 'aksrt'),
|
||||
'forum_plate' => __('版块', 'aksrt'),
|
||||
'page' => __('页面', 'aksrt'),
|
||||
];
|
||||
$enabled = $types['enabled'] ?? $types;
|
||||
if (is_array($enabled)) {
|
||||
foreach ($enabled as $type_key => $type_value) {
|
||||
// Support both map[key=>bool] and list of keys.
|
||||
if (is_int($type_key) && is_string($type_value)) {
|
||||
$k = $type_value;
|
||||
$on = true;
|
||||
} else {
|
||||
$k = (string) $type_key;
|
||||
$on = (bool) $type_value;
|
||||
}
|
||||
if (!$on || $k === '') {
|
||||
continue;
|
||||
}
|
||||
$type_options[] = [
|
||||
'key' => $k,
|
||||
'label' => $labels[$k] ?? $k,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -128,6 +168,9 @@ class DisplayRuntime {
|
||||
'popular_limit' => $kw_limit,
|
||||
'show_input_cat' => $show_cat,
|
||||
'show_type' => $show_type,
|
||||
'in_cat' => $in_cat,
|
||||
'in_type' => $in_type,
|
||||
'more_cats' => $more_cats,
|
||||
'keywords' => $keywords,
|
||||
'categories' => $categories,
|
||||
'type_options' => $type_options,
|
||||
@@ -136,9 +179,7 @@ class DisplayRuntime {
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否显示顶部组件图标卡片覆盖
|
||||
*/
|
||||
|
||||
public static function header_components_cards_enabled(): bool {
|
||||
$settings = Settings::get_all();
|
||||
return !empty($settings['header_components_cards_enabled']);
|
||||
|
||||
Reference in New Issue
Block a user