Проблемы с формой пользовательского модуля

#php #forms #drupal #drupal-6 #drupal-modules

#php #формы #drupal #drupal-6 #drupal-модули

Вопрос:

Я изо всех сил пытаюсь программно отобразить форму для отображения в области просмотра страницы моего узла. У меня есть следующий код в моем «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, amp;$form_state){
    //dealing with submitted data
}
  

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

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

Ответ №1:

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

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

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

}
  

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

Комментарии:

1. Спасибо за помощь новичку 🙂

Ответ №2:

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

 hook_form_alter(amp;$form, amp;$form_state, $form_id) and 

hook_nodeapi(amp;$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