¿Cómo puede permitir que un editor edite el texto en un bloque, pero no realice otros cambios de configuración, como mover el bloque de una región a otra?
En Drupal, solo los usuarios con permiso para administrar bloques pueden cambiar la configuración del bloque, incluida la región asignada al bloque.
Hasta donde yo sé, no hay módulos que permitan asignar a los usuarios un permiso más granular. Debe escribir su propio módulo personalizado que muestre solo los campos que un usuario puede editar.
Por ejemplo, el siguiente código alteraría la compilación del formulario de block_admin_configure () , la función que construye el formulario de configuración para cualquier bloque, para permitir a los usuarios con el permiso "editar títulos de bloque" editar el título del bloque.
function mymodule_form_block_admin_configure_alter(&$form,&$form_state, $form_id){if(isset($form['settings']['title'])){
$form['settings']['title']['#access']= user_access('edit block titles');}}
La función es la implementación de hook_form_FORM_ID_alter () hecha para un módulo llamado mymodule.module.
Los campos para la configuración de la región (las regiones temáticas de salida de un bloque) están contenidos en $form['regions']; El conjunto de campos contiene un campo de selección para cada uno de ellos habilitado.
Para mostrar el campo configurado solo a usuarios con el permiso "editar regiones de bloque", puede usar el siguiente código, por ejemplo.
function mymodule_form_block_admin_configure_alter(&$form,&$form_state, $form_id){if(isset($form['regions'])){
$form['regions']['#access']= user_access('edit block regions');}}
Los usuarios con permiso para administrar bloques pueden alterar la región asignada a los bloques desde http://example.com/admin/structure/block . Para no permitir que el usuario sin el permiso "editar regiones de bloque" acceda a esa página, debe alterar el controlador de acceso de ese menú y reemplazar el controlador de acceso predeterminado por uno personalizado que volvería FALSEcuando los usuarios no tengan ese permiso.
Para obtener más información, consulte hook_menu y hook_menu_alter () .
Este módulo agrega un conjunto de permisos globales para crear, ver, mover, habilitar, deshabilitar y configurar bloques, así como permisos a nivel de bloque individual.
Después de volver a esta pregunta después de aproximadamente un año, hay dos métodos que son muy simples.
Cree un bloque y coloque el siguiente código en el cuerpo del bloque:
<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");print render($node_content);?>
O puede crear un bloque de vista y filtrar en la identificación del nodo.
Ahora le das permiso a alguien para editar el tipo de contenido pero no permiso para crearlo o eliminarlo.
Una solución simple que recomendaría es revisar el módulo Cajas . Este módulo proporcionará buenas opciones de edición en línea (a través de AJAX) para bloques, lo que facilitaría mucho a los editores cambiar el texto en los bloques. Los permisos aún tendrían que ser "administrar bloques" para los editores, pero como ahora podrán editar bloques en línea, realmente no es necesario que lleguen a la página de configuración de bloques.
Ahora, si aún insiste en eliminar el acceso a esa página de configuración de bloque, puede hacer un simple cambio de menú que cambie el permiso requerido para la página de configuración de bloque, como el siguiente código.
function hook_menu_alter(&$items){//Example Use Case, switching permission from "administer block" to "administer site configuration"
$items['admin/structure/block']['access arguments']= array('administer site configuration');}
El módulo Bean es una posible alternativa para responder esta pregunta. Aquí hay una cita sobre su página de proyecto:
Piense en un Bean como un método para proporcionar nuevos tipos (en comparación con el nodo, este sería un tipo de contenido) que luego proporciona una interfaz de agregar contenido para crear tantos bloques como necesite (vea la captura de pantalla a continuación). El contenido del bean se puede colocar alrededor del sitio como cualquier otro bloque.
Combinado con las opciones disponibles para otorgar los permisos Bean apropiados , debería darle mucha flexibilidad sobre cómo exactamente desea usar este módulo (excelente) en su caso específico: para cada bloque individual creado con el módulo BEAN, puede usar la página de Permisos típica (en admin/people/permissions) para otorgar acceso Agregar / Editar / Ver / Eliminar a roles seleccionados.
Este módulo también funciona muy bien en combinación con los módulos de integración de características UUID y UUID . Y después de familiarizarse con el módulo Bean, es posible que encuentre otros casos en su sitio en los que también desee usar este módulo (que de alguna manera compensa el hecho de que necesita agregar otro módulo).
El video tutorial Tutorial del módulo Drupal Bean: el uso de la interfaz de usuario de administración de Bean proporciona una gran introducción para comprender realmente el poder de este módulo y el tipo de cosas que puede hacer con él (solo mediante el uso de técnicas de creación de sitios, sin necesidad de codificación personalizada). También muestra cómo el módulo Bean transforma los bloques de Drupal en entidades confiables.
Este módulo solo comenzó a partir de D7 (debido a las "entidades", por supuesto, que solo se introdujeron en D7), y ya cuenta con más de 22K instalaciones informadas. Aquellos que aún no lo usan definitivamente deberían comenzar a mirarlo en preparación para algún día actualizar a D8. Porque esto es lo que se muestra actualmente en su página de proyecto (agregué el marcado en negrita aquí):
Este módulo se ha incluido con Drupal 8 core . Consulte este problema para obtener más información.
Respuestas:
En Drupal, solo los usuarios con permiso para administrar bloques pueden cambiar la configuración del bloque, incluida la región asignada al bloque.
Hasta donde yo sé, no hay módulos que permitan asignar a los usuarios un permiso más granular. Debe escribir su propio módulo personalizado que muestre solo los campos que un usuario puede editar.
Por ejemplo, el siguiente código alteraría la compilación del formulario de block_admin_configure () , la función que construye el formulario de configuración para cualquier bloque, para permitir a los usuarios con el permiso "editar títulos de bloque" editar el título del bloque.
La función es la implementación de hook_form_FORM_ID_alter () hecha para un módulo llamado mymodule.module.
Los campos para la configuración de la región (las regiones temáticas de salida de un bloque) están contenidos en
$form['regions']
; El conjunto de campos contiene un campo de selección para cada uno de ellos habilitado.Para mostrar el campo configurado solo a usuarios con el permiso "editar regiones de bloque", puede usar el siguiente código, por ejemplo.
Los usuarios con permiso para administrar bloques pueden alterar la región asignada a los bloques desde http://example.com/admin/structure/block . Para no permitir que el usuario sin el permiso "editar regiones de bloque" acceda a esa página, debe alterar el controlador de acceso de ese menú y reemplazar el controlador de acceso predeterminado por uno personalizado que volvería
FALSE
cuando los usuarios no tengan ese permiso.Para obtener más información, consulte hook_menu y hook_menu_alter () .
fuente
Vea el módulo de acceso de bloque .
fuente
Después de volver a esta pregunta después de aproximadamente un año, hay dos métodos que son muy simples.
Cree un bloque y coloque el siguiente código en el cuerpo del bloque:
O puede crear un bloque de vista y filtrar en la identificación del nodo.
Ahora le das permiso a alguien para editar el tipo de contenido pero no permiso para crearlo o eliminarlo.
fuente
Una solución simple que recomendaría es revisar el módulo Cajas . Este módulo proporcionará buenas opciones de edición en línea (a través de AJAX) para bloques, lo que facilitaría mucho a los editores cambiar el texto en los bloques. Los permisos aún tendrían que ser "administrar bloques" para los editores, pero como ahora podrán editar bloques en línea, realmente no es necesario que lleguen a la página de configuración de bloques.
Ahora, si aún insiste en eliminar el acceso a esa página de configuración de bloque, puede hacer un simple cambio de menú que cambie el permiso requerido para la página de configuración de bloque, como el siguiente código.
fuente
El módulo Bean es una posible alternativa para responder esta pregunta. Aquí hay una cita sobre su página de proyecto:
Combinado con las opciones disponibles para otorgar los permisos Bean apropiados , debería darle mucha flexibilidad sobre cómo exactamente desea usar este módulo (excelente) en su caso específico: para cada bloque individual creado con el módulo BEAN, puede usar la página de Permisos típica (en
admin/people/permissions
) para otorgar acceso Agregar / Editar / Ver / Eliminar a roles seleccionados.Este módulo también funciona muy bien en combinación con los módulos de integración de características UUID y UUID . Y después de familiarizarse con el módulo Bean, es posible que encuentre otros casos en su sitio en los que también desee usar este módulo (que de alguna manera compensa el hecho de que necesita agregar otro módulo).
El video tutorial Tutorial del módulo Drupal Bean: el uso de la interfaz de usuario de administración de Bean proporciona una gran introducción para comprender realmente el poder de este módulo y el tipo de cosas que puede hacer con él (solo mediante el uso de técnicas de creación de sitios, sin necesidad de codificación personalizada). También muestra cómo el módulo Bean transforma los bloques de Drupal en entidades confiables.
Este módulo solo comenzó a partir de D7 (debido a las "entidades", por supuesto, que solo se introdujeron en D7), y ya cuenta con más de 22K instalaciones informadas. Aquellos que aún no lo usan definitivamente deberían comenzar a mirarlo en preparación para algún día actualizar a D8. Porque esto es lo que se muestra actualmente en su página de proyecto (agregué el marcado en negrita aquí):
fuente