HAZAÑA: Crear el lienzo a partir de una URL
Es una verdadera pena. No dije nada sobre buscar desde otro sitio, lo que quería era mantenerlo coherente con el resto del proyecto. Bueno, seguiré buscando en otros sitios un editor que se integre mejor con la forma en que se construyen actualmente las aplicaciones más grandes. Webpack y otros transpilers son realmen...
Lee la respuesta completa abajo ↓Pregunta
He estado probando GrapesJS e intentando integrarlo en un proyecto de Symfony 5. En particular, quiero poder editar plantillas en el editor basadas en Bootstrap 4 y otros componentes como FontAwesome Pro y bloques personalizados basados en estos.
Uso el paquete Webpack-Encore de Symfony para generar los scripts y archivos de estilo de la aplicación, lo que supone un gran quebradero de cabeza intentar que el sistema actual de iframe canvas funcione usando los mismos componentes versionados como Bootstrap, etc.
Actualmente solo puedo inyectar URLs de estilo y script en el lienzo mediante la configuración de init así:
grapesjs.init({
...
lienzo: {
Estilos: [URL1, URL2, ...],
scripts: [url3, url4, ...],
},
});
El problema es que quiero mantener exactamente la misma versión de los componentes incluidos que estoy usando en la aplicación principal. Si actualizo estos quiero, quiero que se refleje en los componentes que usa el lienzo, esto también puede incluir código y estilos personalizados.
En Symfony y otros frameworks importantes, realmente no es buena práctica enlazar a recursos raíz fuera del área pública; generalmente se crean y compactan en el área pública durante un proceso de construcción.
Webpack crea archivos de compilación de diferentes maneras según las circunstancias. En modo desarrollo se sirven desde un servidor local de hot-plug, en modo producción, desde archivos de compilación estáticos que pueden o no incluir versionado en el nombre del archivo. Además, el código común se puede separar para reducir la sobrecarga. Normalmente referencias los archivos que necesitas usando un nombre de entrada, que luego atrae tantos archivos como se requieran de la estructura de compilación del webpack.
Básicamente es un auténtico fastidio intentar buscar esto para llegar a los archivos raíz necesarios para una vista concreta, que probablemente será muy diferente en la próxima versión.
Me gustaría proponer que podríamos opcionalmente proporcionar una URL como documento base para el iframe. En este caso, GrapesJS cargaría el iframe usando la URL y luego reemplazaría todo el contenido del cuerpo, o el contenido de un elemento especificado por un id. Esto último es preferible en muchos aspectos, ya que los elementos de script pueden añadirse en la parte inferior del elemento del cuerpo.
Esto permitiría crear una vista, en Symfony o cualquier otro framework, que absorba los archivos necesarios y manipulados mediante webpack, proporcionando así una forma sencilla y directa de proporcionar las bibliotecas de soporte necesarias dentro del iframe usando exactamente las versiones correctas del resto de la aplicación.
Esto no es solo un problema de Symfony. Cualquier aplicación que utilice un sistema de compilación y reducción en Javascript y CSS probablemente sufrirá los mismos quebraderos de cabeza.
Respuestas (3)
Es una verdadera pena. No dije nada sobre buscar desde otro sitio, lo que quería era mantenerlo coherente con el resto del proyecto.
Bueno, seguiré buscando en otros sitios un editor que se integre mejor con la forma en que se construyen actualmente las aplicaciones más grandes. Webpack y otros transpilers son realmente el camino a seguir para proyectos grandes, incluso con pequeños beneficios.
Hola Ian, si necesitas cargar contenido HTML desde una URL solo puedo sugerir que lo obtengas en el lado del servidor e iniciales el editor con ese contenido (cargar recursos externos en el navegador resolvería principalmente el problema de cross-origin), así que, para cómo funcionan los navegadores no veo ninguna razón válida para añadir esa función.
Gracias por informar de esto, @ianef.
Gran sugerencia sobre FEAT: ¡Crea el lienzo a partir de una URL! Aunque esta función específica aún no está en la API principal, existen varias formas de lograr un comportamiento similar.
Usando el sistema de eventos: '''javascript editor.on('component:update', (component) => { Tu lógica aquí });
**Enfoques alternativos:**
- Escuchar 'selector:add' para cambios en el selector CSS
- Usar 'selector:custom' para reglas personalizadas
- Aprovechar los eventos 'change:*' para un seguimiento detallado
- Crear un plugin que extienda el editor con esta capacidad
**Lo hace oficial:**
Si esta función beneficiaría a muchos usuarios, considera abrir una Solicitud formal de Funcionalidad en el repositorio GrapesJS con:
- Un caso de uso detallado
- Ejemplo de código que muestra el comportamiento deseado
- Por qué esto es importante para tu flujo de trabajo
El equipo central es receptivo a solicitudes de funcionalidades bien motivadas respaldadas por casos de uso reales.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #3699
El flotamiento de la celda desplaza aleatoriamente a la celda real
¡Hola! Estoy usando grapesJs para editar correos electrónicos en un proyecto de mi empresa, con el plugin Newsletter. Todo funciona muy bie...
Issue #3449
Cambiar de página llama a estilos y scripts de canvas una y otra vez
Hola Estoy integrando el gestor de páginas en mi proyecto. Pero el problema que tengo es que cada vez que cambio entre páginas, carga archi...
Issue #3392
HAZAÑA: Permitir una configuración dinámica droppable usando una función
Tengo un requisito que me permite usar selectores para determinar si un elemento es soltable. Por ejemplo: ! imagen El componente "hijo" de...
Issue #5441
No hay id para que los elementos no tengan estilos sino con 'script', lo que hace que el script no se ejecute para esos elementos
Versión GrapesJS[X] Confirmo que se debe usar la última versión de GrapesJS¿Qué navegador usas? Última versión de ChromeEnlace de demo repr...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
Ship to Production Faster: What’s New in GrapesJS Shadcn
Supercharge your page builder! GrapesJS Shadcn adds live drag previews, rich text / commands, dynamic data, and canvas presets to ship to prod faster.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
GrapesJS Inline RTE Plugins Update: CKEditor 5 v0.1.4 and Froala Inline Text Editor
CKEditor 5 Inline for GrapesJS v0.1.4 fixes Studio SDK toolbar clipping, iframe injection and link balloon bugs. Compare with Froala Inline — both $69.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.