Comment pouvez-vous laisser un éditeur éditer le texte dans un bloc, mais pas faire d'autres changements de configuration, comme déplacer le bloc d'une région à une autre?
Comment pouvez-vous laisser un éditeur éditer le texte dans un bloc, mais pas faire d'autres changements de configuration, comme déplacer le bloc d'une région à une autre?
Réponses:
Dans Drupal, seuls les utilisateurs autorisés à administrer des blocs peuvent modifier les paramètres de bloc, y compris la région à laquelle le bloc est affecté.
Pour autant que je sache, il n'y a pas de modules qui permettent d'attribuer aux utilisateurs une autorisation plus granulaire. Vous devez écrire votre propre module personnalisé qui affiche uniquement les champs qu'un utilisateur est autorisé à modifier.
Par exemple, le code suivant modifierait la création du formulaire à partir de block_admin_configure () , la fonction qui crée le formulaire de configuration pour n'importe quel bloc, pour permettre aux utilisateurs disposant de l'autorisation "modifier les titres des blocs" de modifier le titre du bloc.
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 fonction est l'implémentation de hook_form_FORM_ID_alter () faite pour un module nommé mymodule.module.
Les champs pour les paramètres de région (les régions de thème dans lesquelles un bloc est sorti) sont contenus dans $form['regions']
; L'ensemble de champs contient un champ de sélection pour chacun d'eux activé.
Pour afficher le champ défini uniquement aux utilisateurs disposant de l'autorisation "modifier les régions de bloc", vous pouvez utiliser le code suivant, par exemple.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Les utilisateurs autorisés à administrer des blocs peuvent modifier la région attribuée aux blocs à partir de http://example.com/admin/structure/block . Pour ne pas autoriser l'utilisateur sans l'autorisation "Modifier les régions de bloc" à accéder à cette page, vous devez modifier le gestionnaire d'accès de ce menu et remplacer le gestionnaire d'accès par défaut par un gestionnaire personnalisé qui reviendrait FALSE
lorsque les utilisateurs n'ont pas cette autorisation.
Pour plus d'informations, consultez hook_menu et hook_menu_alter () .
Voir le module Block Access .
Ce module ajoute un ensemble d'autorisations globales pour la création, la visualisation, le déplacement, l'activation, la désactivation et la configuration de blocs ainsi que des autorisations au niveau du bloc individuel.
Après être revenu à cette question après un an environ, il existe deux méthodes très simples.
Créez un bloc et placez le code suivant dans le corps du bloc:
<?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);
?>
Ou vous pouvez créer un bloc de vue et un filtre sur l'ID de nœud.
Vous donnez maintenant à quelqu'un l'autorisation de modifier le type de contenu, mais pas l'autorisation de le créer ou de le supprimer.
Une solution simple que je recommanderais est de vérifier le module Boxes . Ce module va fournir de belles options d'édition en ligne (via AJAX) pour les blocs, ce qui rendrait très facile pour les éditeurs de changer le texte dans les blocs. Les autorisations devraient toujours être "administrer les blocs" pour les éditeurs, mais comme ils pourront désormais modifier les blocs en ligne, il n'est vraiment pas nécessaire qu'ils accèdent à la page de configuration des blocs.
Maintenant, si vous persistez à supprimer l'accès à cette page de configuration de bloc, vous pouvez simplement effectuer une simple modification de menu qui modifie l'autorisation requise pour la page de configuration de bloc, comme le code suivant.
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');
}
Le module Bean est une alternative possible pour répondre à cette question. Voici un devis sur sa page projet:
Considérez un Bean comme une méthode pour fournir de nouveaux types (par rapport au nœud, ce serait un type de contenu) qui fournit ensuite une interface d'ajout de contenu pour créer autant de blocs que vous le souhaitez (voir capture d'écran ci-dessous). Le contenu du bean peut ensuite être placé autour du site comme n'importe quel autre bloc.
Combiné avec les options disponibles pour accorder les autorisations Bean appropriées , il devrait vous donner beaucoup de flexibilité sur la façon dont vous souhaitez utiliser exactement ce (grand) module dans votre cas spécifique: pour chaque bloc individuel créé avec le module BEAN, vous pouvez utiliser la page typique des autorisations (à admin/people/permissions
) pour accorder un accès Ajouter / Modifier / Afficher / Supprimer aux rôles sélectionnés.
Ce module fonctionne également très bien en combinaison avec les modules UUID et UUID Features Integration . Et après vous être familiarisé avec le module Bean, vous pouvez trouver d'autres cas dans votre site où vous souhaitez également utiliser ce module (ce qui compense en quelque sorte le fait que vous devez ajouter un autre module).
Le didacticiel vidéo Didacticiel du module Drupal Bean - à l'aide de l'interface utilisateur d'administration Bean fournit une excellente introduction pour vraiment comprendre la puissance de ce module et le genre de choses que vous pouvez faire avec lui (en utilisant uniquement des techniques de construction de site, aucun codage personnalisé impliqué). Il montre également comment le module Bean transforme les blocs Drupal en entités exploitables.
Ce module n'a commencé qu'à partir de D7 (en raison des «entités» bien sûr qui n'ont été introduites que dans D7), et compte déjà plus de 22 000 installations signalées. Ceux qui ne l'utilisent pas encore devraient certainement commencer à le regarder en vue d'une mise à niveau un jour vers D8. Parce que c'est ce qui est actuellement affiché sur sa page de projet (j'ai ajouté le balisage gras ici):
Ce module a été inclus avec Drupal 8 core . Reportez-vous à ce problème pour plus d'informations.