Prepopulate
Prepopulate is an attempt to solve the problem that resulted from the discussion where the $node object, it was (correctly, I believe) decided, should not be prefilled from the $_GET variables, and instead, the power of the FormsAPI should be used to modify the #default_value of the form elements themselves.
This functionality will make things like bookmarklets easier to write, since it basically allows forms to be prefilled from the URL, using a syntax like:
http://www.example.com/node/add/blog?edit[title]=this is the title&edit[body_field][body]=body goes herePlease report any bugs or feature requests to the Prepopulate issue queue.
Instructions for use
Simple Usage
Prepopulate the title field on a node creation form:
http://www.example.com/node/add/content?edit[title]=This is the title
With 'non-clean' urls:
http://www.example.com?q=node/add/content&edit[title]=This is the title
Multiple fields
Prepopulate can handle pre-filling multiple fields from one URL. Just separate the edit variables with an ampersand:
http://www.example.com/node/add/content?edit[title]=The title&edit[body_filter][body]=The body
You're already using the ampersand with non-clean URLs:
http://www.example.com?q=node/add/content&edit[title]=The title&edit[body_filter][body]=The body
How to find what variable to set
This can be tricky, but there are a few things to keep in mind that should help.
Prepopulate.module is quite simple. It looks through the form, looking for a variable that matches the name given on the URL, and puts the value in when it finds a match. Drupal keeps HTML form entities in an edit[] array structure. All your variables will be contained within the edit[] array.
A good starting point is to look at the HTML code of a rendered Drupal form. Once you find the appropriate <input /> (or <textarea>...</textarea> tag, use the value of the name attribute in your URL, contained in the
edit array. For example, if the <input /> tag looks like this:
<input id="edit-title" class="form-text required" type="text" value="" size="60" name="title" maxlength="128"/>then try this URL:
http://www.example.com/node/add/content?edit[title]=Automatic filled in title
CCK
CCK fields are a bit more complicated:
<input id="edit-field-office-0-node-name" class="form-text form-autocomplete" type="text" value="" size="60" name="field_office[0][node_name]" maxlength="128" autocomplete="OFF"/>The key is to put this in the edit[] array nested, like this:
http://www.example.com/node/add/content?edit[field_office][0][node_name]=AL-235
Another example:
<textarea id="edit-field-content-0-value" class="form-textarea resizable processed" name="field_content[0][value]" rows="10"
cols="60"/>would be:
http://www.example.com/node/add/content?edit[field_content][0][value]=A long text string
and, again, for non-clean URLs, it's:
http://www.example.com?q=node/add/content&edit[field_content][0][value]=A long text string
Special cases
Body fields
Body fields are different. Though their HTML entity looks like this:
<textarea id="edit-body" class="form-textarea resizable processed" name="body" rows="20" cols="60"/>You can't just take the name "body," throw it into a edit[body] and expect it to work. Drupal wraps the body field into a "body_filter" array when it gets processed. So, for body fields in Drupal 5, a URL like:
http://www.example.com/node/add/content?edit[body_filter][body]=This is the body
ought to do the trick. And for Drupal 6 this URL should work:
http://www.example.com/node/add/content?edit[body_field][body]=This is the body
Escaping special characters
Some characters can't be put into URLs. Spaces, for example, work mostly, but occasionally they'll have to be replaced with the string %20. This is known as "percent encoding." Wikipedia has a partial list of percent codes at:
http://en.wikipedia.org/wiki/Percent-encoding
If you're having trouble getting content into field names, or are getting 'page not found' errors from Drupal, you should check to ensure that illegal characters are properly encoded.
