Drupal ecommerce: comentarios en el checkout

En este post explico como agregar un campo de texto en el proceso de compra de una tienda programada con Drupal Ecommerce, puede servir para que durante el proceso de compra el cliente pueda dejar un cliente que luego se puede leer cuando se esta procesando el pedido. Una forma de comunicación entre el cliente y los dueños de la tienda.

Lo primero es instalar instalar el módulo Ecommerce Fieldgroup Panes. Su autor define muy bien lo que hace el módulo:

This module creates for each field group of the order entity a new checkout pane. These panes can be activated or deactivated as usual.

Una vez activado el módulo Drupal Ecommerce Fieldgroup Panes lo que hacemos es crear el crear un módulo, en este ejemplo sería mymodule

En el archivo mymodule.module inicializamos el hook_ctools_plugin_api para cargar el fieldgroup.

<?php
/**
 * Implements hook_ctools_plugin_api().
 */
function mymodule_ctools_plugin_api($module = NULL, $api = NULL) {
  if (
$module == "field_group" && $api == "field_group") {
    return array(
"version" => "1");
  }
}

?>

Creamos el archivo mymodule.field_group.inc

<?php

/**
 * Implements hook_field_group_info().
 */
function mymodule_field_group_info() {
 
$export = array();

  $field_group = new stdClass();
 
$field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */
 
$field_group->api_version = 1;
 
$field_group->identifier = 'group_commerce_comments|commerce_order|commerce_order|form';
 
$field_group->group_name = 'group_commerce_comments';
 
$field_group->entity_type = 'commerce_order';
 
$field_group->bundle = 'commerce_order';
 
$field_group->mode = 'form';
 
$field_group->parent_name = '';
 
$field_group->data['label'] = 'Group comments';
 
$field_group->data['weight'] =  10;
 
$field_group->data['format_type'] = 'div';
 
$field_group->data['children'] = array('field_commerce_coment');
 
$field_group->data['format_settings'] = array(
   
'formatter' => 'open',
   
'instance_settings' => array(
   
'description' => '',
     
'show_label' => 0,
     
'label_element' => 'h3',
     
'effect' => 'none',
     
'speed' => 'fast',
     
'classes' => 'group-prueba field-group-div',
     
'required_fields' => 0,
     
'id' => '',
      ),
    );
 
 
$export['group_commerce_comments|commerce_order|commerce_order|form'] = $field_group;

  return $export;
}

?>

Ahora creamos el campo de texto, la creacción del campo la llevamos a cabo durante la instalación del módulo mymodule.

<?php
/**
 * Implements hook_enable().
 */
function mymodule_enable() {

if(!field_info_field('field_commerce_comment')) {

  $field_bases = array(
   
'active' => 1,
   
'cardinality' => 1,
   
'deleted' => 0,
   
'entity_types' => array(),
   
'field_name' => 'field_commerce_comment',
   
'foreign keys' => array(
     
'format' => array(
       
'columns' => array(
         
'format' => 'format',
        ),
       
'table' => 'filter_format',
      ),
    ),
   
'indexes' => array(
     
'format' => array(
       
0 => 'format',
      ),
    ),
   
'locked' => 0,
   
'module' => 'text',
   
'settings' => array(),
   
'translatable' => 0,
   
'type' => 'text_long',
  );

  field_create_field ($field_bases);

  $field_instances = array(
   
'bundle' => 'commerce_order',
   
'default_value' => NULL,
   
'deleted' => 0,
   
'description' => '',
   
'display' => array(
     
'default' => array(
       
'label' => 'above',
       
'module' => 'text',
       
'settings' => array(
         
'field_multiple_limit' => -1,
         
'field_multiple_limit_offset' => 0,
        ),
       
'type' => 'text_default',
       
'weight' => -2,
      ),
    ),
   
'entity_type' => 'commerce_order',
   
'field_name' => 'field_commerce_comment',
   
'label' => 'Tell us',
   
'required' => 0,
   
'settings' => array(
     
'text_processing' => 1,
     
'user_register_form' => FALSE,
    ),
   
'widget' => array(
     
'active' => 1,
     
'module' => 'text',
     
'settings' => array(
       
'rows' => 10,
      ),
     
'type' => 'text_textarea',
     
'weight' => 7,
    ),
  );

  field_create_instance($field_instances);

  // Translatables
  // Included for use with string extractors like potx.
 
t('Billing information');
 
t('Coupon');
 
t('Discount reference');
 
t('Line items');
 
t('Order total');
 
t('Shipping information');
 
t('Tell us');

  }
}
?>

Con todo este código tendríamos creado el fieldgroup y el field para exponerlo en proceso de pago de Drupal Ecommerce. Ahora toca configurar su posición y visibilidad en el proceso de Checkout, para ello agregamos en el archivo mymodule.module

<?php
/**
 * hook_commerce_checkout_pane_info_alter(&$checkout_panes)
 */

function mymodule_commerce_checkout_pane_info_alter(&$checkout_panes) {

  if(isset($checkout_panes['commerce_fieldgroup_pane__group_commerce_comments'])) {
   
//define la visibilidad del field group.
   
$checkout_panes['commerce_fieldgroup_pane__group_commerce_comments']['enabled'] = 1;
   
define la posición del field group.
   
$checkout_panes['commerce_fieldgroup_pane__group_commerce_comments']['weight'] = -17;
  }
}
?>

Y todo esto viene porque la última parte, la de configurar la visibilidad del fieldgroup en el proceso de pago (checkout) no he encontrado de como ser exportado en features y también porque por algún motivo a la hora de exporta el fieldgroud mediante features no se exportaba correctamente, así que mirando como exportaba features tanto los fields como el fieldgroup decidí montar este módulo.