我试图使为Drupal 7的模块,提供了一个块,具有一定的配置设置。 现在我想的是,我想提供5块给用户,使他们能够在每块使用不同的设置。 换句话说,我希望每次块一组独立的设置。 我怎样才能做到这一点?
编辑:其实我做了一个模块,显示单块。 如果您已经使用快鱼菜单模块,然后你可以看到,他们让我们的选择,选择多少块应当提供。 这样每个块,我们可以使用不同的菜单显示。 我说的这个功能
我试图使为Drupal 7的模块,提供了一个块,具有一定的配置设置。 现在我想的是,我想提供5块给用户,使他们能够在每块使用不同的设置。 换句话说,我希望每次块一组独立的设置。 我怎样才能做到这一点?
编辑:其实我做了一个模块,显示单块。 如果您已经使用快鱼菜单模块,然后你可以看到,他们让我们的选择,选择多少块应当提供。 这样每个块,我们可以使用不同的菜单显示。 我说的这个功能
创建一个配置页:
function my_module_admin_settings($form, &$form_state) {
$form['my_module_number_of_blocks'] = array(
'#title' => t('Post to Blog by default'),
'#description' => t('Should content post to blog by default or only when selected?'),
'#type' => 'select',
'#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10)),
'#default_value' => 2,
);
return system_settings_form($form);
}
创建使用模块块hook_block_info你这样定义的数组:
hook_block_info() {
number_blocks = variable_get('my_module_number_of_blocks', 0);
$x=0
while ($x < number_of_blocks) {
$blocks['myblock-' . $x] = array(
'info' => t('Block ' . $x),
'cache' => DRUPAL_NO_CACHE,
);
}
return $blocks
}
你会配置中的值hook_block_configure :
function hook_block_configure($delta = '') {
// This example comes from node.module.
$form = array();
$parts = explode($delta, '-');
if ($parts[0] == 'my_block') {
$form['my_block_' . $parts[1] . '_option1'] = array(
'#type' => 'select',
'#title' => t('Some option'),
'#default_value' => variable_get('my_block_' . $parts[1] . '_option1', 'first_option'),
'#options' => drupal_map_assoc(array('first option', 'second option')),
);
}
return $form;
}
一旦你已经确定你的块,你需要告诉他们如何显示与hook_block_view 。 就像是:
function hook_block_view($delta = '') {
$block = array();
$parts = explode($delta, '-');
if ($parts[0] == 'myblock') {
$block['subject'] = t('Block' . $parts[1]);
$block['content'] = my_module_block_b_generate($parts[1]);
}
return $block;
}
然后,你将使用块数量和配置,以确定输出:
my_module_block_b_generate($block_number) {
$option1 = variable_get('my_block_' . $block_number . '_option1', 'first_option');
return t('this is block ' . $block_number . '. It has chosen option ' . $option1 . ' for option1');
}