在Drupal 7(有点预处理)中构建表单之前,我该怎么做一些代码?

时间:2011-07-21 15:39:26

标签: php forms drupal preprocessor drupal-7

我想问一下在我在Drupal 7中构建表单之前如何编写代码? 在定义表单之前,我想执行一些代码(我想构建一个对象),我该怎么做?

我想要执行的代码:

if (isset($_GET["team"])){$team = $_GET["team"];} else {$team=1; };
$myteam = new Team($team);

我定义了表单:

function teamform_nameform() { 
    $form['editteam']['team_city'] = array( 
    '#title' => t('Team city'), 
    '#type' => 'textfield', 
    '#description' => t(''), 
        '#required' => TRUE,
        '#default_value' =>**$myteam->returnCity()**,
        '#size' => 30, 
     );
$form['editteam']['submitContentChanges'] = array( 
     '#type' => 'submit', 
     '#value' => t('Save changes'),
     '#submit' => array('teamform_editteam_submitContentChanges'),
);
}

我尝试使用以下钩子,但它不起作用。 (我仍然无法访问变量$team和对象$myteam(它写的是未定义的))

/** 
 *  Implements hook_form_alter(). 
 */ 

   function teamform_form_alter(&$form, &$form_state, $form_id) { 
     global $team;
     if (isset($_GET["team"])){$team = $_GET["team"];} else {$team=2;};
     global $myteam
     $myteam = new Team($team);
   }

$ team是我使用方法GET获得的团队ID,或者如果没有设置,我分配默认值。 $ myteam是我基于team_id构建的对象。 比我想要访问函数teamform_nameform()中的对象。在这个函数中,我使用方法returnCity()来返回团队所属的城市;作为默认值。 比我想用对象做出改变。具体来说,当用户更改团队的城市并单击“提交”按钮时,我想更新对象$ myteam中的城市。因此我使用函数:

function teamform_editteam_submitContentChanges($form, &$form_state){
  $team_city=$form_state['values']['team_city'];
  $myteam->updateTeamCity($team_city); //i got the error here. it's said that $myteam is undefined!
}

2 个答案:

答案 0 :(得分:1)

看起来你想要一个对象在页面加载中持续存在,这听起来不错吗?如果是这种情况,您可以将其存储在会话中。尝试这样的事情:

/** 
 *  Implements hook_form_alter(). 
 */ 
function teamform_form_alter(&$form, &$form_state, $form_id) { 
  $team = isset($_GET["team"]) ? $_GET["team"] : 2;
  $_SESSION['team'] = new Team($team);
}
function teamform_editteam_submitContentChanges($form, &$form_state){
  $team_city = $form_state['values']['team_city'];

  $myteam = $_SESSION['team'];
  $myteam->updateTeamCity($team_city);
}

答案 1 :(得分:0)

hook_form_alter允许您在呈现之前修改表单,包括添加#default_value属性。