Como enviar um formulário da web ajaxify no Drupal 7?


8

Tentei alterar a renderização do formulário da web usando hook_form_alter()e hook_node_view()em um módulo personalizado para adicionar '#ajax' em algum lugar.

Alguém já teve alguma experiência trabalhando com webform e ajax em D6 ou D7? Eu acho que a lógica seria a mesma para D6 e D7, então apenas a implementação muda.


11
D6 e D7 têm estruturas Ajax muito diferentes.
— Jeremy French

Sim, eles fazem, mas não é um problema. O problema real que estou tendo é que não consigo encontrar um gancho para alterar o formulário Webform e adicionar um evento ajax através da API do formulário Drupal.
— E. de Saint Chamas

Você tem uma pergunta específica sobre o Ajax? Isso soa conversacional. Além disso, apenas para referência: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax/7
— Citricguy

Eu realmente não gosto de postar respostas apenas com links para "como" postagens do blog sem nenhuma explicação própria, então adicionarei isso como um comentário: envisioninteractive.com/drupal/… - se isso acabar funcionando, podemos considerar adicioná-lo como uma resposta, talvez. Parece que é disso que você pode precisar.
— Danny Englander

Respostas:


8

O módulo Ajax funciona para mim no Drupal 6.

Para o Drupal 7:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // see if webform_client_form_ is in the form_id
      if(strstr($form_id, 'webform_client_form_')) {
        // get the nid so we can use it in the wrapper value
        $nid = $form['#node']->nid;
        // add the ajax properties to the submit button
        $form['actions']['submit']['#ajax'] = array(
          'callback' => 'mymodule_webform_js_submit',
          'wrapper' => 'webform-client-form-' . $nid,
          'method' => 'replace',
          'effect' => 'fade',
        );
      }
    }

function mymodule_webform_js_submit($form, $form_state) {
      // define the $sid variable (submission id from webform)
      $sid = $form_state['values']['details']['sid'];
      // if we have a sid then we know the form was properly submitted, otherwise, we'll just return the existing $form array
      if ($sid) {
        // first we have to load up the webform node object
        $node = node_load($form_state['values']['details']['nid']);
        // create an array up with the confirmation message, retreived from the webform node
        $confirmation = array(
          '#type' => 'markup',
          '#markup' => check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE),
        );
        // return the confirmation message
        return $confirmation;
      }
      else {
        // return the form
        return $form;
      }
    }

O que exatamente esse código deve fazer? Eu o adicionei ao meu tema (depois de alterar os nomes do gancho para corresponder ao meu tema), mas não percebo nenhum impacto.
— John Slegers

Ele entra em um módulo personalizado dentro do seu tema.
— Neelmeg

0

Uma das maneiras fáceis, se você estiver procurando ajaxificar apenas um formulário específico, será adicionar o plug-in do formulário jquery . É bem direto.

Adicione o código abaixo à função de pré-processamento da sua página no arquivo template.php.

  1. Primeiro adicione o plugin jquery com o código abaixo.

    drupal_add_js (drupal_get_path ('theme', 'your_theme'). "/js/jquery.form.js");

  2. Adicione o código abaixo e substitua #your_form_IDpelo seu ID de formulário

    drupal_add_js ('

                (function($){ 
    $(document).ready(function() { 
    
                $("#your_form_ID").ajaxForm(function() { 
                    alert("Thank you for your comment!"); 
                }); 
    });     }(jQuery));;
    
           ', 'inline');
    

É tudo o que você fez. Talvez você queira considerar carregar os scripts apenas as páginas necessárias.


Eu tenho pensado nisso. Agora, estou pensando em torná-lo um módulo com uma página de configuração para que todos possam se beneficiar. Existe algo assim?
— esafwan

-1

Veja se o módulo Ajax pode ajudá-lo com isso. Consulte a documentação também


11
Ele está pedindo pelo Drupal 7, esse módulo ainda não está disponível para o D7.
— Danny Englander

11
Para ser justo, embora a pergunta esteja marcada como 7, ela pergunta explicitamente se alguém teve experiência com ajax em D6 ou D7.
— Emmys
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.