Проблемы с пользовательской формой модуля - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь программно отобразить форму для отображения в моей области просмотра страницы узла. У меня есть следующий код в моем "simplemodule".

function simplemodule_newcomer_form($form_state){
    $form   =   array();
    $form['simplemodule_newcomer']['name']  =   array(
        '#type'         =>  'textfield',
        '#title'        =>  t('name'),
        '#description'      =>  t(''),
        '#weight'       =>  -1,
    );
    $form['simplemodule_newcomer']['email'] =   array(
        '#title'        =>  t('email'),
        '#type'         =>  'textfield',
        '#description'      =>  t(''),
        '#weight'       =>  0,
    );
    $form['simplemodule_newcomer']['phone'] =   array(
        '#title'        =>  t('telephone No.'),
        '#type'         =>  'textfield',
        '#description'      =>  t(''),
        '#weight'       =>  0,
    );
    $form['submit_button'] =    array(
        '#type' =>  'submit',
        '#value'    =>  'enter',
    );
    return $form;
}

function simplemodule_newcomer_form_submit($form_id, &$form_state){
    //dealing with submitted data
}

Этот код работает, но только по определенной ссылке в моем меню администрирования.

То, что я хочу сделать, - это заставить форму отображаться и отправляться на определенный узел в режиме просмотра. Таким образом, создается эффект заполнения формы при посещении узла.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Вы можете реализовать hook_nodeapi() и прикрепить свою форму, используя drupal_get_form():

function simplemodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {

  if ($node->nid == $the_nid && $op == 'view') {
    $node->content['my_additional_field'] = array(
      '#value' => drupal_get_form('simplemodule_newcomer_form'), 
      '#weight' => 10,
    );
  }

}

Вы можете использовать клавишу #weight, чтобы указать, гдеПо отношению к другому контенту на странице появится ваша форма.Также вам нужно будет очистить кеш Drupal при реализации этого хука, чтобы убедиться, что он поднят.

1 голос
/ 08 ноября 2011

Конечно, вы можете использовать

hook_form_alter(&$form, &$form_state, $form_id) and 

hook_nodeapi(&$node, $op, $teaser = NULL, $page = NULL)

http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_form_alter/7

http://drupal.org/node/1011692

...