Files
wordpress-theme-aksrt/templates/pages/page-documentnav.php
T

168 lines
7.7 KiB
PHP

<?php
/**
* Template Name: AKSRT - Document Navigation
* Template Post Type: page
*
* 文档导航页:文档站式导航。
* 支持侧边章节树、当前章节高亮、索引卡片、最近更新列表、基础搜索。
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
get_header();
// Read doc mode settings
$doc_settings = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_docs_mode_settings() : [];
$default_order = $doc_settings['default_order'] ?? 'menu_order';
$presenter = class_exists('AKSRT_Docs_Presenter') ? AKSRT_Docs_Presenter::get_instance() : null;
// Get root-level pages
$pages = $presenter
? $presenter->get_root_pages($default_order)
: get_pages([
'sort_column' => $default_order === 'title' ? 'post_title' : ($default_order === 'date' ? 'post_date' : 'menu_order, post_title'),
'sort_order' => 'ASC',
'parent' => 0,
'hierarchical' => 0,
'post_status' => 'publish',
]);
// Recent updates
$recent_pages = $presenter
? $presenter->get_recent_pages(8)
: get_pages([
'sort_column' => 'post_modified',
'sort_order' => 'DESC',
'number' => 8,
'post_status' => 'publish',
]);
$show_sidebar = !empty($doc_settings['toc_enabled']) || !empty($recent_pages);
?>
<main id="main-content" class="container page-content-default" tabindex="-1">
<header class="aksrt-doc-nav-header">
<h1 class="aksrt-doc-nav-header__title"><?php echo esc_html(get_the_title() ?: __('文档导航', 'aksrt')); ?></h1>
<?php $desc = get_the_excerpt(); if ($desc) : ?>
<p class="aksrt-doc-nav-header__desc"><?php echo esc_html($desc); ?></p>
<?php endif; ?>
</header>
<div class="aksrt-doc-nav container" data-aksrt-doc-page-id="<?php echo (int) get_the_ID(); ?>">
<div class="content-wrap">
<div class="content-layout<?php echo $show_sidebar && !empty($recent_pages) ? '' : ' content-layout--no-sidebar'; ?>">
<div class="content-layout__primary">
<!-- Quick search -->
<div class="aksrt-doc-nav__search">
<input type="text" class="aksrt-doc-nav__search-input" placeholder="<?php esc_attr_e('搜索文档...', 'aksrt'); ?>" id="aksrt-doc-search">
<i class="fas fa-search aksrt-doc-nav__search-icon"></i>
</div>
<div class="aksrt-doc-search__results" data-aksrt-doc-search-results hidden></div>
<?php if (!empty($pages)) : ?>
<!-- Toolbar: category chips -->
<div class="aksrt-doc-toolbar">
<div class="aksrt-doc-toolbar__chips">
<button type="button" class="aksrt-doc-toolbar__chip is-active" data-cat-id="0"><?php esc_html_e('全部', 'aksrt'); ?></button>
<?php foreach ($pages as $p) : ?>
<button type="button" class="aksrt-doc-toolbar__chip" data-cat-id="<?php echo (int) $p->ID; ?>"><?php echo esc_html($p->post_title); ?></button>
<?php endforeach; ?>
</div>
<span class="aksrt-doc-toolbar__meta"><?php printf(esc_html__('%d 篇文档', 'aksrt'), count($pages)); ?></span>
</div>
<?php endif; ?>
<div class="aksrt-doc-nav__layout">
<!-- Document index cards -->
<div class="aksrt-doc-nav__main">
<?php if (!empty($pages)) : ?>
<div class="aksrt-doc-nav__grid">
<?php foreach ($pages as $p) :
$children = $presenter
? $presenter->get_flat_tree($p->ID, 1)
: get_pages([
'child_of' => $p->ID,
'sort_column' => 'menu_order',
'sort_order' => 'ASC',
'parent' => $p->ID,
'post_status' => 'publish',
]);
$child_count = count($children);
$thumb = get_the_post_thumbnail_url($p->ID, 'medium');
$excerpt = wp_trim_words($p->post_excerpt, 30, '...');
?>
<a href="<?php echo esc_url(get_permalink($p->ID)); ?>" class="aksrt-doc-index-card" data-cat-id="<?php echo (int) $p->ID; ?>">
<?php if ($thumb) : ?>
<div class="aksrt-doc-index-card__thumb">
<img src="<?php echo esc_url($thumb); ?>" alt=""<?php echo function_exists('aksrt_lazy_loading') ? aksrt_lazy_loading('other') : ' loading="lazy"'; ?>>
</div>
<?php else : ?>
<div class="aksrt-doc-index-card__icon">
<i class="fas fa-book-open"></i>
</div>
<?php endif; ?>
<div class="aksrt-doc-index-card__body">
<h3 class="aksrt-doc-index-card__title"><?php echo esc_html($p->post_title); ?></h3>
<?php if ($excerpt) : ?>
<p class="aksrt-doc-index-card__desc"><?php echo esc_html($excerpt); ?></p>
<?php endif; ?>
<div class="aksrt-doc-index-card__meta">
<?php if ($child_count > 0) : ?>
<span class="aksrt-doc-index-card__count">
<i class="fas fa-file-alt"></i>
<?php printf(esc_html__('%d 篇文章', 'aksrt'), $child_count); ?>
</span>
<?php endif; ?>
<span class="aksrt-doc-index-card__date">
<i class="fas fa-clock"></i>
<?php echo esc_html(get_the_date('', $p->ID)); ?>
</span>
</div>
</div>
<i class="fas fa-chevron-right aksrt-doc-index-card__arrow"></i>
</a>
<?php endforeach; ?>
</div>
<?php else : ?>
<div class="aksrt-doc-nav__empty">
<i class="fas fa-book-open"></i>
<p><?php esc_html_e('暂无文档页面。', 'aksrt'); ?></p>
</div>
<?php endif; ?>
</div>
<!-- Sidebar: Recent updates -->
<?php if ($show_sidebar && !empty($recent_pages)) : ?>
<aside class="aksrt-doc-nav__sidebar sidebar">
<div class="aksrt-doc-nav__recent">
<h3 class="aksrt-doc-nav__recent-title">
<i class="fas fa-clock"></i>
<?php esc_html_e('最近更新', 'aksrt'); ?>
</h3>
<ul class="aksrt-doc-nav__recent-list">
<?php foreach ($recent_pages as $rp) : ?>
<li class="aksrt-doc-nav__recent-item">
<a href="<?php echo esc_url(get_permalink($rp->ID)); ?>">
<span class="aksrt-doc-nav__recent-name"><?php echo esc_html($rp->post_title); ?></span>
<time class="aksrt-doc-nav__recent-date"><?php echo esc_html(get_the_date('', $rp->ID)); ?></time>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
</aside>
<?php endif; ?>
</div>
</div>
</div>
</main>
<?php
get_footer();