feat(nav): complete remaining zibll parity (search, i18n, senior menus, CSS)

- Remove obsolete dual-path nav CSS; add utilities + language dropdown styles
- Wire header/mobile translate switcher from i18n config
- Layout-2 inline search hot keywords panel; nav_folding on resize
- NavMenuOptions JSON editors for graphic_card / multi_column_links
- Section-navs zibll posts-nav-lists; page-navs enqueue; mobile article TOC box
- SPA/PHP user-card publish type; rebuild admin assets
This commit is contained in:
kate522 committed 2026-07-22 11:40:17 +08:00
1 parent 259dbdbe04
commit fc50e57bc9
22 files changed
+580 -1994

No files matched your search

+53
View File
@@ -147,3 +147,56 @@ function aksrt_render_language_switcher(string $style = 'dropdown'): string {
return $html;
}
/**
* Header language dropdown (zibll zib_get_translate_language_btn).
* Uses SPA i18n_available_langs when i18n enabled and position includes header.
*
* @param string $class Extra classes.
*/
function aksrt_get_translate_language_btn(string $class = ''): string {
if (!class_exists('\AKSRT\Settings\Settings')) {
return '';
}
$cfg = \AKSRT\Settings\Settings::get_i18n_config();
if (empty($cfg['enabled'])) {
return '';
}
$pos = (string) ($cfg['switcherPosition'] ?? 'footer');
if (!in_array($pos, ['header', 'both'], true)) {
return '';
}
$raw = (string) ($cfg['availableLangs'] ?? '');
$buttons = [];
foreach (preg_split('/
|␍|
/', $raw) as $line) {
$line = trim($line);
if ($line === '' || strpos($line, '|') === false) {
continue;
}
[$code, $label] = array_map('trim', explode('|', $line, 2));
if ($code === '' || $label === '') {
continue;
}
$buttons[] = ['language' => $code, 'text' => $label];
}
if (!$buttons) {
return '';
}
$buttons_html = '';
foreach ($buttons as $button) {
$buttons_html .= '<li><a href="javascript:;" class="translate-button translate-ignore flex ac" data-language="'
. esc_attr($button['language']) . '">' . esc_html($button['text']) . '</a></li>';
}
$is_mobile = wp_is_mobile();
$dropdown = '<ul class="dropdown-menu hover-show-con">' . $buttons_html . '</ul>';
$hover = !$is_mobile ? ' hover-show' : '';
$toggle = !$is_mobile ? '' : ' data-toggle="dropdown"';
return '<div class="dropdown language-dropdown ' . esc_attr($class) . $hover . '">'
. '<a href="javascript:;" class="toggle-radius"' . $toggle . ' title="' . esc_attr__('切换语言', 'aksrt') . '">'
. '<i class="fas fa-language" aria-hidden="true"></i></a>' . $dropdown . '</div>';
}
@@ -80,6 +80,9 @@ if (!function_exists('aksrt_nav_mobile_content')) :
$top_btns .= '<a href="javascript:;" class="toggle-radius main-search-btn" data-toggle-class data-target=".navbar-search" aria-label="'
. esc_attr__('打开搜索', 'aksrt') . '"><i class="fas fa-search" aria-hidden="true"></i></a>';
}
if (function_exists('aksrt_get_translate_language_btn')) {
$top_btns .= aksrt_get_translate_language_btn('pull-right');
}
if ($top_btns !== '') {
echo '<div class="flex ac pull-right" style="margin-right: -3px;">' . $top_btns . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
@@ -116,6 +119,10 @@ if (!function_exists('aksrt_nav_mobile_content')) :
}
echo $menu; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
if (is_singular('post')) {
echo '<div class="posts-nav-box" data-title="' . esc_attr__('文章目录', 'aksrt') . '"></div>';
}
// User box at bottom of drawer.
if (!empty($ctx['user_menu'])) {
echo aksrt_header_user_box_html($ctx); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+34 -5
View File
@@ -104,6 +104,7 @@ if (!function_exists('aksrt_get_menu_search')) :
$type = (string) ($state['type'] ?? 'post');
$cat_enabled = !empty($state['category_enabled']);
$cat_id = (int) ($state['category_id'] ?? 0);
$hots = is_array($ctx['search_hot_keywords'] ?? null) ? $ctx['search_hot_keywords'] : [];
echo '<form method="get" class="navbar-form navbar-left hover-show" action="' . esc_url(home_url('/')) . '" role="search" data-aksrt-search-form="inline">';
echo '<div class="form-group relative dropdown">';
@@ -112,9 +113,22 @@ if (!function_exists('aksrt_get_menu_search')) :
echo '<input type="hidden" name="aksrt_category" value="' . esc_attr((string) $cat_id) . '">';
}
echo '<input type="text" class="form-control search-input focus-show" name="s" value="'
. esc_attr(get_search_query()) . '" placeholder="' . esc_attr($placeholder) . '">';
. esc_attr(get_search_query()) . '" placeholder="' . esc_attr($placeholder) . '" autocomplete="off">';
echo '<div class="abs-right muted-3-color"><button type="submit" class="null" aria-label="'
. esc_attr__('搜索', 'aksrt') . '"><i class="fas fa-search" aria-hidden="true"></i></button></div>';
if ($hots) {
echo '<div class="dropdown-menu hover-show-con navbar-inline-search-panel">';
echo '<div class="muted-2-color em09 mb6">' . esc_html__('热门搜索', 'aksrt') . '</div>';
echo '<div class="navbar-inline-search-hots">';
foreach ($hots as $kw) {
$kw = trim((string) $kw);
if ($kw === '') {
continue;
}
echo '<a class="but jb-sm" href="' . esc_url(home_url('/?s=' . rawurlencode($kw))) . '">' . esc_html($kw) . '</a> ';
}
echo '</div></div>';
}
echo '</div></form>';
}
endif;
@@ -179,13 +193,25 @@ if (!function_exists('aksrt_header_user_box_html')) :
}
if (!empty($ctx['can_publish'])) {
$pub_text = class_exists('\AKSRT\Settings\Settings')
? (string) (\AKSRT\Settings\Settings::get_all()['header_user_newposts_text'] ?? '')
: '';
$all = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
$pub_text = (string) ($all['header_user_newposts_text'] ?? '');
if ($pub_text === '') {
$pub_text = __('发布内容', 'aksrt');
}
$href .= '<a rel="nofollow" href="' . esc_url((string) $ctx['publish_url']) . '">';
$pub_type = sanitize_key((string) ($all['header_user_newposts_btn'] ?? 'post'));
$pub_url = (string) $ctx['publish_url'];
if ($pub_type === 'topic' && function_exists('aksrt_get_forum_compose_url')) {
$u = aksrt_get_forum_compose_url();
if ($u) { $pub_url = $u; }
} elseif ($pub_type === 'product') {
if (function_exists('aksrt_get_product_edit_url')) {
$u = (string) aksrt_get_product_edit_url();
if ($u !== '') { $pub_url = $u; }
} else {
$pub_url = admin_url('post-new.php?post_type=aksrt_product');
}
}
$href .= '<a rel="nofollow" href="' . esc_url($pub_url) . '">';
$href .= '<div class="badg mb6 toggle-radius c-green"><i class="fas fa-pen" aria-hidden="true"></i></div>';
$href .= '<div class="c-green">' . esc_html($pub_text) . '</div></a>';
}
@@ -284,6 +310,9 @@ if (!function_exists('aksrt_menu_button')) :
$radius_but .= '<i class="fas fa-sun theme-icon-sun" aria-hidden="true" style="display:none"></i>';
$radius_but .= '</a>';
}
if (function_exists('aksrt_get_translate_language_btn')) {
$radius_but .= aksrt_get_translate_language_btn('ml10 pull-right');
}
if ($radius_but !== '') {
$button .= '<div class="navbar-form navbar-right flex ac">' . $radius_but . '</div>';
}