Wie können Sie einen Editor den Text in einem Block bearbeiten lassen, aber keine anderen Konfigurationsänderungen vornehmen, indem Sie den Block von einer Region in eine andere verschieben?
Wie können Sie einen Editor den Text in einem Block bearbeiten lassen, aber keine anderen Konfigurationsänderungen vornehmen, indem Sie den Block von einer Region in eine andere verschieben?
Antworten:
In Drupal können nur die Benutzer mit der Berechtigung zum Verwalten von Blöcken die Blockeinstellungen ändern, einschließlich der Region, der der Block zugewiesen ist.
Soweit ich weiß, gibt es keine Module, mit denen Benutzern eine detailliertere Berechtigung zugewiesen werden kann. Sie sollten Ihr eigenes benutzerdefiniertes Modul schreiben, das nur die Felder anzeigt, die ein Benutzer bearbeiten darf.
Der folgende Code würde beispielsweise die Formularerstellung aus block_admin_configure () ändern , der Funktion, mit der das Konfigurationsformular für einen beliebigen Block erstellt wird, um Benutzern mit der Berechtigung " Blocktitel bearbeiten" das Bearbeiten des Blocktitels zu ermöglichen.
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');
}
}
Die Funktion ist die Implementierung von hook_form_FORM_ID_alter () für ein Modul namens mymodule.module.
Die Felder für die Regionseinstellungen (die Themenregionen, in denen ein Block ausgegeben wird) sind enthalten $form['regions']
. Der Feldsatz enthält ein Auswahlfeld für jedes aktivierte Feld.
Um das Feld nur für Benutzer mit der Berechtigung "Blockbereiche bearbeiten" anzuzeigen, können Sie beispielsweise den folgenden Code verwenden.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Benutzer mit der Berechtigung zum Verwalten von Blöcken können die Region ändern, die Blöcken von http://example.com/admin/structure/block zugewiesen wurde . Um dem Benutzer ohne die Berechtigung "Blockbereiche bearbeiten" nicht den Zugriff auf diese Seite zu ermöglichen, sollten Sie den Zugriffshandler dieses Menüs ändern und den Standardzugriffshandler durch einen benutzerdefinierten ersetzen, der zurückgegeben wird, FALSE
wenn Benutzer nicht über diese Berechtigung verfügen.
Weitere Informationen finden Sie unter hook_menu und hook_menu_alter () .
Siehe das Blockieren des Zugriffs - Modul.
Dieses Modul fügt eine Reihe globaler Berechtigungen zum Erstellen, Anzeigen, Verschieben, Aktivieren, Deaktivieren und Konfigurieren von Blöcken sowie Berechtigungen auf der Ebene einzelner Blöcke hinzu.
Nachdem wir nach etwa einem Jahr auf diese Frage zurückgekommen sind, gibt es zwei Methoden, die sehr einfach sind.
Erstellen Sie einen Block und fügen Sie den folgenden Code in den Blockkörper ein:
<?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);
?>
Oder Sie können einen Ansichtsblock erstellen und nach der Knoten-ID filtern.
Jetzt erteilen Sie jemandem die Berechtigung zum Bearbeiten des Inhaltstyps, jedoch nicht zum Erstellen oder Löschen.
Eine einfache Lösung, die ich empfehlen würde, ist das Auschecken des Boxes- Moduls. Dieses Modul bietet eine nette Inline-Bearbeitungsoption (über AJAX) für Blöcke, die es den Redakteuren sehr einfach machen würde, den Text in den Blöcken zu ändern. Die Berechtigungen müssten weiterhin "Blöcke verwalten" für die Editoren sein, aber da sie jetzt Blöcke inline bearbeiten können, müssen sie wirklich nie zur Blockkonfigurationsseite gelangen.
Wenn Sie weiterhin darauf bestehen, den Zugriff auf diese Blockkonfigurationsseite zu entfernen, können Sie einfach eine einfache Menüänderung vornehmen, die die für die Blockkonfigurationsseite erforderliche Berechtigung ändert, z. B. den folgenden Code.
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');
}
Das Bean- Modul ist eine mögliche Alternative zur Beantwortung dieser Frage. Hier ist ein Zitat über seine Projektseite:
Stellen Sie sich eine Bean als Methode zum Bereitstellen neuer Typen vor (im Vergleich zum Knoten wäre dies ein Inhaltstyp), die dann eine Schnittstelle zum Hinzufügen von Inhalten bietet, um so viele Blöcke zu erstellen, wie Sie benötigen (siehe Abbildung unten). Der Bean-Inhalt kann dann wie jeder andere Block auf der Site platziert werden.
In Kombination mit den verfügbaren Optionen zum Erteilen der entsprechenden Bean-Berechtigungen sollten Sie viel Flexibilität darüber haben, wie genau Sie dieses (großartige) Modul in Ihrem speziellen Fall verwenden möchten: Für jeden einzelnen Block, den Sie mit dem BEAN-Modul erstellen, können Sie es verwenden Die typische Berechtigungsseite (at admin/people/permissions
) zum Gewähren des Zugriffs zum Hinzufügen / Bearbeiten / Anzeigen / Löschen auf ausgewählte Rollen.
Dieses Modul funktioniert auch hervorragend in Kombination mit den Modulen UUID und UUID Features Integration . Und nachdem Sie sich mit dem Bean-Modul vertraut gemacht haben, finden Sie möglicherweise andere Fälle auf Ihrer Site, in denen Sie dieses Modul ebenfalls verwenden möchten (was die Tatsache, dass Sie ein weiteres Modul hinzufügen müssen, irgendwie kompensiert).
Das Video-Tutorial Drupal Bean-Modul-Tutorial - Verwenden der Bean Admin-Benutzeroberfläche bietet eine großartige Einführung, um die Leistungsfähigkeit dieses Moduls und die Art der Dinge, die Sie damit tun können, wirklich zu verstehen (indem Sie nur Techniken zum Erstellen von Websites verwenden, ohne dass eine benutzerdefinierte Codierung erforderlich ist). Es zeigt auch, wie das Bean-Modul Drupal-Blöcke in feldfähige Entitäten umwandelt.
Dieses Modul wurde erst ab D7 gestartet (natürlich aufgrund der "Entitäten", die erst in D7 eingeführt wurden) und hat bereits über 22.000 gemeldete Installationen. Diejenigen, die es noch nicht verwenden, sollten es sich unbedingt ansehen, um eines Tages ein Upgrade auf D8 vorzubereiten. Weil dies derzeit auf der Projektseite angezeigt wird (ich habe hier das fette Markup hinzugefügt):
Dieses Modul ist im Drupal 8-Kern enthalten . Weitere Informationen finden Sie in diesem Problem .