【发布时间】:2009-09-16 12:00:54
【问题描述】:
管理我正在处理的网站的人希望能够决定哪些块放在哪里。 Drupal 中已经有一个很好的界面(从下拉列表中选择区域),但我想对这个用户隐藏某些块。这些是他不应该移动的方块。
Afaik 这是不可能通过权限实现的。是否有允许细粒度控制哪些块可以由谁管理的模块?我宁愿不写自定义界面...
谢谢, 史蒂夫
【问题讨论】:
标签: drupal
管理我正在处理的网站的人希望能够决定哪些块放在哪里。 Drupal 中已经有一个很好的界面(从下拉列表中选择区域),但我想对这个用户隐藏某些块。这些是他不应该移动的方块。
Afaik 这是不可能通过权限实现的。是否有允许细粒度控制哪些块可以由谁管理的模块?我宁愿不写自定义界面...
谢谢, 史蒂夫
【问题讨论】:
标签: drupal
好吧,您可以像这样创建一个简单的自定义模块(显然,将 my_module 替换为您的自定义模块的名称):
function my_module_perm()
{
return array('view special blocks');
}
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'block_admin_display_form') {
if(!user_access('view special blocks')) {
$special_blocks = array( ); // Specially hidden blocks go here
foreach($special_blocks as $block) {
unset($form[$block]);
}
}
}
}
然后:
$special_blocks数组中(基本上就是方块的div减去block_的id)access administration pages和administer blocks,但不应该启用view special blocks
在 Drupal 6.6 上测试过,应该可以在其他 6.x 版本上工作(可能还有 5.x 稍作修改)
【讨论】:
使用 module_invoke() 手动将这些块从区域中取出并嵌入到您的模板中。
$block = module_invoke('module_name', 'block', 'view', 'block name or ID');
print '<h2>' . $block['subject'] . '</h2>';
print $block['content'];
【讨论】:
也许试试Blockqueue?我从未使用过它,但它似乎涵盖了您的用例。
【讨论】: