我想问一下在我在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!
}
答案 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
属性。