98 lines
4.6 KiB
PHP
98 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace AKSRT\WidgetSystem;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
/**
|
|
* Canonical catalog of the 37 modern AKSRT widgets.
|
|
*/
|
|
final class WidgetCatalog {
|
|
public static function definitions(): array {
|
|
$groups = [
|
|
'general' => [
|
|
['search', '搜索框', '显示多种样式的站内搜索框', 'sidebar'],
|
|
['posts_toc', '文章目录树', '显示当前文章的标题目录', 'sidebar'],
|
|
['quote', '一言', '定时切换本地或在线句子', 'sidebar'],
|
|
['icon_cards', '图标卡片(竖版)', '图标在文字上方的特色卡片', 'wide'],
|
|
['video', '视频', '支持常规视频与流媒体格式', 'any'],
|
|
['embed', '超级嵌入', '按比例嵌入外部在线内容', 'any'],
|
|
['media_cards', '图文视频封面卡片', '显示图片、视频和文字封面卡片', 'wide'],
|
|
['icon_cover_cards', '图标卡片(横版)', '图标在文字左侧的特色卡片', 'wide'],
|
|
['partners', '横向滚动合作伙伴', '多行自动滚动的合作伙伴或案例列表', 'wide'],
|
|
['combo_info', '复合信息卡片', '组合图标、标签、简介和按钮的信息卡', 'wide'],
|
|
['text_title', '文字标题', '独立的标题与简介模块', 'wide'],
|
|
['buttons', '按钮组', '单个或多个跳转按钮', 'wide'],
|
|
['layout_gap', '布局额外间距', '增加 PC 与移动端模块间距', 'wide'],
|
|
['tag_cloud', '标签云', '彩色显示标签或分类', 'sidebar'],
|
|
['recent_comments', '最近评论', '显示网站最新评论', 'sidebar'],
|
|
['links', '链接列表', '友情链接和网址导航列表', 'wide'],
|
|
['notice', '上下滚动公告', '自动滚动的公告信息列表', 'wide'],
|
|
],
|
|
'content' => [
|
|
['term_cards', '分类图文卡片', '将分类或标签显示为图文卡片', 'wide'],
|
|
['term_aggregation', '分类与标签聚合卡片', '聚合分类、标签与文章内容', 'wide'],
|
|
['hot_posts', '热榜文章', '按浏览、评论、收藏等维度排行', 'sidebar'],
|
|
['post_pay', '付费购买', '显示当前文章的知识付费购买模块', 'sidebar'],
|
|
['posts', '文章列表', '多条件筛选和多样式文章列表', 'wide'],
|
|
['tab_posts', '多栏目文章(新)', '通过多个栏目切换文章列表', 'wide'],
|
|
['oneline_posts', '横向滚动文章', '单行横向滚动文章列表', 'wide'],
|
|
],
|
|
'knowledge_product' => [
|
|
['pricing_plans', '知识产品方案卡片', '课程与会员方案价格、权益和购买入口', 'wide'],
|
|
['reviews', '知识产品评价', '横向滑动的学员或会员评价', 'wide'],
|
|
['faq', '知识产品常见问题', '支持搜索的常见问题与帮助卡片', 'wide'],
|
|
['stats', '知识产品数据展示', '横排数字统计展示模块', 'wide'],
|
|
['highlights', '知识产品亮点卡片', '多尺寸知识产品亮点聚合', 'wide'],
|
|
['feature_intro', '知识产品图文亮点', '可切换媒体的左右图文介绍', 'wide'],
|
|
['tilt_cases', '知识产品 3D 展示', '带 3D 交互的知识产品案例展示', 'wide'],
|
|
],
|
|
'slider' => [
|
|
['slider', '幻灯片(新)', '支持图片、视频、文字和视差图层', 'wide'],
|
|
['slider_media_combo', '幻灯片加图文视频卡片', '幻灯片与图文视频卡片组合布局', 'wide'],
|
|
],
|
|
'user' => [
|
|
['user_card', '用户个人信息', '根据登录状态显示登录入口或用户信息', 'sidebar'],
|
|
['author_card', '文章作者信息', '显示当前文章作者与关注入口', 'sidebar'],
|
|
['user_ranking', '用户排行榜', '按签到、积分或粉丝生成排行', 'sidebar'],
|
|
['user_list', '用户列表', '筛选并显示注册用户列表', 'wide'],
|
|
],
|
|
];
|
|
|
|
$definitions = [];
|
|
foreach ($groups as $group => $items) {
|
|
foreach ($items as [$slug, $name, $description, $size]) {
|
|
$definitions[] = [
|
|
'slug' => $slug,
|
|
'name' => 'AKSRT ' . $name,
|
|
'description' => $description,
|
|
'group' => $group,
|
|
'renderer' => $slug,
|
|
'size' => $size,
|
|
'common' => [
|
|
'title' => !in_array($slug, ['post_pay', 'layout_gap', 'slider', 'slider_media_combo'], true),
|
|
'affix' => $size === 'sidebar',
|
|
],
|
|
'fields' => WidgetSchemas::for($slug),
|
|
'assets' => self::assets($slug),
|
|
];
|
|
}
|
|
}
|
|
return $definitions;
|
|
}
|
|
|
|
private static function assets(string $slug): array {
|
|
if (in_array($slug, ['slider', 'slider_media_combo', 'reviews', 'oneline_posts'], true)) {
|
|
return ['swiper'];
|
|
}
|
|
if ($slug === 'video') {
|
|
return ['dplayer', 'hls', 'flv', 'dash'];
|
|
}
|
|
if ($slug === 'tilt_cases') {
|
|
return ['tilt'];
|
|
}
|
|
return [];
|
|
}
|
|
}
|
|
|