Ubercart 3 - Boton multicompra

Buenas tardes Foro,

      Soy novato en Drupal y estoy intentando migrar el proceso de multicompra existente en un Drupal 6.x + Ubercart 2.x a Drupal 7.x + Ubercart 3.x.

      Realize la migración de core Drupal y modulos Ubercart sin problemas.

      El problema vino con el botón "Add to cart" ya que la manera de construir el catálogo a cambiado de formulario tipo tabla o grid con hook_form() a views 3.x.

      Ello hace que en el módulo uc_catalog se llama a una view  a través del hook_browse() y en el módulo uc_product, si se habilita en dicha view el campo "Add to cart" cree un form con el hook_forms() para cada producto de la subcategoría.

      A través de una variable global guardo cada form_id generado por el hook_forms() y aquí es donde surge el problema, ¿ como recuperar a través del form_id los valores de los formularios  ? Llevo 1 semana buscando por la API pero no he sabido encontrar la manera.

      Como opciones del botón "Submit" he pensado:

         Opción 1: Modificar la funcionalidad del hook_form_submit del módulo uc_product

         Opción 2: Añadir un nuevo "button" al hook_browse del módulo uc_catalog.

         Opción 3: Craer un único form para todos los productos de una subcategoría ( cosa que al ser novat en Drupal veo bastante difícil).

      Aqui les indico el código version Ubercart 2.x:

function uc_catalog_product_table_form($form_state, $products) {
  $form = array();
  $enabled = uc_product_field_enabled();

  foreach ($products as $key => $value) {
    $node = node_load($value);
    if ($enabled['image']) {
      if (module_exists('imagecache')) {
        if (($field = variable_get('uc_image_'. $node->type, '')) && isset($node->$field) && file_exists($node->{$field}[0]['filepath'])) {
          $image = $node->{$field}[0];
          $form['image_'. $node->nid] = array(
            '#type' => 'markup',
            '#value' => l(theme('imagecache', 'product_list', $image['filepath'], $image['alt'], $image['title']), 'node/'. $node->nid, array('html' => TRUE)),
          );
        }
        else {
          $form['image_'. $node->nid] = array(
            '#tyype' => 'markup',
            '#value' => t('n/a'),
          );
        }
      }
    }
    $form['name_'. $node->nid] = array(
      '#type' => 'markup',
      '#value' => l($node->title, 'node/'. $node->nid),
    );
    $context['subject'] = array('node' => $node);
    $options = array('label' => FALSE);
    if ($enabled['list_price']) {
      $context['class'][1] = 'list';
      $context['field'] = 'list_price';
      $form['list_price_'. $node->nid] = array(
        '#type' => 'markup',
        '#value' => uc_price($node->list_price, $context, $options),
      );
    }
    if ($enabled['sell_price']) {
      $context['class'][1] = 'sell';
      $context['field'] = 'sell_price';
      $form['price_'. $node->nid] = array(
        '#type' => 'markup',
        '#value' => uc_price($node->sell_price, $context, $options),
      );
    }
    $form['num_items_'. $node->nid] = array(
      '#type' => 'textfield',
      '#size' => '10',
      '#default_value' => 0,
    );
  }
  $form['#products'] = $products;

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('add to cart'),
  );

  return $form;
}

 

      Aqui les indico el código version Ubercart 3.x:

           

/**
 * Shows the catalog page of the given category.
 */
function uc_catalog_browse($tid = 0) {
  global $uc_catalog_total_products;
  global $myforms;
  $url = 'http://virtelix.cat';
  $build = array();
  $vw = array();
  if ($terms = views_get_view('uc_catalog_terms')) {
    $build['terms'] = array(
      '#markup' => $terms->preview('default', array($tid)),
    );
  }
  if ($products = views_get_view('uccatalogform')) {
    $display = variable_get('uc_catalog_display', 'catalog');
    // Force the breadcrumb path to this page.
    $products->override_path = 'catalog';
    $build['products'] = array(
      '#markup' => $products->execute_display($display, array($tid)),
    );
  }

  return $build;

}

Gracias de antemano.