Pregunta:
¿Hay alguna forma de reorganizar los campos dentro del widget con un gancho específico? ¿Debo usar hook_form_alter()
?
Para ser más específico, quiero poner el campo del país debajo del campo del código postal cuando utilizo el módulo Campo de dirección .
Respuesta:
Tengo dos soluciones para ello:
- hook_field_widget_form_alter ()
- Complemento de Ctools
Solución 1. hook_field_widget_form_alter ().
/**
* Implements hook_field_widget_form_alter().
*/
function MYMODULE_field_widget_form_alter(&$element, $form_state, $context) {
if(!empty($element['#addressfield'])) {
$element['country']['#weight'] = 100;
}
}
Utilice matrices $element
y $context
e implemente su propia declaración IF
. Puede encontrar toda la información sobre el campo y el usuario aquí.
Solución 2. Complemento de Ctools
Es posible con los complementos de ctools. Revise addressfield/plugins/format/
o https://drupal.org/project/addressfield_vn como ejemplo.
Simplemente agregue su complemento personalizado con la modificación del campo de dirección en 5 pasos:
Paso 1: Crea MYMODULE/plugins/format/
estructura de carpetas.
Paso 2: agregue el siguiente código a su archivo MYMODULE.module
:
/**
* Implements hook_ctools_plugin_directory().
*/
function MYMODULE_ctools_plugin_directory($module, $plugin) {
if ($module == 'addressfield') {
return 'plugins/' . $plugin;
}
}
/**
* Implements hook_ctools_plugin_type().
*/
function MYMODULE_ctools_plugin_type() {
$plugins['format'] = array(
'load themes' => TRUE,
);
return $plugins;
}
Paso 3: agregue el archivo con el código de modificación. Por ejemplo: MYMODULE/plugins/format/address-alter.inc
:
/** * @file * Move country field to the very end. */ $plugin = array( 'title' => t('Alter addressfield'), 'format callback' => 'MYMODULE_format_address_alter_country', 'type' => 'address', 'weight' => -80, ); /** * Format callback. * * @see CALLBACK_addressfield_format_callback() */ function MYMODULE_format_address_alter_country(&$format, $address, $context = array()) { // Move country field to the very end. $format['country']['#weight'] = 100; }
Paso 4: drush cc all
Paso 5: Habilite su complemento para el campo de dirección en la configuración de los campos del perfil del cliente. Por ejemplo, en /admin/commerce/customer-profiles/types/billing/fields/commerce_customer_address
En el ejemplo actual, todo el código de modificación estará dentro de la función MYMODULE_format_address_alter_country()
. Simplemente juegue con los pesos de sus campos y obtendrá la forma reorganizada.