0

ページにフォームを表示するのに最適な方法はどれか疑問に思います(たとえば、vipユーザーの登録フォーム...ブロックではなくメインコンテンツとして)。

user_menu(* hook_menu *)のuser.moduleウェイ:

  $items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('vip_register_form'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
  );

または、use_theme(* hook_theme *)(架空)を使用してテーマを作成します。

$items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'theme',
    'page arguments' => array('vip_register'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
);

function user_theme() {
  return array(
    'vip_register' => array(
    )
  );
}

function theme_vip_register(){
    return drupal_get_form('vip_register_form');
}

後でデザイナーがグラフィック統合を行うので、テーマの目的でこれについて疑問に思っています。

アドバイスありがとうございます。

4

1 に答える 1

1

これは実際の答えではありませんが、そもそもあなたの質問が何であるかはよくわかりません。Drupal の習慣 #1: 決してコアをハックしないでください。

テーマ関数はその名の通り、何かをテーマにするためのものです。したがって、最初にフォームを作成する必要があります。

$items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('vip_register_form'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
  );

ユーザーが example.com/vip/register ページにアクセスすると、引数 vip_register_form で drupal_get_form 関数が呼び出されます。

したがって、この (vip ユーザー登録) フォームを返す関数を定義する必要があります。

function vip_register_form($form, &$form_state){
  ..your FAPI stuff here.
  return $form;
}

VIP 登録ページを開くと、通常のフォームではなくこのフォームが表示されます。パスワードとユーザー名のフィールドでさえ、追加しない限り使用できません。既存のフォームを変更する場合は、メニュー フックを新しいパスにコピーするだけです。

$user_menu_routers = user_menu();
$items['vip/register'] = $user_menu_routers['user/register'];

form_alter フックを使用して、vip/register ページ (通常のユーザー登録ページと同じ) でフォームを変更できるようになりました。既存のフォームに影響を与えることなく、フォームを手動でテーマ化できます。

于 2012-11-07T02:17:51.173 に答える