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*) (fictive) 创建一个主题:

$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 回答