Answers:
在Drupal中,只有有权管理块的用户才能更改块设置,包括分配块的区域。
据我所知,没有模块允许向用户分配更细化的权限。您应该编写自己的自定义模块,该模块仅显示允许用户编辑的字段。
例如,以下代码将更改block_admin_configure()的形式构建形式,该功能为任何块构建构造形式,以允许具有“编辑块标题”权限的用户编辑块标题。
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');
}
}
该函数是为名为mymodule.module的模块执行的hook_form_FORM_ID_alter()的实现。
区域设置(输出块的主题区域)的字段包含在$form['regions']
;中。该字段集为每个启用的字段包含一个选择字段。
要仅向具有“编辑块区域”权限的用户显示该字段集,例如,可以使用以下代码。
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
有权管理块的用户可以从http://example.com/admin/structure/block更改分配给块的区域。若要不允许没有“编辑块区域”权限的用户访问该页面,应更改该菜单的访问处理程序,并用自定义的默认访问处理程序替换该自定义控件,FALSE
当用户没有该权限时将返回该自定义控件。
有关更多信息,请参见hook_menu和hook_menu_alter()。
请参阅“ 阻止访问”模块。
此模块添加了一组用于创建,查看,移动,启用,禁用和配置块的全局权限以及各个块级别的权限。
我建议的一种简单解决方案是检出Boxes模块。该模块将为块提供一个不错的内联编辑选项(通过AJAX),这将使编辑者更轻松地更改块中的文本。对于编辑者,权限仍然需要是“管理块”,但是由于他们现在可以内联编辑块,因此实际上根本不需要他们进入块配置页面。
现在,如果您仍然坚持要删除对该块配置页面的访问,则只需执行一个简单的菜单更改即可更改该块配置页面所需的权限,例如以下代码。
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');
}
该豆模块是一种可能的选择来回答这个问题。这是有关其项目页面的报价:
可以将Bean视为提供新类型的方法(与之相比,这是一种内容类型的节点),然后提供一个添加内容接口以创建所需数量的块(请参见下面的屏幕截图)。然后可以像其他任何块一样将Bean内容放置在站点周围。
结合用于授予适当的Bean权限的可用选项,它应该为您提供在特定情况下如何精确使用此(大型)模块的灵活性:对于使用BEAN模块创建的每个单独的块,您都可以使用典型的权限页面(位于admin/people/permissions
),以授予对选定角色的添加/编辑/查看/删除权限。
该模块与UUID和UUID功能集成模块结合使用也非常有效。并且,在您熟悉Bean模块之后,您可能会在站点中发现其他情况下也要使用此模块(这在某种程度上弥补了您需要添加另一个模块的事实)。
视频教程Drupal Bean模块教程-使用Bean Admin UI提供了一个很好的介绍,可以真正理解该模块的功能以及您可以使用该模块执行的操作(仅使用网站构建技术,不涉及自定义编码)。它还显示了Bean模块如何将Drupal块转换为可现场使用的实体。
该模块仅从D7开始(由于D7中仅引入了“实体”),并且已经报告了超过22K的安装。那些还没有使用它的人一定应该开始研究它,以准备升级到D8。因为这是当前在其项目页面上显示的内容(我在此处添加了粗体标记):
该模块已包含在Drupal 8内核中。有关更多信息,请参考此问题。