entities – Reorganización de subcampos con el módulo de campo de dirección

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:

  1. hook_field_widget_form_alter ()
  2. 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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım