Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何仅在一页上覆盖表单?_Php_Drupal_Drupal 6_Drupal Fapi - Fatal编程技术网

Php 如何仅在一页上覆盖表单?

Php 如何仅在一页上覆盖表单?,php,drupal,drupal-6,drupal-fapi,Php,Drupal,Drupal 6,Drupal Fapi,好的,这是我的钩子表单更改功能。它导致网站上所有的注册表单都被重写了,我不想这样,因为我只想在这个页面上 功能特殊注册表格更改(&$form、$form\u state、$form\u id){ 如果($form\u id=='user\u register'){ drupal_set_title(t(“自定义注册”); $form['firstname']=数组('#type'=>'textfield', “#title”=>t('First Name:'), “#必需”=>正确, “#大小

好的,这是我的钩子表单更改功能。它导致网站上所有的注册表单都被重写了,我不想这样,因为我只想在这个页面上


功能特殊注册表格更改(&$form、$form\u state、$form\u id){
如果($form\u id=='user\u register'){
drupal_set_title(t(“自定义注册”);
$form['firstname']=数组('#type'=>'textfield',
“#title”=>t('First Name:'),
“#必需”=>正确,
“#大小”=>45,
“#重量”=>-100,);
$form['lastname']=数组('#type'=>'textfield',
“#title”=>t('Last Name:'),
“#必需”=>正确,
“#大小”=>45,
“#重量”=>-99,);
}
我只需要将名字和姓氏捕获并存储在此页面上的另一个表中


在其他页面上,我只想要好的老式表单。我还需要更改权重吗?我知道我缺少了一些基本内容。

您也可以使用核心模块列表中的配置文件模块。它将解决此问题,无需任何编程,仅供参考。

您只需使用或$u GET['q']检查当前页面即可

例如:


如果您想限制对特定页面的表单更改,只需在表单id检查中添加该页面的检查,例如:

function special_registration_form_alter(&$form, $form_state, $form_id) {
  // Alter the registration form, but only on 'user/register' pages
  if ($form_id == 'user_register' && 'user' == arg(0) && 'register' == arg(1)) {
    // snipped alteration code
  }
}
实现
hook_user()
;该函数允许用户在站点注册时更改呈现给他们的表单。
hook\u user()
由user.module使用,它独立于概要文件模块


将挂钩定义为
hook\u用户($op,&$edit,&$account,$category=NULL)
,当注册表单呈现给用户时,参数
$op
将包含值
'register'
。在这种情况下,模块将返回要添加到注册表单中的表单字段。

如果您真的不需要创建用户帐户,比如简单的事件注册。如果您只收集名称,您可以使用webform模块。

您的数组不应该在末尾有逗号。#weight'=>-99应该以99结尾。逗号是为了放置另一个键/值,而您没有。此外,您还需要在函数上使用右括号。哈哈,我知道,谢谢!!!我没有粘贴所有函数。谢谢您的帮助g看一看。@Dan Heberden:最后一个数组项后面的逗号在PHP中是完全有效的,并且被许多人采用为“普通”,因为它使数组声明的行代码操作更加容易,只要右括号位于新行上。这是否是一件好事是一个不值得深入讨论的公开辩论;)@Henrik-是的,我在查看zend上的一些标准内容时注意到了这一点。我一直认为后面的逗号创建了一个空元素,但在测试后我发现它没有任何意义,使得在一行中添加元素更容易避免混乱。感谢您指出:)是的,我与人们交谈的次数越多,他们建议我使用它或内容越多dule.我想我跳进了代码。不过谢谢你的提示:)好吧,我没有及时注意到cam8001s类似的答案-仍然保留这个版本,因为它结合了页面和表单id检查(顺便说一句,不需要返回FALSE)。如果你使用Drupal 6,你可以像这样定义你的表单更改:hook\u form\u form\u id\u alter(&$form,&$form\u state)是的,$\u GET['q']始终是系统路径,因此,例如,如果您的节点别名为“/blog/2010/Jan/title of blog post.html”,则$\u GET['q']仍然是“node/123”。
function special_registration_form_alter(&$form, $form_state, $form_id) {
if ($_GET['q'] !== 'whatever/path' ) { return false; }
..rest of code..
}
function special_registration_form_alter(&$form, $form_state, $form_id) {
  // Alter the registration form, but only on 'user/register' pages
  if ($form_id == 'user_register' && 'user' == arg(0) && 'register' == arg(1)) {
    // snipped alteration code
  }
}