-1

ブロックを提供し、特定の構成設定を持つ Drupal 7 用のモジュールを作成しようとしています。今私が欲しいのは、ユーザーに 5 つのブロックを提供して、各ブロックで異なる設定を使用できるようにすることです。つまり、各ブロックに個別の設定セットを提供したいと考えています。どうやってやるの?

編集:実際には、単一のブロックを表示するモジュールを作成しました。スーパーフィッシュ メニュー モジュールを使用したことがある場合は、利用可能にするブロックの数を選択できるオプションがあることがわかります。そのため、ブロックごとに異なるメニューを使用して表示できます。私はその機能について話している

4

1 に答える 1

3

構成ページを作成します。

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');
}
于 2012-09-25T19:47:36.633 に答える