我想知道哪种是在页面上显示表单的最佳方式(例如: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');
}
我想知道这是出于主题目的,因为设计师之后会进行图形集成。
感谢您的建议。
答案 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页面(与普通用户注册页面相同)更改表单。您可以手动设置表单主题,而不会影响现有表单。