Files
wordpress-theme-aksrt/inc/helpers/homepage/layout.php
T

182 lines
6.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Fixed homepage layout renderer.
*
* @package Jio
*/
defined('ABSPATH') || exit;
if (!function_exists('jio_homepage_render_layout')) {
/**
* Render the fixed homepage layout (legacy latest-first content stream).
*
* Order (legacy-aligned):
* fluid top → main.container → top content → tabs/list → bottom content → sidebar
* → fluid bottom. Hero/header-slider is rendered from header.php, not here.
*/
function jio_homepage_render_layout(): void {
$main_list_enabled = !class_exists('\Jio\Settings\Settings') || \Jio\Settings\Settings::home_posts_list_enabled();
// Fluid zones live outside <main>, once only (removed from header.php).
jio_homepage_render_widget_zone(
['home_top_fluid'],
'fluid-widget-wrap jio-homepage__fluid-zone jio-homepage__fluid-zone--top'
);
?>
<main id="main-content" role="main" class="container site-main jio-homepage" tabindex="-1">
<div class="content-wrap jio-homepage__shell">
<div class="content-layout jio-homepage__content-layout jio-homepage__primary">
<?php
jio_homepage_render_widget_zone(
['home_top_content'],
'jio-homepage__content-zone jio-homepage__content-zone--top'
);
?>
<?php if ($main_list_enabled) :
$tab_configs = jio_homepage_get_current_page() === 1 ? jio_homepage_get_tab_configs() : [];
?>
<div class="home-tab-content">
<?php echo jio_homepage_get_tab_header_html($tab_configs); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<div class="tab-content">
<div class="posts-row ajaxpager tab-pane fade in active" id="index-tab-main">
<?php jio_homepage_render_ajax_option_menu(); ?>
<?php jio_homepage_render_posts_grid(jio_homepage_get_latest_query(), true); ?>
</div>
<?php echo jio_homepage_get_tab_panes_html($tab_configs); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
</div>
<?php endif; ?>
<?php
jio_homepage_render_widget_zone(
['home_bottom_content'],
'jio-homepage__content-zone jio-homepage__content-zone--bottom'
);
?>
</div>
</div>
<?php jio_homepage_render_sidebar(); ?>
</main>
<?php
jio_homepage_render_widget_zone(
['home_bottom_fluid'],
'fluid-widget-wrap jio-homepage__fluid-zone jio-homepage__fluid-zone--bottom'
);
}
}
if (!function_exists('jio_homepage_get_tab_header_html')) {
/**
* 首页 tab 头:tab 导航 / 翻页标题条 / 空占位 三态。
*
* @param array<int, array<string, mixed>> $tab_configs Configured term tabs.
*/
function jio_homepage_get_tab_header_html(array $tab_configs): string {
$list_title = class_exists('\Jio\Settings\Settings')
? \Jio\Settings\Settings::home_list_title()
: '';
$fallback_title = $list_title !== '' ? $list_title : __('最新发布', 'jio');
$paged = jio_homepage_get_current_page();
//不是第一页
if ($paged > 1) {
return '<div class="box-body notop nobottom"><div class="title-theme">' . $fallback_title
. '<small class="ml10">' . esc_html(sprintf(__('第%s页', 'jio'), $paged)) . '</small></div></div>';
}
$index_tab_nav = '';
foreach ($tab_configs as $index => $tab_cfg) {
$index_tab_nav .= '<li><a data-toggle="tab" data-ajax="' . esc_url(jio_homepage_get_tab_link($tab_cfg))
. '" href="#index-tab-' . (int) $index . '">' . wp_kses_post($tab_cfg['title']) . '</a></li>';
}
if (!$index_tab_nav) {
return $list_title !== ''
? '<div class="box-body notop nobottom"><div class="title-theme">' . wp_kses_post($list_title) . '</div></div>'
: '<div></div>';
}
$html = '<li class="active"><a data-toggle="tab" href="#index-tab-main">' . wp_kses_post($fallback_title) . '</a></li>' . $index_tab_nav;
return '<div class="index-tab affix-header-sm relative home-tab-nav-box mb10" offset-top="-8"><ul style="width:100%;" class="scroll-x no-scrollbar">' . $html . '</ul></div>';
}
}
if (!function_exists('jio_homepage_get_tab_panes_html')) {
/**
* 每个栏目的原位刷新 pane。
*
* pane 本身就是 .ajaxpager;post_ajax_trigger 指向栏目页,post_ajax 加载后
* 用栏目页自身的列表 DOM 原地替换 loader,不新建区域。
*
* @param array<int, array<string, mixed>> $tab_configs Configured term tabs.
*/
function jio_homepage_get_tab_panes_html(array $tab_configs): string {
if (!$tab_configs) {
return '';
}
$html = '';
foreach ($tab_configs as $index => $tab_cfg) {
$term = $tab_cfg['term'] ?? null;
$context = $term instanceof WP_Term && $term->taxonomy === 'topics' ? 'topics' : 'category';
$config = jio_archive_get_render_config(['context' => $context, 'term_id' => (int) $tab_cfg['term_id']]);
$is_card = ($config['mode'] ?? 'list') === 'card';
$placeholder = jio_render_placeholder($is_card ? 'card' : 'list', $is_card ? (wp_is_mobile() ? 4 : 12) : (wp_is_mobile() ? 4 : 6));
$html .= '<div class="ajaxpager tab-pane fade" id="index-tab-' . (int) $index . '">';
$html .= '<span class="post_ajax_trigger"><a class="ajax_load ajax-next ajax-open" href="' . esc_url(jio_homepage_get_tab_link($tab_cfg)) . '"></a></span>';
$html .= '<div class="post_ajax_loader">' . $placeholder . '</div>';
$html .= '</div>';
}
return $html;
}
}
if (!function_exists('jio_homepage_get_tab_link')) {
/**
* 栏目 tab 的加载链接:栏目页 + nofilter(抑制响应页的筛选菜单)。
*
* @param array<string, mixed> $tab_cfg Tab config with term and orderby.
*/
function jio_homepage_get_tab_link(array $tab_cfg): string {
$term = $tab_cfg['term'] ?? null;
if (!$term instanceof WP_Term) {
return home_url('/');
}
$query_arg = ['nofilter' => 'true'];
if (!empty($tab_cfg['orderby'])) {
$query_arg['orderby'] = $tab_cfg['orderby'];
}
$link = get_term_link($term);
if (is_wp_error($link)) {
return home_url('/');
}
return add_query_arg($query_arg, $link);
}
}
if (!function_exists('jio_render_fixed_homepage')) {
/**
* Render the new fixed homepage layout.
*/
function jio_render_fixed_homepage(): bool {
if (!jio_is_fixed_homepage_request()) {
return false;
}
get_header();
jio_homepage_render_layout();
get_footer();
return true;
}
}