Arquitectura de plugins
Ubicación de los plugins
Los plugins se almacenan en public/plugin/. Cada plugin tiene su propio directorio:
public/plugin/
├── Bbb/ # BigBlueButton integration
├── Zoom/ # Zoom integration
├── Onlyoffice/ # OnlyOffice document editing
├── XApi/ # xAPI/Tin Can
├── ... # bundled plugins ship under public/plugin/Estructura de un plugin
Un directorio típico de plugin contiene:
public/plugin/MyPlugin/
├── plugin.php # REQUIRED — assigns $plugin_info
├── install.php # Installation script
├── uninstall.php # Uninstallation script
├── index.php # Region rendering entry point (if applicable)
├── admin.php # Admin interface (optional)
├── lang/ # Translation files (locale codes: en_US.php, fr_FR.php, …)
├── src/
│ ├── MyPluginPlugin.php # Main plugin class (extends Plugin)
│ ├── Entity/ # Doctrine entities (auto-discovered)
│ ├── Repository/ # Doctrine repositories
│ └── EventSubscriber/ # Symfony event subscribers (auto-registered)
├── templates/ # Twig templates
└── resources/ # CSS/JS assetsClase del plugin
Cada plugin extiende la clase base Plugin (public/main/inc/lib/plugin.class.php) y sigue el patrón singleton:
Propiedades clave de la clase
$isCoursePlugin
bool
Registers the plugin as a course tool
$isAdminPlugin
bool
Adds an admin interface page
$isMailPlugin
bool
Integrates with the mail system
$addCourseTool
bool
Adds an icon to the course homepage
$course_settings
array
Defines per-course configuration fields
Ciclo de vida del plugin
Instalación — El administrador activa el plugin, lo que ejecuta
install.phpConfiguración — Los ajustes se definen y gestionan a través del panel de administración; se almacenan en
access_url_rel_plugin(admite multi-tenant)Ejecución — El plugin inyecta contenido en las regiones de visualización o reacciona a eventos de la plataforma
Desactivación — El plugin se deshabilita, pero sus datos se conservan
Desinstalación — Ejecuta
uninstall.phppara limpiar datos y tablas
Regiones de visualización
Los plugins inyectan HTML en 18 regiones predefinidas del frontend Vue sobrescribiendo renderRegion():
Regiones disponibles: content_bottom, content_top, course_tool_plugin, footer_center, footer_left, footer_right, header_center, header_left, header_main, header_right, login_bottom, login_top, main_bottom, main_top, menu_administrator, menu_bottom, menu_top, pre_footer.
Integración con Symfony
Event subscribers
Los archivos que terminan en EventSubscriber.php situados dentro de src/EventSubscriber/ se registran automáticamente mediante PluginEventSubscriberPass. Implementan EventSubscriberInterface y reaccionan a los eventos definidos en src/CoreBundle/Event/Events.php.
Dado que la clase del plugin (MyPluginPlugin) no es un servicio de Symfony, no puede inyectarse por autowiring en el constructor del subscriber. Utilice en su lugar el singleton create():
Entidades Doctrine
Las entidades Doctrine situadas en src/Entity/ se descubren automáticamente mediante PluginEntityPass. Utilice atributos de PHP 8 para el mapeo. El espacio de nombres debe seguir Chamilo\PluginBundle\{PluginName}. Use prefijos de nombre de tabla únicos (p. ej., my_plugin_*) para evitar colisiones.
Servicio PluginHelper
Para acceder al estado de un plugin desde servicios Symfony del núcleo, inyecte PluginHelper en lugar de instanciar la clase del plugin de forma directa:
Métodos disponibles:
isPluginEnabled(string $name): bool
Comprueba si un plugin está instalado y activo para la URL de acceso actual
loadLegacyPlugin(string $name): ?object
Instancia y devuelve el singleton del plugin
getPluginSetting(string $name, string $key): mixed
Lee el valor de un único ajuste del plugin
getPluginOverrides(string $name): array
Obtiene las anulaciones de plugin.yaml (valores predeterminados + específicas de la URL de acceso) de un plugin
Referencias de archivos del núcleo
public/main/inc/lib/plugin.class.php
Clase base de plugin
public/main/inc/lib/plugin.lib.php
Gestor de plugins
src/CoreBundle/Entity/Plugin.php
Entidad Doctrine de plugin
src/CoreBundle/Helpers/PluginHelper.php
Servicio PluginHelper
src/CoreBundle/Event/Events.php
Constantes de eventos
public/plugin/HelloWorld/
Plugin de ejemplo mínimo
public/plugin/TopLinks/
Plugin de ejemplo sencillo
Última actualización
¿Te fue útil?