You are here

function commerce_product_reference_field_widget_form in Commerce Core 7

Implements hook_field_widget_form().

Used to define the form element for custom widgets.

File

modules/product_reference/commerce_product_reference.module, line 1001
Defines a field type for referencing products from other entities.

Code

function commerce_product_reference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {

  // Define the autocomplete textfield for products.
  if ($instance['widget']['type'] == 'commerce_product_reference_autocomplete') {
    $product_ids = array();
    $skus = array();

    // Build an array of product IDs from this field's values.
    foreach ($items as $item) {
      $product_ids[] = $item['product_id'];
    }

    // Load those products and loop through them to extract their SKUs.
    $products = commerce_product_load_multiple($product_ids);
    foreach ($product_ids as $product_id) {
      if (!empty($products[$product_id])) {
        $skus[] = $products[$product_id]->sku;
      }
    }
    return $element + array(
      '#type' => 'textfield',
      '#default_value' => implode(', ', $skus),
      '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $instance['entity_type'] . '/' . $field['field_name'] . '/' . $instance['bundle'],
      '#size' => $instance['widget']['settings']['size'],
      '#maxlength' => 2048,
      '#element_validate' => array(
        'commerce_product_reference_autocomplete_validate',
      ),
    );
  }
  elseif ($instance['widget']['type'] == 'commerce_product_reference_hidden') {
    return array();
  }
}