feat(homepage): align homepage settings with Zibll main-list keys
Move /settings/homepage onto a dedicated REST trait that stores Zibll option IDs (home_posts_list_s, index_list_title, home_lists, exclude posts/cats, list1 orderby). Reader exposes both canonical keys and temporary aliases for existing front-end helpers; save path drops superseded AKSRT-only keys. HomepageSettings.vue binds to the new contract while remaining a Vue custom page.
This commit is contained in:
1 parent
18630370dc
commit
8fddc33156
7 files changed
+467
-196
No files matched your search
@@ -156,28 +156,94 @@ class AKSRT_Settings_Home_Cms {
|
||||
$s = AKSRT_Settings::get_all();
|
||||
$allowed_sorts = self::homepage_allowed_sorts();
|
||||
|
||||
// Zibll-aligned primary list contract.
|
||||
$main_list_enabled = array_key_exists('home_posts_list_s', $s)
|
||||
? !empty($s['home_posts_list_s'])
|
||||
: (!isset($s['home_posts_list_enabled']) || !empty($s['home_posts_list_enabled']));
|
||||
|
||||
$sort_bar_enabled = array_key_exists('home_list1_orderby_s', $s)
|
||||
? !empty($s['home_list1_orderby_s'])
|
||||
: (!isset($s['home_list_sort_enabled']) || !empty($s['home_list_sort_enabled']));
|
||||
|
||||
$orderby_option = [];
|
||||
if (isset($s['home_list1_orderby_option']) && is_array($s['home_list1_orderby_option'])) {
|
||||
$orderby_option = $s['home_list1_orderby_option'];
|
||||
}
|
||||
$default_sort = sanitize_key((string) ($orderby_option['orderby'] ?? $s['homepage_default_sort'] ?? 'modified'));
|
||||
if (!in_array($default_sort, $allowed_sorts, true)) {
|
||||
$default_sort = 'modified';
|
||||
}
|
||||
$sort_options_raw = $orderby_option['options'] ?? $s['home_list_sort_options'] ?? [];
|
||||
if (!is_array($sort_options_raw)) {
|
||||
$sort_options_raw = [];
|
||||
}
|
||||
$sort_options = self::normalize_sort_options($sort_options_raw);
|
||||
if (!in_array($default_sort, $sort_options, true)) {
|
||||
array_unshift($sort_options, $default_sort);
|
||||
$sort_options = array_values(array_unique($sort_options));
|
||||
}
|
||||
|
||||
$list_title = '';
|
||||
if (array_key_exists('index_list_title', $s)) {
|
||||
$list_title = sanitize_text_field((string) $s['index_list_title']);
|
||||
} elseif (array_key_exists('home_list_title', $s)) {
|
||||
$list_title = sanitize_text_field((string) $s['home_list_title']);
|
||||
}
|
||||
if ($list_title === '') {
|
||||
$list_title = __('最新发布', 'aksrt');
|
||||
}
|
||||
|
||||
$exclude_posts = self::normalize_int_array(
|
||||
$s['home_exclude_posts'] ?? $s['home_exclude_post_ids'] ?? []
|
||||
);
|
||||
$exclude_cats = self::normalize_int_array(
|
||||
$s['home_exclude_cats'] ?? $s['home_exclude_category_ids'] ?? []
|
||||
);
|
||||
|
||||
$tabs_raw = [];
|
||||
if (isset($s['home_lists']) && is_array($s['home_lists'])) {
|
||||
$tabs_raw = $s['home_lists'];
|
||||
} elseif (isset($s['homepage_tabs']) && is_array($s['homepage_tabs'])) {
|
||||
$tabs_raw = $s['homepage_tabs'];
|
||||
}
|
||||
|
||||
$settings = [
|
||||
'homepage_card_style' => isset($s['homepage_card_style']) ? sanitize_key((string) $s['homepage_card_style']) : 'default',
|
||||
'homepage_multi_thumb_enabled' => !isset($s['homepage_multi_thumb_enabled']) || !empty($s['homepage_multi_thumb_enabled']),
|
||||
'homepage_multi_thumb_min_images' => (int) ($s['homepage_multi_thumb_min_images'] ?? 3),
|
||||
'homepage_sidebar_mini_enabled' => !isset($s['homepage_sidebar_mini_enabled']) || !empty($s['homepage_sidebar_mini_enabled']),
|
||||
'homepage_default_sort' => isset($s['homepage_default_sort']) && in_array($s['homepage_default_sort'], $allowed_sorts, true) ? $s['homepage_default_sort'] : 'modified',
|
||||
'homepage_default_view' => isset($s['homepage_default_view']) ? sanitize_key((string) $s['homepage_default_view']) : 'list',
|
||||
'homepage_sort_ajax_enabled' => !isset($s['homepage_sort_ajax_enabled']) || !empty($s['homepage_sort_ajax_enabled']),
|
||||
'homepage_sticky_tabs_enabled' => !isset($s['homepage_sticky_tabs_enabled']) || !empty($s['homepage_sticky_tabs_enabled']),
|
||||
'homepage_content_model' => isset($s['homepage_content_model']) && in_array($s['homepage_content_model'], ['post', 'mixed'], true) ? $s['homepage_content_model'] : 'mixed',
|
||||
'homepage_tabs' => self::normalize_homepage_tabs(isset($s['homepage_tabs']) && is_array($s['homepage_tabs']) ? $s['homepage_tabs'] : []),
|
||||
'home_posts_list_enabled' => !isset($s['home_posts_list_enabled']) || !empty($s['home_posts_list_enabled']),
|
||||
'home_list_title' => isset($s['home_list_title']) ? sanitize_text_field((string) $s['home_list_title']) : __('最新发布', 'aksrt'),
|
||||
'home_list_sort_enabled' => !isset($s['home_list_sort_enabled']) || !empty($s['home_list_sort_enabled']),
|
||||
'home_list_sort_options' => self::normalize_sort_options(isset($s['home_list_sort_options']) && is_array($s['home_list_sort_options']) ? $s['home_list_sort_options'] : []),
|
||||
'home_list_sort_dropdown' => !empty($s['home_list_sort_dropdown']),
|
||||
'home_exclude_post_ids' => self::normalize_int_array($s['home_exclude_post_ids'] ?? []),
|
||||
'home_exclude_category_ids' => self::normalize_int_array($s['home_exclude_category_ids'] ?? []),
|
||||
'homepage_tab_posts_per_page' => max(1, min(20, (int) ($s['homepage_tab_posts_per_page'] ?? 6))),
|
||||
'homepage_tab_limit' => max(1, min(12, (int) ($s['homepage_tab_limit'] ?? 4))),
|
||||
'homepage_module_hero_enabled' => !isset($s['homepage_module_hero_enabled']) || !empty($s['homepage_module_hero_enabled']),
|
||||
'homepage_module_banner_enabled' => !isset($s['homepage_module_banner_enabled']) || !empty($s['homepage_module_banner_enabled']),
|
||||
// Canonical Zibll keys.
|
||||
'home_posts_list_s' => $main_list_enabled,
|
||||
'home_list1_orderby_s' => $sort_bar_enabled,
|
||||
'home_list1_orderby_option' => [
|
||||
'orderby' => $default_sort,
|
||||
'options' => $sort_options,
|
||||
],
|
||||
'index_list_title' => $list_title,
|
||||
'home_exclude_posts' => $exclude_posts,
|
||||
'home_exclude_cats' => $exclude_cats,
|
||||
'home_lists' => self::normalize_homepage_tabs($tabs_raw),
|
||||
|
||||
// Convenience aliases for existing PHP/Vue callers during cutover of this slice.
|
||||
'home_posts_list_enabled' => $main_list_enabled,
|
||||
'home_list_sort_enabled' => $sort_bar_enabled,
|
||||
'homepage_default_sort' => $default_sort,
|
||||
'home_list_sort_options' => $sort_options,
|
||||
'home_list_title' => $list_title,
|
||||
'home_exclude_post_ids' => $exclude_posts,
|
||||
'home_exclude_category_ids' => $exclude_cats,
|
||||
'homepage_tabs' => self::normalize_homepage_tabs($tabs_raw),
|
||||
|
||||
// AKSRT presentation extras.
|
||||
'homepage_card_style' => isset($s['homepage_card_style']) ? sanitize_key((string) $s['homepage_card_style']) : 'default',
|
||||
'homepage_multi_thumb_enabled' => !isset($s['homepage_multi_thumb_enabled']) || !empty($s['homepage_multi_thumb_enabled']),
|
||||
'homepage_multi_thumb_min_images' => (int) ($s['homepage_multi_thumb_min_images'] ?? 3),
|
||||
'homepage_sidebar_mini_enabled' => !isset($s['homepage_sidebar_mini_enabled']) || !empty($s['homepage_sidebar_mini_enabled']),
|
||||
'homepage_default_view' => isset($s['homepage_default_view']) ? sanitize_key((string) $s['homepage_default_view']) : 'list',
|
||||
'homepage_sort_ajax_enabled' => !isset($s['homepage_sort_ajax_enabled']) || !empty($s['homepage_sort_ajax_enabled']),
|
||||
'homepage_sticky_tabs_enabled' => !isset($s['homepage_sticky_tabs_enabled']) || !empty($s['homepage_sticky_tabs_enabled']),
|
||||
'homepage_content_model' => isset($s['homepage_content_model']) && in_array($s['homepage_content_model'], ['post', 'mixed'], true) ? $s['homepage_content_model'] : 'mixed',
|
||||
'home_list_sort_dropdown' => !empty($s['home_list_sort_dropdown']),
|
||||
'homepage_tab_posts_per_page' => max(1, min(20, (int) ($s['homepage_tab_posts_per_page'] ?? 6))),
|
||||
'homepage_tab_limit' => max(1, min(12, (int) ($s['homepage_tab_limit'] ?? 4))),
|
||||
'homepage_module_hero_enabled' => !isset($s['homepage_module_hero_enabled']) || !empty($s['homepage_module_hero_enabled']),
|
||||
'homepage_module_banner_enabled' => !isset($s['homepage_module_banner_enabled']) || !empty($s['homepage_module_banner_enabled']),
|
||||
];
|
||||
|
||||
if (!in_array($settings['homepage_card_style'], ['default', 'style2', 'style3'], true)) {
|
||||
|
||||
Reference in new issue
Block a user