Drupal 7主题:hook_theme或drupal_get_form

时间:2012-11-06 22:09:27

标签: drupal drupal-7 drupal-theming

我想知道哪种是在页面上显示表单的最佳方式(例如:vip用户的注册表单...而不是作为主要内容而是作为主要内容)。

user_menu中的user.module 方式(* hook_menu *):

  $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');
}

我想知道这是出于主题目的,因为设计师之后会进行图形集成。

感谢您的建议。

1 个答案:

答案 0 :(得分: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页面(与普通用户注册页面相同)更改表单。您可以手动设置表单主题,而不会影响现有表单。