2009-11-19 2 views
2

J'essaye de créer un formulaire sur mesure dans drupal, avec un champ de référence de nœud.Est-il possible de personnaliser la référence de nœud drupal et passer votre recherche et un argument d'un autre champ

Je voudrais ajouter un peu de fonctionnalité supplémentaire à la référence de nœud automatique terminée. J'ai créé une vue qui contient un argument. Je voudrais être en mesure de passer cet argument à partir d'une liste déroulante ainsi que le texte tapé dans le script de saisie semi-automatique.

Est-ce que quelqu'un sait comment je commencerais ceci.

/* FIELD 1 - the drop down */ 
    $sql = "SELECT nid, title FROM node where type='resourcetype' AND status =1 order by title 
    "; 
     $result = db_query($sql); 
    $counter = 0 ; 
    $options = array(); 
     while ($data = db_fetch_array($result)) { 
     // krumo ($data); 
     $options[$data[nid] ] =  $data[title] ; 
     if ($counter ==0) {$df = $data[nid]; } 
     $counter ++; 


     } 


/* FIELD 2 - the node reference field */  
     $form['sor']['type'] = array(
     '#type' => 'select', 
     '#title' => t('Resource type'), 
     '#required' =>TRUE, 
     '#options' => $options, 
    )  ; 


     $form['sor']['field_asor_sors'] = array(
     '#type' => 'textfield', 
     '#title' => t('Add a SOR item to this job'), 
     '#autocomplete_path' => 'nodereference/autocomplete/field_asor_sors', 
      '#element_validate' => array('myelement_validate_is_valid_noderef'), 
     '#required' =>TRUE, 

    ); 

Merci beaucoup

Matt

Répondre

2

AFAIK il n'y a pas de moyen facile de le faire. Je voulais faire quelque chose de similaire il y a quelque temps (en utilisant des arguments différents basés sur le contexte du nœud), mais je me suis abstenu de le faire, car il aurait fallu des changements significatifs de la logique de rappel autocomplete. Vous devez modifier plusieurs fonctions nodereference pour ajouter le support pour passer un argument au rappel nodereference_autocomplete() initial, le passer de là à _nodereference_potential_references(), et enfin à _nodereference_potential_references_views(), tout en vous assurant que les modifications ne cassent rien d'autre.

Si vous voulez néanmoins essayer, vous devriez jeter un oeil aux correctifs dans this thread, car ils veulent aussi faire quelque chose comme ça et peuvent contenir quelques astuces/exemples utiles. Une alternative potentiellement plus facile pourrait être d'échanger le rappel #autocomplete_path du champ nodereference avec votre propre version personnalisée qui générerait le résultat, tout en ajoutant une logique js à votre liste déroulante pour ajouter un argument supplémentaire à ce chemin lorsque la sélection change.

+0

Merci Opel, je vais jeter un oeil – Matt

+0

citation - "Une alternative potentiellement plus facile pourrait être de échangez le rappel #autocomplete_path du champ nodereference avec votre propre version personnalisée qui génèrera le résultat, tout en ajoutant la logique js à votre liste déroulante pour ajouter un argument supplémentaire à ce chemin lorsque la sélection sera modifiée. " Savez-vous quel est le format du résultat automatique? J'ai raison de penser que j'ai besoin de passer mon tableau de résultats dans drupal_js ($ arrayofresults); ? – Matt

+0

@Matt: Jetez un oeil à la fonction 'nodereference_autocomplete()' dans nodereference.module. Fondamentalement, il devrait être juste un drupal_json ($ arrayofresults), mais je suppose que vous auriez besoin de faire correspondre la structure de clé de tableau attendue pour permettre l'extraction nid (pas sûr cependant). –

-1

Si vous allez dans le formulaire de configuration du champ nodereference, et faites défiler la liste vers le bas, il y a un fieldset (qui peut être réduite) qui est intitulé ' Avancé - Nœuds pouvant être référencés (View) '. Vous pouvez l'utiliser pour sélectionner une vue et faire en sorte que cette vue soit la source des choix de nodereference sans écrire de nouveau code.

+0

Salut John, merci pour la réponse. Je dois passer les arguments, d'un ID d'un autre champ (FIELD 1), donc il n'est pas vraiment répondu à la question .. – Matt

Questions connexes