Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
<?php
/**
* This file will demonstrate a method to export fields to code.
* You can use this to easily create fields using the UI, export to code
* and then use in a custom module. Upon installation of the module
* your fields and instances will already be set up.
*/
// Create the fields you want using the Drupal UI.
// On the same site, go to example.com/devel/php
// Paste the following code into the "PHP code to execute" textbox.
// Set the first 3 variables and then click execute.
//==============================================================================
// Set the 3 variables below.
$entity_type = 'node';
$field_name = 'body';
$bundle_name = 'article';
$info_config = field_info_field($field_name);
$info_instance = field_info_instance($entity_type, $field_name, $bundle_name);
unset($info_config['id']);
unset($info_instance['id'], $info_instance['field_id']);
include_once DRUPAL_ROOT . '/includes/utility.inc';
$output = "\$fields['" . $field_name . "'] = " . drupal_var_export($info_config) . ";\n";
$output .= "\$instances['" . $field_name . "'] = " . drupal_var_export($info_instance) . ";";
drupal_set_message("<textarea rows=30 style=\"width: 100%;\">" . $output . '</textarea>');
//==============================================================================
// You will get 2 arrays, something like this, but a lot longer.
$fields['field_some_field'] = array(
'properties of the field'
);
$instances['field_some_field'] = array(
'properties of the instance'
);
// Add the following to your .install file.
// Replace all instances of mymodule with actual module name.
// Paste the code from the devel ouput into the _mymodule_field_data and
// _mymodule_instance_data, as noted in the respective functions below.
// You can do this for as many fields as you like, just put all the $fields
// arrays in the _mymodule_field_data function and all the $instances in the
// _mymodule_instance_data function.
//==============================================================================
/**
* Implements hook_install().
* Perform module setup tasks.
*/
function mymodule_install() {
// Create all the fields we are adding to our entity type.
// http://api.drupal.org/api/function/field_create_field/7
foreach (_mymodule_field_data() as $field) {
field_create_field($field);
}
// Create all the instances for our fields.
// http://api.drupal.org/api/function/field_create_instance/7
foreach (_mymodule_instance_data() as $instance) {
field_create_instance($instance);
}
}
// Create the array of information about the fields we want to create.
function _mymodule_field_data() {
$fields = array();
// Paste $fields data from devel ouput here.
return $fields;
}
// Create the array of information about the instances we want to create.
function _mymodule_instance_data() {
$instances = array();
// Paste $instances data from devel output here.
return $instances;
}
//==============================================================================
// And if you want to uninstall the fields, instances and all the data contained
// within, when the module is uninstalled, add the following code. I'm not sure
// what the best practice is on this one, since instances of a field created
// by a custom module could be used to created instances of the field on other
// entity types. If you uninstall this module you would lose all information.
// Currently I am only using this for development purposes and will probably not
// include it in production.
//==============================================================================
/**
* Implements hook_uninstall().
* Remove any information that the module sets.
*/
function mymodule_uninstall() {
foreach (_mymodule_field_data() as $field_name => $properties) {
field_delete_field($field_name);
}
field_purge_batch(1000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.