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.