Move 288 types from global AKSRT_* + inc/classes manual requires into
namespace AKSRT\{Domain} under src/AKSRT/, wire composer.json psr-4,
and slim bootstrap to helpers/modules/hooks only. Split multi-class
widget/gateway files, update admin contract audit paths, and document
the layout in ADR/README.
117 lines
5.4 KiB
PHP
117 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* Home Module · Banner — v4.0 Zibll-Inspired
|
|
*
|
|
* 内联轮播条,使用与 header-slider 相同的 Swiper 架构,
|
|
* 但以圆角卡片形式嵌入内容流中(非全宽)。
|
|
*
|
|
* 支持配置:
|
|
* - 自动播放
|
|
* - 圆角卡片样式
|
|
* - 标题/副标题叠加
|
|
* - 点击跳转
|
|
*
|
|
* @package AKSRT
|
|
* @version 4.0.0
|
|
*/
|
|
defined('ABSPATH') || exit;
|
|
|
|
if (class_exists('\AKSRT\Settings\Settings') && !\AKSRT\Settings\Settings::homepage_module_banner_enabled()) {
|
|
return;
|
|
}
|
|
|
|
$banners = function_exists('aksrt_get_banners') ? aksrt_get_banners(8, 'banner') : [];
|
|
if (empty($banners)) {
|
|
if (current_user_can('manage_options')) {
|
|
echo '<div class="home-module home-module--banner home-module--banner-empty box-body">';
|
|
echo '<p class="muted-2-color">' . esc_html__('No Banner slides found. Add banner slides in admin.', 'aksrt') . '</p>';
|
|
if (function_exists('aksrt_render_admin_quick_link')) {
|
|
echo '<div class="home-module__admin-tools">';
|
|
aksrt_render_admin_quick_link('page-display/banner', __('Banner 轮播管理', 'aksrt'));
|
|
echo '</div>';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
return;
|
|
}
|
|
|
|
$cfg = get_query_var('aksrt_module_config', []);
|
|
if (!is_array($cfg)) $cfg = [];
|
|
|
|
$slide_count = count($banners);
|
|
|
|
// Swiper config — Banner uses a subset of the global slider config
|
|
$slider_cfg = function_exists('aksrt_get_slider_config') ? aksrt_get_slider_config() : [];
|
|
$swiper_config = [
|
|
'effect' => 'slide', // Banner always uses slide effect
|
|
'loop' => $slide_count > 1 && ($slider_cfg['loop'] ?? true),
|
|
'speed' => 500,
|
|
'autoplay' => $slide_count > 1 ? ['delay' => ($slider_cfg['autoplay_interval'] ?? 5000), 'disableOnInteraction' => false] : false,
|
|
'pagination' => false,
|
|
'navigation' => !empty($slider_cfg['navigation']),
|
|
'keyboard' => ['enabled' => true],
|
|
'spaceBetween' => ($slider_cfg['space_between'] ?? 0),
|
|
];
|
|
?>
|
|
<div class="home-module home-module--banner slide-widget mb20">
|
|
<div class="banner-module zib-slider">
|
|
<div class="swiper new-swiper banner-module__swiper slide-widget-swiper" data-swiper-config="<?php echo esc_attr(wp_json_encode($swiper_config)); ?>">
|
|
<div class="swiper-wrapper">
|
|
<?php foreach ($banners as $index => $slide) :
|
|
$device_vis = $slide['device_visibility'] ?? 'all';
|
|
$slide_classes = 'swiper-slide';
|
|
if ($device_vis === 'pc') {
|
|
$slide_classes .= ' banner-slide--pc-only';
|
|
} elseif ($device_vis === 'mobile') {
|
|
$slide_classes .= ' banner-slide--mobile-only';
|
|
}
|
|
$link_target = !empty($slide['link_target']) ? $slide['link_target'] : '_self';
|
|
?>
|
|
<div class="<?php echo esc_attr($slide_classes); ?>"<?php if (!empty($slide['link'])) : ?> data-link="<?php echo esc_url($slide['link']); ?>" data-target="<?php echo esc_attr($link_target); ?>"<?php endif; ?>>
|
|
<div class="banner-module__slide-bg">
|
|
<?php if (!empty($slide['image'])) : ?>
|
|
<img
|
|
src="<?php echo esc_url($slide['image']); ?>"
|
|
alt="<?php echo esc_attr($slide['title'] ?: get_bloginfo('name')); ?>"
|
|
loading="<?php echo 0 === $index ? 'eager' : 'lazy'; ?>"
|
|
decoding="async"
|
|
class="fit-cover"
|
|
>
|
|
<?php else : ?>
|
|
<div class="banner-module__slide-fallback"></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="banner-module__slide-overlay"></div>
|
|
<?php
|
|
$show_text = !isset($slide['show_text']) || $slide['show_text'];
|
|
$has_title = !empty($slide['title']);
|
|
$has_subtitle = !empty($slide['subtitle']);
|
|
?>
|
|
<?php if ($show_text && ($has_title || $has_subtitle)) : ?>
|
|
<div class="banner-module__content">
|
|
<?php if ($has_title) : ?>
|
|
<h3 class="banner-module__title"><?php echo esc_html($slide['title']); ?></h3>
|
|
<?php endif; ?>
|
|
<?php if ($has_subtitle) : ?>
|
|
<p class="banner-module__subtitle"><?php echo esc_html($slide['subtitle']); ?></p>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
|
|
<?php if ($slide_count > 1) : ?>
|
|
<!-- 前后箭头 -->
|
|
<div class="banner-module__prev swiper-button-prev"></div>
|
|
<div class="banner-module__next swiper-button-next"></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<?php if (function_exists('aksrt_render_admin_quick_link')) : ?>
|
|
<div class="home-module__admin-tools">
|
|
<?php aksrt_render_admin_quick_link('page-display/banner', __('Banner 轮播管理', 'aksrt')); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|