修复了一些问题

This commit is contained in:
2026-08-25 18:22:30 +08:00
parent 0109a59922
commit c8d199a694
9 changed files with 381 additions and 25 deletions
+50 -12
View File
@@ -22,6 +22,14 @@ function aksrt_normalize_message_view(string $view): string {
return array_key_exists($view, aksrt_message_center_views()) ? $view : 'unread';
}
function aksrt_get_message_center_paginate_type(): string {
$settings = class_exists('\AKSRT\Settings\Settings')
? \AKSRT\Settings\Settings::notification_settings()
: [];
$type = sanitize_key((string) ($settings['paginate_type'] ?? 'ajax_lists'));
return in_array($type, ['ajax_lists', 'default'], true) ? $type : 'ajax_lists';
}
function aksrt_message_category_for_type(string $type): string {
$type = sanitize_key($type);
if (str_starts_with($type, 'asset_')) {
@@ -204,7 +212,10 @@ function aksrt_render_message_center_list(int $user_id, string $view, int $page
$per_page = 20;
$total_pages = max(1, (int) ceil(count($items) / $per_page));
$page = max(1, min($total_pages, $page));
$items = array_slice($items, ($page - 1) * $per_page, $per_page);
$paginate_type = aksrt_get_message_center_paginate_type();
$items = $paginate_type === 'ajax_lists'
? array_slice($items, 0, $page * $per_page)
: array_slice($items, ($page - 1) * $per_page, $per_page);
if (!$items) {
?>
@@ -217,11 +228,37 @@ function aksrt_render_message_center_list(int $user_id, string $view, int $page
<?php foreach ($items as $item) { aksrt_render_message_item($item, $view); } ?>
</div>
<?php if ($total_pages > 1) : ?>
<nav class="messages-pagination" aria-label="<?php esc_attr_e('消息分页', 'aksrt'); ?>">
<?php for ($number = 1; $number <= $total_pages; $number++) : ?>
<button type="button" class="profile-status-chip<?php echo $number === $page ? ' is-active' : ''; ?>" data-message-page="<?php echo esc_attr((string) $number); ?>" <?php disabled($number, $page); ?>><?php echo esc_html((string) $number); ?></button>
<?php endfor; ?>
</nav>
<?php if ($paginate_type === 'ajax_lists' && $page < $total_pages) : ?>
<nav class="messages-pagination messages-pagination--load-more" aria-label="<?php esc_attr_e('消息分页', 'aksrt'); ?>">
<button type="button" class="messages-pagination__more" data-message-next-page="<?php echo esc_attr((string) ($page + 1)); ?>">
<span><?php esc_html_e('加载更多消息', 'aksrt'); ?></span>
<small><?php echo esc_html(sprintf(__('%1$d / %2$d 页', 'aksrt'), $page, $total_pages)); ?></small>
</button>
</nav>
<?php elseif ($paginate_type === 'default') : ?>
<?php
$numbers = array_values(array_unique(array_filter([
1,
$page - 2,
$page - 1,
$page,
$page + 1,
$page + 2,
$total_pages,
], static fn(int $number): bool => $number >= 1 && $number <= $total_pages)));
sort($numbers);
$previous_number = 0;
?>
<nav class="messages-pagination messages-pagination--numbers" aria-label="<?php esc_attr_e('消息分页', 'aksrt'); ?>">
<button type="button" class="messages-pagination__button messages-pagination__button--edge" data-message-page="<?php echo esc_attr((string) max(1, $page - 1)); ?>" aria-label="<?php esc_attr_e('上一页', 'aksrt'); ?>" <?php disabled($page, 1); ?>><i class="fa fas fa-angle-left" aria-hidden="true"></i></button>
<?php foreach ($numbers as $number) : ?>
<?php if ($previous_number > 0 && $number - $previous_number > 1) : ?><span class="messages-pagination__ellipsis" aria-hidden="true">…</span><?php endif; ?>
<button type="button" class="messages-pagination__button<?php echo $number === $page ? ' is-current' : ''; ?>" data-message-page="<?php echo esc_attr((string) $number); ?>" <?php echo $number === $page ? 'aria-current="page"' : ''; ?> <?php disabled($number, $page); ?>><?php echo esc_html((string) $number); ?></button>
<?php $previous_number = $number; ?>
<?php endforeach; ?>
<button type="button" class="messages-pagination__button messages-pagination__button--edge" data-message-page="<?php echo esc_attr((string) min($total_pages, $page + 1)); ?>" aria-label="<?php esc_attr_e('下一页', 'aksrt'); ?>" <?php disabled($page, $total_pages); ?>><i class="fa fas fa-angle-right" aria-hidden="true"></i></button>
</nav>
<?php endif; ?>
<?php endif;
}
@@ -279,11 +316,12 @@ add_action('wp_ajax_aksrt_load_message_center', function (): void {
$content_html = (string) ob_get_clean();
wp_send_json_success([
'view' => $view,
'page' => $page,
'detail' => $notification_id,
'nav' => $nav_html,
'content' => $content_html,
'unread' => $counts['unread'],
'view' => $view,
'page' => $page,
'detail' => $notification_id,
'paginate_type' => aksrt_get_message_center_paginate_type(),
'nav' => $nav_html,
'content' => $content_html,
'unread' => $counts['unread'],
]);
});