diff --git a/assets/admin/src/pages/content/FooterSettings.vue b/assets/admin/src/pages/content/FooterSettings.vue
index da5caa0e..0fe3c40d 100644
--- a/assets/admin/src/pages/content/FooterSettings.vue
+++ b/assets/admin/src/pages/content/FooterSettings.vue
@@ -107,10 +107,10 @@
-
-
+
+
-
+
@@ -283,9 +283,7 @@
- 默认
- 紧凑
- 居中
+ 模板一(Zibll)
@@ -450,7 +448,7 @@ const form = reactive({
more_links: [],
hot_categories: 5,
copyright_text: '',
- layout_template: 'default',
+ layout_template: 'template_1',
// §2.3 三列结构化字段
footer_t1_m_s: ['pc', 'mobile'],
footer_t1_img: '',
@@ -804,7 +802,7 @@ async function loadSettings() {
form.more_links = data.more_links || []
form.hot_categories = data.hot_categories ?? 5
form.copyright_text = data.copyright_text || ''
- form.layout_template = data.layout_template || 'default'
+ form.layout_template = 'template_1'
// §2.3 三列结构化字段
form.footer_t1_m_s = Array.isArray(data.footer_t1_m_s) ? data.footer_t1_m_s : ['pc', 'mobile']
form.footer_t1_img = data.footer_t1_img || ''
diff --git a/assets/admin/src/schema/sections/page-display/index.js b/assets/admin/src/schema/sections/page-display/index.js
index cc2b21e6..7974e752 100644
--- a/assets/admin/src/schema/sections/page-display/index.js
+++ b/assets/admin/src/schema/sections/page-display/index.js
@@ -898,8 +898,8 @@ export const pageDisplaySchemas = {
fields: [
{ key: 'footer_contact_m_s', label: '显示设备', type: 'checkbox', default: ['pc', 'mobile'] },
{ key: 'footer_contact_more', label: '更多联系项', type: 'textarea', default: '' },
- { key: 'fcode_t2_code_1', label: '联系区上方自定义代码', type: 'textarea', default: '' },
- { key: 'fcode_t2_code_2', label: '联系区下方自定义代码', type: 'textarea', default: '' },
+ { key: 'fcode_t2_code_1', label: '链接 HTML(fcode_t2_code_1)', type: 'textarea', default: '' },
+ { key: 'fcode_t2_code_2', label: '链接下方自定义代码', type: 'textarea', default: '' },
],
},
{
diff --git a/assets/css/frontend/footer/part-1.css b/assets/css/frontend/footer/part-1.css
index e6bb9842..c6b6bb30 100644
--- a/assets/css/frontend/footer/part-1.css
+++ b/assets/css/frontend/footer/part-1.css
@@ -1,289 +1,25 @@
/* ============================================================
- * AKSRT Footer — v4.0 Zibll-Inspired
- *
- * 包含:
- * - 页脚主体(Bootstrap Grid)
- * - 浮动右侧按钮组
- * - 移动端底部 Tab 栏
+ * AKSRT Footer utilities — float buttons start + device helpers
+ * Main template_1 shell: zibll-shell.css
+ * Tabbar / float details: part-2.css+
* ============================================================ */
-/* ============================================================
- * 页脚主体
- * ============================================================ */
:root {
--aksrt-footer-tabbar-height: 49px;
}
-.site-footer {
- margin-top: auto;
- background: var(--footer-bg, var(--surface-1));
- border-top: 1px solid rgba(255, 255, 255, 0.55);
- padding: 34px 30px 30px;
-}
-
-.site-footer__inner {
- max-width: var(--container);
- margin: 0 auto;
- padding: 0 16px;
-}
-
-@media (min-width: 768px) {
- .site-footer__inner {
- padding: 0 24px;
- }
-}
-
-.site-footer__grid {
- padding-bottom: 32px;
-}
-
-.site-footer__brand {
- margin-bottom: 24px;
-}
-
-.site-footer__title {
- font-size: 1rem;
- font-weight: 700;
- margin: 0 0 12px;
- color: var(--color-ink);
-}
-
-.site-footer__desc {
- font-size: 14px;
- color: var(--color-ink-4);
- line-height: 1.6;
- margin: 0 0 16px;
- max-width: 360px;
-}
-
-.site-footer__col {
- margin-bottom: 24px;
-}
-
-.site-footer__col ul {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.site-footer__col li {
- margin-bottom: 8px;
-}
-
-.site-footer__col a {
- font-size: 14px;
- color: var(--footer-color, var(--color-ink-3));
- transition: color 0.15s ease;
-}
-
-.site-footer__col a:hover {
- color: var(--focus-color, var(--color-primary));
-}
-
-/* 社交链接行 */
-.social-row {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
- margin-bottom: 16px;
-}
-
-.social-row a {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 36px;
- height: 36px;
- border-radius: 50%;
- background: var(--surface-4);
- border: none;
- box-shadow: var(--shadow-sm);
- color: var(--color-ink-3);
- transition: background 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s;
-}
-
-.social-row a:hover {
- background: var(--color-primary);
- color: #fff;
- transform: translateY(-2px);
-}
-
-.social-row .social-icon-link {
- background: var(--surface-3);
- color: var(--color-ink-3);
-}
-
-.social-row .social-icon-link:hover {
- background: var(--color-primary);
- color: #fff;
-}
-
-/* 友情链接 */
-.site-footer__friends {
- margin-top: 16px;
-}
-
-.site-footer__friends-title {
- font-size: 0.8125rem;
- font-weight: 600;
- color: var(--color-ink-4);
- margin: 0 0 8px;
-}
-
-.site-footer__friends-list {
- display: flex;
- flex-wrap: wrap;
- gap: 6px 12px;
-}
-
-.site-footer__friends-list a {
- font-size: 0.8125rem;
- color: var(--color-ink-4);
-}
-
-.site-footer__friends-list a:hover {
- color: var(--color-primary);
-}
-
-/* 底部栏 */
-.site-footer__bottom {
- border-top: 1px solid var(--color-line);
- padding: 20px 0;
- text-align: center;
-}
-
-.site-footer__filings {
- display: flex;
- justify-content: center;
- gap: 16px;
- margin-bottom: 8px;
- flex-wrap: wrap;
-}
-
-.site-footer__filings a {
- font-size: 0.75rem;
- color: var(--color-ink-4);
-}
-
-.site-footer__filings a:hover {
- color: var(--color-primary);
-}
-
-.site-footer__copyright {
- font-size: 12px;
- color: var(--color-ink-4);
- margin: 0;
-}
-
-/* §2.3 三列结构化字段 */
-
-/* 品牌 Logo — day/night visibility lives in zibll-shell.css */
-.site-footer__logo {
- margin-bottom: 16px;
-}
-.site-footer__logo-img {
- max-height: 48px;
- width: auto;
-}
-
-/* 标准联系项 */
-.site-footer__contact-std {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 10px;
- margin: 12px 0;
-}
-.site-footer__contact-item {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 36px;
- height: 36px;
- border-radius: 50%;
- background: var(--surface-4, rgba(0,0,0,.05));
- border: none;
- box-shadow: var(--shadow-sm);
- color: var(--color-ink-3, #888);
- font-size: 16px;
- position: relative;
- cursor: pointer;
- text-decoration: none;
- transition: background .2s, color .2s, box-shadow .2s;
-}
-.site-footer__contact-item:hover,
-.site-footer__contact-item:focus {
- background: var(--color-primary);
- color: #fff;
-}
-.site-footer__contact-hover {
- display: none;
- position: absolute;
- bottom: calc(100% + 10px);
- left: 50%;
- transform: translateX(-50%);
- padding: 8px;
- background: var(--surface-1, #fff);
- border: none;
- border-radius: 12px;
- box-shadow: var(--shadow-lg);
- z-index: 10;
- white-space: nowrap;
-}
-.site-footer__contact-hover img {
- width: 120px;
- height: 120px;
- object-fit: contain;
- border-radius: 4px;
-}
-.site-footer__contact-item:hover .site-footer__contact-hover,
-.site-footer__contact-item:focus .site-footer__contact-hover {
- display: block;
-}
-
-/* 自定义代码区域 */
-.site-footer__custom-code,
-.site-footer__customize-code {
- margin-top: 8px;
- font-size: 0.85rem;
- color: var(--color-ink-4, #999);
-}
-
-/* 二维码图片组 */
-.site-footer__mini-qr {
- display: flex;
- justify-content: center;
- gap: 24px;
- padding: 20px 0;
- border-top: 1px solid var(--color-line, #eee);
-}
-.site-footer__mini-qr-item {
- text-align: center;
-}
-.site-footer__mini-qr-item img {
- width: 80px;
- height: 80px;
- object-fit: contain;
- border-radius: 6px;
- border: 1px solid var(--color-line, #eee);
-}
-.site-footer__mini-qr-item span {
- display: block;
- margin-top: 6px;
- font-size: 12px;
- color: var(--color-ink-4, #999);
-}
-
-/* 设备可见性工具类 */
+/* Device visibility utility classes */
@media (max-width: 767px) {
.hide-on-mobile { display: none !important; }
+ .hidden-xs { display: none !important; }
}
@media (min-width: 768px) {
.hide-on-desktop { display: none !important; }
+ .hide-on-pc { display: none !important; }
}
/* ============================================================
- * 浮动右侧按钮组(模仿 zibll float-right)
+ * 浮动右侧按钮组(模仿 zibll float-right)— continued in part-2
* ============================================================ */
/* 对齐 zibll: bottom 60px, z-index 1030 */
.float-right-btns {
@@ -295,3 +31,4 @@
flex-direction: column;
gap: 8px;
transition: opacity 0.3s ease;
+}
diff --git a/assets/css/frontend/footer/part-2.css b/assets/css/frontend/footer/part-2.css
index 3de30b5f..1d8e1155 100644
--- a/assets/css/frontend/footer/part-2.css
+++ b/assets/css/frontend/footer/part-2.css
@@ -139,6 +139,7 @@ body.dark-theme #float-theme-toggle .float-btn__icon-sun {
}
/* 有 tabbar 时页脚需要额外底部间距 */
+ .footer,
.site-footer {
padding-bottom: calc(var(--aksrt-footer-tabbar-height) + env(safe-area-inset-bottom, 0px));
}
diff --git a/assets/css/frontend/footer/zibll-shell.css b/assets/css/frontend/footer/zibll-shell.css
index 93f03f8e..a8449d51 100644
--- a/assets/css/frontend/footer/zibll-shell.css
+++ b/assets/css/frontend/footer/zibll-shell.css
@@ -1,5 +1,6 @@
/**
- * Footer — Zibll template_1 shell (list-inline)
+ * Footer — Zibll template_1 shell (list-inline + float third column)
+ * Contract: zibll/css/main.css footer block + zib_footer_con markup
*/
.footer {
color: var(--footer-color, var(--color-ink-4));
@@ -7,7 +8,6 @@
padding: 30px;
font-size: 13px;
margin-top: auto;
- border-top: 1px solid rgba(255, 255, 255, 0.55);
}
.footer a:not(.but):not(.focus-color) {
@@ -24,15 +24,11 @@
width: 100%;
}
+/* Bootstrap-like list-inline — NOT flex (Zibll uses float for third col) */
.footer .list-inline {
- display: flex;
- flex-wrap: wrap;
- align-items: flex-start;
- justify-content: space-between;
list-style: none;
margin: 0 0 12px;
padding: 0;
- gap: 10px 0;
}
.footer .list-inline > li {
@@ -41,50 +37,43 @@
display: inline-block;
}
-@media (min-width: 992px) {
- .footer .list-inline > li + li + li {
- margin-left: auto;
- }
+.footer .list-inline > li + li + li {
+ float: right;
}
-.footer .footer-logo,
-.footer .footer-logo-img,
-.footer a.footer-logo img {
+.footer a.footer-logo img,
+.footer .footer-logo img {
height: 40px;
width: auto;
max-width: 180px;
vertical-align: middle;
-}
-
-/* Light/dark footer logo toggle — keep display out of size rules so hide wins */
-.footer a.footer-logo .site-footer__logo--day {
display: inline-block;
}
-.footer a.footer-logo .site-footer__logo--night {
- display: none;
-}
-
-html.dark .footer a.footer-logo .site-footer__logo--day,
-[data-theme="dark"] .footer a.footer-logo .site-footer__logo--day,
-body.dark-theme .footer a.footer-logo .site-footer__logo--day {
- display: none;
-}
-
-html.dark .footer a.footer-logo .site-footer__logo--night,
-[data-theme="dark"] .footer a.footer-logo .site-footer__logo--night,
-body.dark-theme .footer a.footer-logo .site-footer__logo--night {
- display: inline-block;
-}
-
-.footer .title-h-left,
-.footer .site-footer__title {
+/* title-h-left underline bar (Zibll) */
+.footer .title-h-left {
+ position: relative;
margin: 8px 0 10px;
+ padding-bottom: 8px;
font-size: 15px;
font-weight: 700;
color: var(--color-ink, #333);
}
+.footer .title-h-left:before {
+ transition: 0.4s;
+ transform-origin: left;
+ position: absolute;
+ content: "";
+ width: 40px;
+ height: 3px;
+ background: var(--theme-color, var(--color-primary));
+ left: 0;
+ bottom: 3px;
+ border-radius: 5px;
+ box-shadow: 1px 1px 3px -1px var(--theme-color, var(--color-primary));
+}
+
.footer .footer-muted,
.footer .em09 {
font-size: 0.92em;
@@ -92,6 +81,10 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night {
line-height: 1.7;
}
+.footer .opacity8 {
+ opacity: 0.8;
+}
+
.footer .fcode-links {
margin: 0 0 8px;
line-height: 1.9;
@@ -110,35 +103,56 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night {
vertical-align: 0.2em;
}
+/* Circular contact buttons — Zibll .toggle-radius + .footer-contact > a */
+.footer .toggle-radius {
+ background: var(--this-bg, var(--main-border-color, var(--surface-2, #f0f0f0)));
+ width: 29px;
+ height: 29px;
+ display: inline-block;
+ text-align: center;
+ border-radius: 100%;
+ position: relative;
+ vertical-align: text-top;
+ line-height: 29px;
+ color: var(--footer-color, var(--color-ink-3));
+ text-decoration: none;
+}
+
.footer .footer-contact {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 4px;
margin-top: 10px;
}
-.footer .footer-contact > a,
-.footer .footer-contact__item {
- font-size: 18px;
+.footer .footer-contact > a {
+ font-size: 20px;
margin: 5px;
width: 35px;
height: 35px;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background: var(--surface-2, #f3f3f3);
+ line-height: 35px;
+ display: inline-block;
+ text-align: center;
+ border-radius: 100%;
+ background: var(--this-bg, var(--main-border-color, var(--surface-2, #f0f0f0)));
color: var(--footer-color, var(--color-ink-3));
text-decoration: none;
- transition: color 0.15s ease, background 0.15s ease, transform 0.15s ease;
+ vertical-align: text-top;
+ position: relative;
+ transition: color 0.15s ease, background 0.15s ease;
}
-.footer .footer-contact > a:hover,
-.footer .footer-contact__item:hover {
+.footer .footer-contact > a:hover {
color: #fff;
background: var(--focus-color, var(--color-primary));
- transform: translateY(-1px);
+}
+
+.footer .footer-contact > a i,
+.footer .footer-contact > a svg {
+ vertical-align: middle;
+}
+
+.footer .footer-contact > a svg {
+ width: 1em;
+ height: 1em;
+ fill: currentColor;
}
.footer .footer-wechat-img {
@@ -147,7 +161,7 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night {
width: 140px;
bottom: 90%;
left: -55px;
- padding-bottom: 12px;
+ padding-bottom: 20px;
z-index: 5;
}
@@ -176,49 +190,48 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night {
display: inline-block;
}
-.footer .footer-miniimg img {
- width: 90px;
- height: 90px;
- object-fit: cover;
- border-radius: 4px;
- background: var(--surface-2);
+.footer .footer-miniimg p {
+ margin: 0 0 4px;
}
-.footer .footer-conter,
-.footer .site-footer__copyright {
+.footer .footer-miniimg img {
+ width: 90px;
+ height: auto;
+ max-width: 100%;
+ display: block;
+ margin: 0 auto;
+ border-radius: 4px;
+}
+
+.footer .footer-conter {
margin: 8px 0 0;
line-height: 1.8;
color: var(--footer-color, var(--color-ink-4));
font-size: 13px;
- text-align: left;
-}
-
-.footer .footer-conter a:hover {
- color: var(--focus-color, var(--color-primary));
}
.footer .mt10 {
margin-top: 10px;
}
-#float-right-btns.float-right,
-.float-right {
- position: fixed;
- right: 16px;
- bottom: 80px;
- z-index: 90;
- display: flex;
- flex-direction: column;
- gap: 8px;
-}
-
+/* Device visibility — Zibll hidden-xs */
@media (max-width: 767px) {
- .footer {
- padding: 24px 16px 28px;
+ .footer .hidden-xs,
+ .hidden-xs {
+ display: none !important;
}
- .footer .list-inline {
- display: block;
+ .footer {
+ padding: 20px 0;
+ }
+
+ .footer .container-footer {
+ text-align: center;
+ padding: 0 16px;
+ }
+
+ .footer .list-inline > li + li + li {
+ float: none;
}
.footer .list-inline > li {
@@ -226,4 +239,21 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night {
margin: 12px 0;
max-width: none !important;
}
+
+ .footer .title-h-left:before {
+ left: 50%;
+ transform: translateX(-50%);
+ }
+}
+
+/* Float right buttons shell (kept from prior shell) */
+#float-right-btns.float-right,
+.float-right {
+ position: fixed;
+ right: 16px;
+ bottom: 60px;
+ z-index: 1030;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
}
diff --git a/footer.php b/footer.php
index f66c388d..36b787d0 100644
--- a/footer.php
+++ b/footer.php
@@ -1,94 +1,170 @@
true, 'icp_number' => '', 'police_enabled' => true, 'police_number' => ''];
-$icp_number = $filing['icp_enabled'] ? $filing['icp_number'] : '';
-$police_number = $filing['police_enabled'] ? $filing['police_number'] : '';
-$footer_text = $has_settings ? AKSRT_Settings::footer_text() : '';
-
-// 版权文案
+$icp_number = !empty($filing['icp_enabled']) ? (string) ($filing['icp_number'] ?? '') : '';
+$police_number = !empty($filing['police_enabled']) ? (string) ($filing['police_number'] ?? '') : '';
+$footer_text = $has_settings ? AKSRT_Settings::footer_text() : '';
$copyright_text = $has_settings ? AKSRT_Settings::get_copyright_text() : '';
-// 页脚布局模板
-$footer_layout = $has_settings ? AKSRT_Settings::get_footer_layout_template() : 'default';
-
-// §2.3 三列结构化字段
-$footer_brand = $has_settings ? AKSRT_Settings::get_footer_brand_settings() : ['m_s' => ['pc', 'mobile'], 'img' => '', 'img_dark' => '', 'title' => '', 'custom_code' => ''];
-$footer_contact_ext = $has_settings ? AKSRT_Settings::get_footer_contact_extended_settings() : ['m_s' => ['pc', 'mobile'], 'wechat_img' => '', 'qq' => '', 'weibo' => '', 'email' => '', 'more' => [], 'code_1' => '', 'code_2' => ''];
-$footer_mini = $has_settings ? AKSRT_Settings::get_footer_mini_img_settings() : ['m_s' => ['pc', 'mobile'], 'items' => []];
+// §2.3 三列结构化字段(Zibll keys)
+$footer_brand = $has_settings ? AKSRT_Settings::get_footer_brand_settings() : ['m_s' => ['pc', 'mobile'], 'img' => '', 'img_dark' => '', 'title' => '', 'custom_code' => ''];
+$footer_contact_ext = $has_settings ? AKSRT_Settings::get_footer_contact_extended_settings() : ['m_s' => ['pc', 'mobile'], 'wechat_img' => '', 'qq' => '', 'weibo' => '', 'email' => '', 'more' => [], 'code_1' => '', 'code_2' => ''];
+$footer_mini = $has_settings ? AKSRT_Settings::get_footer_mini_img_settings() : ['m_s' => ['pc', 'mobile'], 'items' => []];
$footer_customize_code = $has_settings ? AKSRT_Settings::get_footer_customize_code() : '';
-// 品牌列设备可见性
-$_brand_show_pc = in_array('pc', $footer_brand['m_s'], true);
-$_brand_show_sm = in_array('mobile', $footer_brand['m_s'], true);
-$_brand_vis_cls = '';
-if ($_brand_show_pc && !$_brand_show_sm) $_brand_vis_cls = ' hide-on-mobile';
-elseif (!$_brand_show_pc && $_brand_show_sm) $_brand_vis_cls = ' hide-on-desktop';
-
-// 联系区设备可见性
-$_contact_show_pc = in_array('pc', $footer_contact_ext['m_s'], true);
-$_contact_show_sm = in_array('mobile', $footer_contact_ext['m_s'], true);
-$_contact_vis_cls = '';
-if ($_contact_show_pc && !$_contact_show_sm) $_contact_vis_cls = ' hide-on-mobile';
-elseif (!$_contact_show_pc && $_contact_show_sm) $_contact_vis_cls = ' hide-on-desktop';
-
-// 二维码组设备可见性
-$_mini_show_pc = in_array('pc', $footer_mini['m_s'], true);
-$_mini_show_sm = in_array('mobile', $footer_mini['m_s'], true);
-$_mini_vis_cls = '';
-if ($_mini_show_pc && !$_mini_show_sm) $_mini_vis_cls = ' hide-on-mobile';
-elseif (!$_mini_show_pc && $_mini_show_sm) $_mini_vis_cls = ' hide-on-desktop';
+// 设备可见性 → Zibll hidden-xs(仅在不含 mobile 时隐藏移动端)
+$_brand_show_sm = in_array('mobile', (array) ($footer_brand['m_s'] ?? []), true);
+$_contact_show_sm = in_array('mobile', (array) ($footer_contact_ext['m_s'] ?? []), true);
+$_mini_show_sm = in_array('mobile', (array) ($footer_mini['m_s'] ?? []), true);
+$_brand_xs_cls = $_brand_show_sm ? '' : ' hidden-xs';
+$_contact_xs_cls = $_contact_show_sm ? '' : ' hidden-xs';
+$_mini_xs_cls = $_mini_show_sm ? '' : ' hidden-xs';
/**
* 渲染快速链接 URL:支持外链 / 站内相对路径
*/
-$render_link_url = function ($raw) {
- if (empty($raw)) return '#';
- if (strpos($raw, 'http') === 0) return esc_url($raw);
+$render_link_url = static function ($raw) {
+ if (empty($raw)) {
+ return '#';
+ }
+ if (strpos((string) $raw, 'http') === 0) {
+ return esc_url($raw);
+ }
return esc_url(home_url($raw));
};
+
+/**
+ * 构建 fcode-links 回退 HTML(structured links)
+ */
+$build_fallback_links_html = static function () use ($quick_links, $more_links, $friend_links, $hot_cat_count, $render_link_url) {
+ $link_bits = [];
+ foreach ((array) $quick_links as $ql) {
+ $label = $ql['name'] ?? $ql['label'] ?? '';
+ $url = $render_link_url($ql['url'] ?? '');
+ if ($label !== '') {
+ $link_bits[] = '' . esc_html($label) . '';
+ }
+ }
+ foreach ((array) $more_links as $ml) {
+ $label = $ml['name'] ?? $ml['label'] ?? '';
+ $url = $render_link_url($ml['url'] ?? '');
+ if ($label !== '') {
+ $link_bits[] = '' . esc_html($label) . '';
+ }
+ }
+ foreach ((array) $friend_links as $fl) {
+ $label = $fl['name'] ?? '';
+ $url = $fl['url'] ?? '#';
+ if ($label !== '') {
+ $link_bits[] = '' . esc_html($label) . '';
+ }
+ }
+ if ($hot_cat_count > 0) {
+ $_hot_cache_key = 'aksrt_footer_hot_cats_' . (int) $hot_cat_count;
+ $_hot_cats = wp_cache_get($_hot_cache_key, 'aksrt');
+ if (!is_array($_hot_cats)) {
+ $_hot_cats = get_categories([
+ 'orderby' => 'count',
+ 'order' => 'DESC',
+ 'number' => $hot_cat_count,
+ 'hide_empty' => true,
+ ]);
+ if (!is_array($_hot_cats)) {
+ $_hot_cats = [];
+ }
+ wp_cache_set($_hot_cache_key, $_hot_cats, 'aksrt', 12 * HOUR_IN_SECONDS);
+ }
+ foreach ($_hot_cats as $hc) {
+ $link_bits[] = '' . esc_html($hc->name) . '';
+ }
+ }
+ return implode(' ', $link_bits);
+};
+
+// 品牌 / 联系 / 二维码列内容存在性
+$_logo_html = '';
+if (function_exists('aksrt_get_adaptive_theme_img')) {
+ $_logo_html = aksrt_get_adaptive_theme_img(
+ (string) ($footer_brand['img'] ?? ''),
+ (string) ($footer_brand['img_dark'] ?? ''),
+ $blog_name,
+ 'style="height: 40px;"'
+ );
+}
+$_has_brand = $_logo_html !== '' || !empty($footer_brand['title']) || !empty($footer_brand['custom_code']);
+
+$_fcode_links = trim((string) ($footer_contact_ext['code_1'] ?? ''));
+if ($_fcode_links === '') {
+ $_fcode_links = $build_fallback_links_html();
+}
+$_fcode_links_is_raw = trim((string) ($footer_contact_ext['code_1'] ?? '')) !== '';
+
+$_has_contact_icons = !empty($footer_contacts)
+ || !empty($footer_contact_ext['wechat_img'])
+ || !empty($footer_contact_ext['qq'])
+ || !empty($footer_contact_ext['email'])
+ || !empty($footer_contact_ext['more'])
+ || !empty($footer_contact_ext['weibo']);
+$_has_links_col = $_fcode_links !== '' || !empty($footer_contact_ext['code_2']) || $_has_contact_icons;
+$_has_mini = !empty($footer_mini['items']);
+$_has_cols = $_has_brand || $_has_links_col || $_has_mini;
+
+// 底栏:customize 优先;否则回退版权/备案
+$_footer_conter = trim((string) $footer_customize_code);
+if ($_footer_conter === '') {
+ $footer_bits = [];
+ if ($icp_number !== '') {
+ $footer_bits[] = '' . esc_html($icp_number) . '';
+ }
+ if ($police_number !== '') {
+ $footer_bits[] = '' . esc_html($police_number) . '';
+ }
+ $copy = '© ' . esc_html(gmdate('Y')) . ' ' . esc_html($blog_name) . '.';
+ if ($copyright_text !== '') {
+ $copy .= ' ' . wp_kses_post($copyright_text);
+ }
+ if ($footer_text !== '') {
+ $copy .= ' ' . esc_html($footer_text);
+ }
+ if (!empty($footer_bits)) {
+ $copy .= ' ' . implode(' · ', $footer_bits);
+ }
+ $_footer_conter = $copy;
+} else {
+ $_footer_conter = wp_kses_post($_footer_conter);
+}
?>
@@ -103,127 +179,104 @@ $render_link_url = function ($raw) {
-