web-dev-qa-db-ja.com

フォームがprivatemsgモジュールに表示されないようにするにはどうすればよいですか?

以下に示すように、[ブロックされたユーザー]ページから[ユーザーをブロックする]フィールドセット、ユーザー名のテキストと入力フィールド、および[ユーザーをブロックする]ボタンを削除しようとしています。

Privatemsg screenshot

私が変更しようとしているコードは、pm_block_userモジュールにあります。

/**
 * Formbuilder function to build a simple form to block users.
 */
function pm_block_user_list() {
  global $user;
  $form['new'] = array(
    '#type'   => 'fieldset',
    '#title'  => t('Block a user'),
  );
  $form['new']['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Username'),
    '#autocomplete_path' => 'messages/user/autocomplete',
    '#description'        => t('Separate multiple names with commas.'),
    '#required'          => TRUE,
  );
  $form['new']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Block user'),
    '#validate' => array('pm_block_user_block_validate'),
    '#submit' => array('pm_block_user_block_submit'),
  );

  $header = array(
    array(
      'data' => t('Username'),
      'field' => 'u.name',
      'sort'  => 'asc',
      ),
    array(
      'data' => t('Operations'),
      ),
  );

  $select = db_select('pm_block_user', 'pmb')->extend('PagerDefault')->extend('TableSort')
    ->fields('pmb', array('author'))
    ->condition('pmb.recipient', $user->uid)
    ->limit(20)
    ->orderByHeader($header);

  // Only show existing users, therefore join users.
  $select->innerJoin('users', 'u', 'u.uid = pmb.author');

  $rows = array();
  foreach ($select->execute() as $row) {
    $rows[] = array(
      theme('username', array('account' => user_load($row->author))),
      l(t('unblock'), 'messages/block/' . $row->author, array('query' => drupal_get_destination())),
    );
  }
  $form['#header'] = $header;
  $form['#rows'] = $rows;
  return $form;
}

これが私がtemplate.phpで試したコードです フォームから不要な要素を削除するためのこれらの手順

function MYMODULE_pm_block_user_list($form) {
  unset($form['new']['#title']);
  unset($form['new']['#type']);
  return drupal_render($form);
}

ただし、このコードは、非表示にしようとしている「ユーザーのブロック」セクションではなく、「ユーザー名/トム/操作/ブロック解除」セクションを非表示にします。

1
Patrick Kenny

次のコードは私のためにそれを行います:

_function MYMODULE_form_pm_block_user_list_alter(&$form, &$form_state, $form_id) {
  unset($form['new']);
}
_

あなたがそれについて知らなかったならば、これは役立つはずです。

hook_form_FORM_ID_alter();

また、より一般的な hook_form_alter() もあります。

2
Chapabu