2012-11-26 5 views
2

Je crée un bloc personnalisé par programmation avec deux zones de sélection. Le premier est rempli automatiquement et le second est rempli en fonction de la valeur du premier. Idéalement, j'aimerais utiliser AJAX et j'ai de l'expérience dans l'intégration d'AJAX dans un formulaire standard, mais le formulaire de configuration de bloc n'inclut pas de variable $ form_state et semble fonctionner différemment. Peut-on utiliser la méthode standard?Bloc Drupal 7 Configurer AJAX

'#ajax'    => array(
    'callback'   => 'my_callback', 
    'wrapper'   => 'the-id', 
    'method'   => 'replace', 
    'effect'   => 'fade', 
), 

Comment le rappel fonctionnerait-il?

Merci, Howie

+0

Je suis si triste que cela n'a aucune réponse. Avez-vous déjà travaillé ou trouvé votre réponse? Un lien de suivi serait génial parce que je travaille exactement la même chose. –

+0

Ajouté quelque chose :-) – Chris

Répondre

0

Je n'ai pas essayé cela, mais je parie que cela fonctionne: utiliser hook_form_alter() pour accéder à votre formulaire de configuration de bloc. Là, vous aurez un & $ form_state et serez en mesure de faire des trucs AJAX de fantaisie (see this). La partie la plus difficile consiste à modifier UNIQUEMENT VOTRE forme à l'alter-hook. façons possibles:

Je ne sais pas si cela fonctionne (façon la plus élégante):

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
     if ($form_id == 'block_admin_configure') { 
     // Find the delta in the $form variable 
     if ($form['delta'] == 'the_delta_you_are_looking_for') { 
     //do fancy ajax stuff 
     } 
     } 
    } 

laid, mais sans aucun doute possible:

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure' && arg(4) == 'mymodule') { 
     //do fancy ajax stuff 
    } 
    } 
} 

encore plus laid, mais aussi possible:

function mymodule_block_configure($delta = '') {  
    $form = array(); 
    if ($delta == 'my_block') { 
     $form["my_block_change_this"] = array(
      "#type" => "hidden", 
      "#value" => "lalala", 
     ) 
    } 
} 

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure') { 
     if (!empty($form['my_block_change_this'])) { 
      //do fancy ajax stuff 
     } 
    } 
} 

Astuce: Imprimez le form_state-array (au crochet alter) et voyez ce qu'il y a (c'est toujours la première chose que je fais n je rencontre des problèmes FAPI). J'espère que cela t'aides.