protected function getFieldDefault(NodeInterface $node, $entityType, $bundle, $fieldName, Context $context) { /* @var $node ViewNode */ $entityType = $node->getEntityType(); $bundle = $node->getBundle(); $default = array('type' => 'hidden', 'label' => 'hidden', 'settings' => array()); if (!($field = field_info_field($fieldName))) { // @todo Should we warn? This is surely an extra field. return $default; } if (!($field = field_info_field_types($field['type']))) { $context->logError("%s: %s field type does not exist", $node->getPath(), $field['types']); return $default; } $formatter = null; if (!empty($field['default_formatter'])) { $formatter = $field['default_formatter']; if (!field_info_formatter_types($formatter)) { $context->logWarning(sprintf("%s: field %s defines non existing default formatter: %s", $node->getPath(), $fieldName, $formatter)); $formatter = null; } } if ($formatter) { $default = array('type' => $formatter, 'label' => 'hidden', 'settings' => field_info_formatter_settings($formatter)); } return $default; }
/** * Set formatter type and update defaults accordingly. * * @see _field_write_instance(). */ public function setFormatter($view_mode, $formatter_name, $settings = array()) { $this->display[$view_mode] = $settings; $display =& $this->display[$view_mode]; $display += array('label' => 'above', 'type' => $formatter_name, 'settings' => array()); if ($formatter_name != 'hidden') { $formatter_type = \field_info_formatter_types($display['type']); $display['module'] = $formatter_type['module']; $display['settings'] += \field_info_formatter_settings($display['type']); } }
/** * Constructor for the Add to cart form. Provide $nid as the id of the * product display node. Other optional arguments are product reference field * name, view mode of the product display node and language of the product * display node. If optional arguments are not provided, their default values * are assumed, which are "field_product", "default" and "en" respectively. * * @param int $nid * Product display node id. */ public function __construct($nid) { $args = func_get_args(); array_shift($args); $field_name = array_shift($args); $view_mode = array_shift($args); $language = array_shift($args); if (is_null($field_name)) { $field_name = 'field_product'; } if (is_null($view_mode)) { $view_mode = 'default'; } if (is_null($language)) { $language = 'en'; } $node = node_load($nid); $instance = field_info_instance('node', $field_name, $node->type); $display = field_get_display($instance, $view_mode, $node); $settings = array_merge(field_info_formatter_settings($display['type']), $display['settings']); $field_product = field_get_items('node', $node, $field_name); $product_id = $field_product[0]['product_id']; $products = commerce_product_load_multiple(array($product_id)); $type = !empty($settings['line_item_type']) ? $settings['line_item_type'] : 'product'; $line_item = commerce_product_line_item_new(commerce_product_reference_default_product($products), $settings['default_quantity'], 0, array(), $type); $line_item->data['context']['product_ids'] = array_keys($products); $line_item->data['context']['add_to_cart_combine'] = !empty($settings['combine']); $line_item->data['context']['show_single_product_attributes'] = !empty($settings['show_single_product_attributes']); $cart_context = array('entity_type' => 'node', 'entity_id' => $nid, 'display' => 'default', 'language' => $language); $cart_context['class_prefix'] = $cart_context['entity_type'] . '-' . $nid; $cart_context['view_mode'] = $cart_context['entity_type'] . '_' . $view_mode; $entity_uri = entity_uri($cart_context['entity_type'], $node); $arguments = array('form_id' => commerce_cart_add_to_cart_form_id(array($product_id)), 'line_item' => $line_item, 'show_quantity' => $settings['show_quantity']); // Add the display path and referencing entity data to the line item. if (!empty($entity_uri['path'])) { $arguments['line_item']->data['context']['display_path'] = $entity_uri['path']; } $arguments['line_item']->data['context']['entity'] = array('entity_type' => $cart_context['entity_type'], 'entity_id' => $cart_context['entity_id'], 'product_reference_field_name' => $field_name); // Update the product_ids variable to point to the entity data if we're // referencing multiple products. if (count($arguments['line_item']->data['context']['product_ids']) > 1) { $arguments['line_item']->data['context']['product_ids'] = 'entity'; } parent::__construct($arguments['form_id'], $arguments['line_item'], $arguments['show_quantity'], $cart_context); $this->cart_context = $cart_context; $this->arguments = $arguments; }
/** * Get the settings used by the block display. */ public function getBlockDisplaySettings() { $settings = variable_get(self::BLOCK_WIDGET_SETTINGS_KEY, NULL); if ($settings == NULL && $this->getBlockDisplayType() != self::WIDGET_TYPE_DISABLED) { $settings = field_info_formatter_settings($this->getBlockDisplayType()); } return $settings; }
function options_form(&$form, &$form_state) { parent::options_form($form, $form_state); module_load_include('inc', 'views', 'modules/field/views_handler_field_field'); $subfield = $this->field_info; $formatters = _field_view_formatter_options($subfield['type']); $column_names = array_keys($subfield['columns']); // If this is a multiple value field, add its options. if ($this->multiple) { $this->multiple_options_form($form, $form_state); } // No need to ask the user anything if the field has only one column. if (count($subfield['columns']) == 1) { $form['click_sort_column'] = array('#type' => 'value', '#value' => isset($column_names[0]) ? $column_names[0] : ''); } else { $form['click_sort_column'] = array('#type' => 'select', '#title' => t('Column used for click sorting'), '#options' => drupal_map_assoc($column_names), '#default_value' => $this->options['click_sort_column'], '#description' => t('Used by Style: Table to determine the actual column to click sort the field on. The default is usually fine.'), '#fieldset' => 'more'); } $form['type'] = array('#type' => 'select', '#title' => t('Formatter'), '#options' => $formatters, '#default_value' => $this->options['type'], '#ajax' => array('path' => views_ui_build_form_url($form_state)), '#submit' => array('views_ui_config_item_form_submit_temporary'), '#executes_submit_callback' => TRUE); $form['field_api_classes'] = array('#title' => t('Use field template'), '#type' => 'checkbox', '#default_value' => $this->options['field_api_classes'], '#description' => t('If checked, field api classes will be added using field.tpl.php (or equivalent). This is not recommended unless your CSS depends upon these classes. If not checked, template will not be used.'), '#fieldset' => 'style_settings', '#weight' => 20); if ($this->multiple) { $form['field_api_classes']['#description'] .= ' ' . t('Checking this option will cause the group Display Type and Separator values to be ignored.'); } // Get the currently selected formatter. $format = $this->options['type']; $formatter = field_info_formatter_types($format); $settings = $this->options['settings'] + field_info_formatter_settings($format); // Provide an instance array for hook_field_formatter_settings_form(). ctools_include('fields'); $this->instance = ctools_fields_fake_field_instance($this->definition['subfield_name'], '_custom', $formatter, $settings); // Store the settings in a '_custom' view mode. $this->instance['display']['_custom'] = array('type' => $format, 'settings' => $settings); // Get the settings form. $settings_form = array('#value' => array()); $function = $formatter['module'] . '_field_formatter_settings_form'; if (function_exists($function)) { $settings_form = $function($subfield, $this->instance, '_custom', $form, $form_state); } $form['settings'] = $settings_form; }