一键导入
crear-html-twig
Crea, usa y extiende vistas Twig en FacturaScripts, incluyendo herencia desde Core o plugins y ganchos para extensión por otros plugins.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Crea, usa y extiende vistas Twig en FacturaScripts, incluyendo herencia desde Core o plugins y ganchos para extensión por otros plugins.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | crear-html-twig |
| description | Crea, usa y extiende vistas Twig en FacturaScripts, incluyendo herencia desde Core o plugins y ganchos para extensión por otros plugins. |
Las vistas Twig son archivos .html.twig ubicados en la carpeta View/ del plugin. Permiten construir interfaces completamente personalizadas usando el motor de plantillas Twig 3.
Para generar una vista Twig con la estructura base ya preparada:
fsmaker view
fsmaker solicita el nombre de la vista y genera el archivo .html.twig en View/ con la herencia de plantilla correcta. Los apartados siguientes documentan la estructura completa y las funciones disponibles.
Plugins/MiPlugin/View/MiVista.html.twig
{% extends "Master/MenuTemplate.html.twig" %}
{% block body %}
{{ parent() }}
<div class="container-fluid">
<h1>{{ trans('my-title') }}</h1>
</div>
{% endblock %}
{% block css %}
{{ parent() }}
{# CSS adicional aquí #}
{% endblock %}
{% block javascripts %}
{{ parent() }}
{# JS adicional aquí #}
{% endblock %}
{% extends "Master/MicroTemplate.html.twig" %}
{% block body %}
<h1>Vista mínima</h1>
{% endblock %}
// En el método exec() o privateCore() del controlador:
$this->setTemplate('MiVista'); // carga View/MiVista.html.twig
Para desactivar la salida HTML (respuestas JSON, descargas, etc.):
$this->setTemplate(false);
protected function createViews(): void
{
// addHtmlView(viewName, templateName, modelName, title, icon)
$this->addHtmlView('tab-producto', 'Tab/MiTab', 'Producto', 'producto', 'fas fa-box');
}
View/Tab/MiTab.html.twig| Variable | Descripción |
|---|---|
fsc | Referencia al controlador (acceso a propiedades/métodos públicos) |
controllerName | Nombre del controlador activo |
template | Nombre de la plantilla cargada |
assetManager | Assets CSS/JS cargados desde el controlador |
log | Instancia de MiniLog |
Declara propiedades públicas en el controlador:
class MiControlador extends Controller
{
public array $datos = [];
public function privateCore(&$response, $user, $permissions): void
{
parent::privateCore($response, $user, $permissions);
$this->datos = ['clave' => 'valor'];
}
}
En la vista:
{% for item in fsc.datos %}
<p>{{ item }}</p>
{% endfor %}
{# Traducción #}
{{ trans('save') }}
{{ trans('record-save-ok', {'%code%': 'FAC001'}) }}
{{ trans('save', {}, 'de_DE') }}
{# URLs #}
{{ fsc.url() }}
{{ asset('ListFacturaCliente') }}
{# Usuario actual #}
{{ fsc.user.nick }}
{# Token CSRF en formularios #}
{{ formToken() }}
{{ formToken(false) }} {# solo el valor del token #}
{# Formateo de números #}
{{ number(20.338547) }}
{{ number(20.338547, 4) }}
{# Formateo de precios #}
{{ money(15.42) }}
{{ money(15.42, 'EUR') }}
{# Configuración de la aplicación #}
{% set divisa = settings('default', 'coddivisa') %}
{% set dias = settings('default', 'dias', 7) %}
{# Archivos de la biblioteca #}
{% set file = attachedFile(5) %}
{{ file.path }}
{# Toasts / notificaciones JS #}
{% include 'Macro/Toasts.html.twig' %}
<script>setToast('Mensaje', 'warning', 'Título', 10000);</script>
Desde Init.php del plugin, registrar funciones globales usando Html::addFunction():
<?php
namespace FacturaScripts\Plugins\MiPlugin;
use FacturaScripts\Core\Html;
use FacturaScripts\Core\Base\InitClass;
use Twig\TwigFunction;
class Init extends InitClass
{
public function init(): void
{
Html::addFunction(
new TwigFunction('fechaFormato', function (string $formato = 'Y-m-d') {
return date($formato);
})
);
}
public function update(): void {}
}
Uso en cualquier vista Twig:
{{ fechaFormato() }}
{{ fechaFormato('d/m/Y') }}
{% extends '@Core/Master/MenuTemplate.html.twig' %}
{% block body %}
<h1>Contenido que reemplaza el bloque body del Core</h1>
{% endblock %}
{% extends "@PluginNombrePlugin/MiPlantilla.html.twig" %}
{% block body %}
{{ parent() }}
<p>Contenido extra añadido al bloque del plugin</p>
{% endblock %}
Usa el identificador
@Core/para plantillas del Core y@PluginNombrePlugin/para plantillas de un plugin concreto. Esto permite reemplazar la plantilla enDinamic/mientras se sigue heredando de la original.
Añade puntos de extensión con getIncludeViews() en tu plantilla:
{# View/MiPlantilla.html.twig #}
<html>
<head>
{% for includeView in getIncludeViews('MiPlantilla', 'head') %}
{% include includeView['path'] %}
{% endfor %}
</head>
<body>
{% for includeView in getIncludeViews('MiPlantilla', 'body') %}
{% include includeView['path'] %}
{% endfor %}
<div id="sidebar">
{% for includeView in getIncludeViews('MiPlantilla', 'sidebar') %}
{% include includeView['path'] %}
{% endfor %}
</div>
</body>
</html>
Crea los archivos en Extension/View/ siguiendo la nomenclatura:
NOMBRE_PLANTILLA_POSICION_ORDEN.html.twig
Plugins/MiPlugin/Extension/View/MiPlantilla_head_05.html.twig
Plugins/MiPlugin/Extension/View/MiPlantilla_body_10.html.twig
Plugins/MiPlugin/Extension/View/MiPlantilla_sidebar_15.html.twig
10.MiPlantilla_head_05.html.twig:
<meta name="mi-plugin" content="activo">
<link rel="stylesheet" href="{{ asset('Plugins/MiPlugin/Assets/CSS/mi-estilo.css') }}">
MiPlantilla_body_10.html.twig:
<div class="alert alert-info">
{{ trans('my-plugin-info') }}
</div>
| Archivo | Ubicación |
|---|---|
| Vista principal del plugin | Plugins/MiPlugin/View/MiVista.html.twig |
| Pestaña HTML (tab) | Plugins/MiPlugin/View/Tab/MiTab.html.twig |
| Extensión de vista de otro plugin | Plugins/MiPlugin/Extension/View/NombrePlantilla_posicion_orden.html.twig |
Para consultar la documentación oficial completa sobre vistas Twig y herencia de plantillas, invoca el agente docs-expert que te proporcionará detalles completos directamente desde la documentación oficial del framework.
Crea un modelo de FacturaScripts con su clase PHP y archivo XML de tabla.
Configura la ruta de módulos MCP locales privados en ~/.fs-claude.json
Redacta en pantalla (sin crear ningún archivo) un texto en formato markdown, listo para copiar y pegar, que explica las novedades, mejoras y correcciones de un plugin o proyecto de FacturaScripts a partir de un rango de commits o de versiones. Activa esta skill siempre que el usuario pida "redacta las novedades", "escribe la noticia de los cambios", "genera el changelog", "qué ha cambiado desde la versión X", "resume los cambios entre la versión X y la Y", "prepara el anuncio de la nueva versión", o cualquier variación en la que se pida comunicar qué se ha hecho en un rango de commits o entre dos versiones.
Guía para añadir una nueva conexión de FacturaScripts al archivo de configuración
Sincroniza modelos del MCP fs-mcp con sus fuentes (FacturaScripts core o plugins privados). Detecta columnas nuevas/modificadas/eliminadas, mantiene las descripciones unificadas en los archivos de overrides, regenera la metadata y compila si hace falta. Soporta uno o varios modelos, ruta local o URL de GitHub, y un modo "refresh masivo" para auditar todos los modelos del catálogo y actualizar la versión registrada de FacturaScripts.
Responde preguntas sobre cómo usar FacturaScripts consultando la documentación oficial de usuarios a través del agente especializado `docs-expert`. ACTIVAR SIEMPRE que el usuario pregunte cómo hacer una operación, dónde encontrar una función, cómo fluye un proceso (presupuesto→factura), cómo gestionar clientes, inventario, compras, contabilidad, o cualquier aspecto práctico de uso del ERP. También activar cuando Claude necesite explorar la documentación de usuario antes de responder sobre procedimientos — no esperar a que el usuario pregunte explícitamente. No esperes a que mencione "documentación" — si la pregunta o tarea involucra procedimientos operativos en FacturaScripts, activa esta skill.