Как я могу сделать некоторый код, прежде чем я собираю форму в Drupal 7 (своего рода препроцесс)? - PullRequest
0 голосов
/ 21 июля 2011

Я хотел бы спросить, как я могу сделать некоторый код перед тем, как создавать форму в 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 или, если он не установлен, я назначаю значение по умолчанию. $ 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 ]

1 голос
/ 22 июля 2011

Похоже, вы хотите, чтобы объект сохранялся при загрузке страницы, это звучит правильно?Если это так, вы можете сохранить его в сеансе.Попробуйте что-то вроде этого:

/** 
 *  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);
}
0 голосов
/ 21 июля 2011

hook_form_alter позволяет изменить форму перед ее отображением, включая добавление свойства #default_value.

...