Custom Autocomplete Path on CCK Node Reference Fields

Posted on Sept. 3, 2012

In a recent post, I explained how to dynamically alter the AJAX behavior of an autocomplete field in Drupal. But what if you have the similar node reference field, and want to modify the result set? This post will show you how.

Let's go over some assumptions:

  1. For simplicity, we will alter the field to show only nodes in English.
  2. This will only alter the autocomplete behavior, not the validation. If your field is set to accept a limited set of nodes, the suggestions have to be a subset. Altering the validation of the field is a post for another - longer - day.
  3. Our field's machine name is field_reference.
  4. Our field is set to accept only 1 value.

First, let's add the menu hook and the autocomplete behavior. Fairly standard stuff:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/**                                                                           
 * Implements hook_form_alter().                                              
 */                                                                           
function example_module_menu() {                                              
  $items = array();                                                           
  $items['example_autocomplete'] = array(                                     
    'type' => MENU_CALLBACK,                                                  
    'page callback' => 'example_module_autocomplete',                         
    'access callback' => TRUE,                                                      );                                                                          
  return $items;                                                              
}

function example_module_autocomplete($input) {                                
  $results = array();                                                         
  $resource = db_query_range("SELECT nid, title FROM {node} WHERE language = '%s' AND title LIKE '%s%%'", 'en', $input, 0, 10);

  while ($node = db_fetch_object($resource)) {                                
    $key = sprintf('%s [nid: %d]', $node->title, $node->nid);                 
    $results[$key] = $node->title;                                            
  }                                                                           
  print json_encode($results);                                                
  exit();                                                                     
}

As you can see, all we're doing is providing a new AJAX callback. In that callback, we select nodes from the database and limit them by language. Now, let's define our form alter hook. But remember, like all CCK fields, hook_form_alter is too early in the process to modify a field. So instead, we define an #after_build function that will get called further down the road. Like so:

1
2
3
4
5
6
7
8
9
<?php
/**                                                                           
 * Implements hook_form_alter().                                                   
 */                                                                               
function example_module_form_alter(&$form, &$form_state, $form_id) {          
  if ($form_id == 'post_node_form') {                                         
    $form['#after_build'][] = 'example_module_after_build';                   
  }                                                                           
}

Finally, we'll actually alter the form field in our #after_build function. If you're alter a field set to multiple values, be sure to loop over the field and alter all rows.

1
2
3
4
5
<?php
function example_module_after_build($form, &$form_state) {                    
  $form['field_reference'][0]['nid']['nid']['#autocomplete_path'] = 'example_autocomplete';
  return $form;                                                               
}

Learning Drupal? Subscribe to my Drupal articles, tips and tutorials.

Comments

sadfsdfFeb. 19, 2019, 12:49 p.m.

dasfasdfasdfasdf

Reply
consolidate my payday loansJune 4, 2019, 5:38 p.m.

very good post, i certainly love this site, keep on it consolidate my payday loans

Reply
davidFeb. 19, 2019, 12:49 p.m.

I think it is easy to replicate it if you take help from essay services who have done it before. I would suggest you to try contacting them and seeing if they are willing to help you with making it again.

Reply
dsdsdMay 6, 2019, 5:47 a.m.

Il est également possible de voir des histoires sur les dommages causés aux intérêts des clients à partir des informations, franck muller montres d'Internet et d'autres canaux. En conséquence, les clients ont tendance à être préparés pour les vendeurs, en particulier ceux qui sont actifs dans la vente sur site, et sont encore plus réticents à entrer en contact avec eux. La hublot montres est équipée d'un mouvement automatique, 28800 oscillations par heure, 29 gemmes, 44 heures de stockage d'énergie et 60 mètres de résistance à l'eau.

Reply
fggfggfMay 18, 2019, 2:19 p.m.

On peut constater que les ventes réussies doivent respecter le principe de réciprocité. Tout en servant les clients et en vendant des produits à leurs clients, Replique Hublot les vendeurs doivent apprendre à rester sur la même ligne avec les clients et à comprendre les besoins réels des clients. Fermer Dans le processus de vente, le point le plus pratique pour le client est de fournir aux clients une valeur ajoutée et des solutions plus rentables, afin que le personnel de vente puisse être accueilli par les clients. Pensez toujours au client, examinez le problème du point de vue du client, aidez-le à réfléchir à la façon d'économiser de l'argent, puis gagnez de l'argent. En fait, ce n’est pas une contradiction, car lorsque le client vous fait confiance, il continuera à travailler avec vous, après de nombreuses coopérations, avec les bénéfices que vous en tirerez.

Reply
Sumitsingh72May 31, 2019, 8:19 a.m.
Reply
Sumitsingh72May 31, 2019, 8:19 a.m.

Contract the Best Packers and Movers in Hyderabad through Shiftinindia
More info :- packers and movers in Hyderabad packers and movers Hyderabad charges packers and movers Pune to Mumbai

Reply
Tushar KantaJune 14, 2019, 6:45 a.m.

Looking an affordable packers and movers in Pune the search end here and visit our link. Packers and movers in Pune Get free estimation on packers and movers charges in Pune. Packers and movers charges in Pune

Reply

Post New Comment