Issue #422✓ ResueltoAbierto el 15 de octubre de 2017por cmcintoshReacciones 8

Evita editar algunos componentes

Respuesta rápidapor artf4

Sí, @MichaelKlemersson ahora mismo tienes que configurarlos manualmente en cualquier elemento. Otro truco sería actualizar a todos los niños mediante el modelo '''js const updateAll = model => { model.set({editable: false, ...}); model.get('components').each(model => updateAll(model)); } updateAll(component); ¿Qué opi...

Lee la respuesta completa abajo ↓

Pregunta

Me gustaría evitar que los usuarios editen los componentes internos de componentes específicos.

Es decir, digamos que tengo un elemento llamado Drupal-Block

<bloque de datos div>
... HTML dentro de ..
</div>

Quiero evitar que los usuarios editen el ... HTML inside... bit

Respuestas (3)

👍 Muy útilartf17 de octubre de 2017

Sí, @MichaelKlemersson ahora mismo tienes que configurarlos manualmente en cualquier elemento. Otro truco sería actualizar a todos los niños mediante el modelo '''js const updateAll = model => { model.set({editable: false, ...}); model.get('components').each(model => updateAll(model)); } updateAll(component);

Pero lo que creo que sería mejor es algún tipo de propiedad que 'propague' (se aceptan sugerencias para un término mejor) propiedades del progenitor a sus hijos, por ejemplo.
'''html
<div data-gjs-editable="false" data-gjs-propagate="['editable', ...]">
     <!-- esto tampoco será editable y lo mismo para sus hijos — >
     <div>...</div>
     
<!-- posibilidad de sobrescribir y 'romper' la cadena — >
     <div data-gjs-editable="true" data-gjs-propagate=""></div>
</div>

¿Qué opinas?

cmcintosh17 de octubre de 2017

Sí, creo que la idea de la propagación es genial. Para que quede claro, la razón por la que busco esto es que estoy desarrollando un módulo para Drupal 8 que permita crear temas a través de la herramienta GrapeJS. En Drupal tienes elementos llamados Bloques, y mi idea era bloquear la edición de esos en el editor principal y, en su lugar, poner un editor emergente para editarlos y permitir reutilizarlos en varias páginas.

Esto se debe a cómo Drupal renderiza el contenido vía PHP y, por tanto, necesito convertir el html a variables php al almacenar la plantilla en un archivo twig.

artf20 de octubre de 2017

Un ejemplo que puedes usar en la demo

  1. Seleccionar un elemento (por ejemplo, alguna sección)
  2. Ejecuta esto en consola '''js editor.getSelected().append('
<div data-gjs-removable="false" data-gjs-draggable="false" data-gjs-propagate='["removible", "draggable"]' style="color:blue"> <div>Comp01</div> <div> <div>Comp11</div> <div data-gjs-stop="1" data-gjs-removable="true" data-gjs-draggable="true" data-gjs-propagate='["stop"]' style="color:red"> <div>Comp21</div> <div>Comp22</div> </div> <div> <div>Comp31</div> <div>Comp32</div> </div> </div> <div>Comp03</div> </div> `) ```

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

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 →
Opción premium

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.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.