55 lines
2.5 KiB
PHP
55 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace AKSRT\WidgetSystem;
|
|
|
|
use AKSRT\WidgetSystem\Renderers\ContentRenderer;
|
|
use AKSRT\WidgetSystem\Renderers\GeneralRenderer;
|
|
use AKSRT\WidgetSystem\Renderers\KnowledgeProductRenderer;
|
|
use AKSRT\WidgetSystem\Renderers\SliderRenderer;
|
|
use AKSRT\WidgetSystem\Renderers\UserRenderer;
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
/**
|
|
* One explicit dispatch table for every modern widget renderer.
|
|
*/
|
|
final class RendererRegistry {
|
|
/** @return array<string, class-string> */
|
|
public static function all(): array {
|
|
return [
|
|
'search' => GeneralRenderer::class, 'posts_toc' => GeneralRenderer::class,
|
|
'quote' => GeneralRenderer::class, 'icon_cards' => GeneralRenderer::class,
|
|
'video' => GeneralRenderer::class, 'embed' => GeneralRenderer::class,
|
|
'media_cards' => GeneralRenderer::class, 'icon_cover_cards' => GeneralRenderer::class,
|
|
'partners' => GeneralRenderer::class, 'combo_info' => GeneralRenderer::class,
|
|
'text_title' => GeneralRenderer::class, 'buttons' => GeneralRenderer::class,
|
|
'layout_gap' => GeneralRenderer::class, 'tag_cloud' => GeneralRenderer::class,
|
|
'recent_comments' => GeneralRenderer::class, 'links' => GeneralRenderer::class,
|
|
'notice' => GeneralRenderer::class,
|
|
'term_cards' => ContentRenderer::class, 'term_aggregation' => ContentRenderer::class,
|
|
'hot_posts' => ContentRenderer::class, 'post_pay' => ContentRenderer::class,
|
|
'posts' => ContentRenderer::class, 'tab_posts' => ContentRenderer::class,
|
|
'oneline_posts' => ContentRenderer::class,
|
|
'pricing_plans' => KnowledgeProductRenderer::class, 'reviews' => KnowledgeProductRenderer::class,
|
|
'faq' => KnowledgeProductRenderer::class, 'stats' => KnowledgeProductRenderer::class,
|
|
'highlights' => KnowledgeProductRenderer::class, 'feature_intro' => KnowledgeProductRenderer::class,
|
|
'tilt_cases' => KnowledgeProductRenderer::class,
|
|
'slider' => SliderRenderer::class, 'slider_media_combo' => SliderRenderer::class,
|
|
'user_card' => UserRenderer::class, 'author_card' => UserRenderer::class,
|
|
'user_ranking' => UserRenderer::class, 'user_list' => UserRenderer::class,
|
|
];
|
|
}
|
|
|
|
public static function render(string $slug, array $instance, array $context = []): string {
|
|
$renderer = self::all()[$slug] ?? null;
|
|
if ($renderer === null || !is_callable([$renderer, 'render'])) {
|
|
return '';
|
|
}
|
|
return (string) $renderer::render($slug, $instance, $context);
|
|
}
|
|
|
|
public static function supports_items(string $slug): bool {
|
|
return in_array($slug, ['posts', 'tab_posts', 'oneline_posts', 'hot_posts'], true);
|
|
}
|
|
}
|