I may not have this quiet right but isn't this what hook_autocomplete is for? http://api.drupal.org/api/HEAD/function/user_autocomplete You can print drupal_to_js($my_array)? Mostly emailing a response because I would like to know the answer too. Date: Wed, 17 Jan 2007 17:43:10 -0800
From: Rob Thorne <rob@torenware.com> Subject: [development] "Subclassing" the standard #autocomplete form widget To: development@drupal.org Message-ID: <45AED0AE.5060806@torenware.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
I need a widget for Forms API which *almost* identical to the textfield autocomplete widget in 5.0. I want the same user experience -- the user types and chooses an item. But I want the underlying AJAX and Drupal behavior to differ a bit.
An example of the type of widget I'd want would be a "Country Selection" widget where what I really want is the two-character country code (US, CA, GB, FR, and so on), but I want the user to think of typing "United States", "Canada", "Great Britain", "France" or so on in order to get the popup to get set on this code.
Looking through the 5.0 sources, the way the current autocompletion widget works is via includes/form.inc, where the theming function theme_textfield($element) special cases textfields with the '#autocompletion_path' , by making sure that autocomplete.js gets added to the page going out, and by adding a hidden <item> to store state information that the code in autocomplete.js needs to do its work.
I really don't need to change behavior very much; I just need to send back an array of array(key, value), where the standard widget sends back an array of string values. But pretty much everything else that Unconed's code does exactly what I want, and while I can copy if if that's easiest, I don't want or need to change what he did.
What's the best way to create my modified Forms API widget? It looks like I'd want to "override" or "subclass" theme_textfield, although only to add behavior: I don't want standard autocomplete widgets to behave any different than usual (although I'd not want both sets of code to compete on the same widget). I'd then copy autocomplete.js and make very small changes in it, changing function names where required.
Is there a better way to do this? Or even better, has someone else already done this?
Thanks, Rob
Rob Thorne Torenware Networks