You are here

public function SearchApiMultiRowEntityView::options_form in Search API Multi-Index Searches 7

Provide a form for setting options.

Overrides views_plugin_row::options_form

File

views/row_entity_view.inc, line 72
Contains the SearchApiMultiRowEntityView class.

Class

SearchApiMultiRowEntityView
Plugin class for displaying Views results with entity_view.

Code

public function options_form(&$form, &$form_state) {
  parent::options_form($form, $form_state);
  $entity_info = entity_get_info();
  $options = array();
  foreach ($this->indexes['entity_types'] as $type => $indexes) {
    foreach ($entity_info[$type]['view modes'] as $view_mode => $view_mode_info) {
      $options[$type][$view_mode] = $view_mode_info['label'];
    }
  }
  $form['view_mode'] = array(
    '#tree' => TRUE,
  );
  foreach ($options as $entity_type => $modes) {
    if (count($modes) > 1) {
      $form['view_mode'][$entity_type] = array(
        '#type' => 'select',
        '#options' => $modes,
        '#title' => t('View mode for @entity_name entities', array(
          '@entity_name' => $entity_info[$entity_type]['label'],
        )),
        '#description' => format_plural(count($this->indexes['entity_types'][$entity_type]), 'This view mode will be used to render entities from the following index: %indexes', 'This view mode will be used to render entities from the following indexes: %indexes', array(
          '%indexes' => implode(', ', $this->indexes['entity_types'][$entity_type]),
        )),
      );
      if (!empty($this->options['view_mode'][$entity_type])) {
        $form['view_mode'][$entity_type]['#default_value'] = $this->options['view_mode'][$entity_type];
      }
    }
    else {

      // For entity types that only have one view mode, there's no meaningful
      // choice to make, so just expose it to let the user know about it.
      $form['view_mode']["{$entity_type}__description"] = array(
        '#type' => 'item',
        '#title' => t('View mode for @entity_name entities', array(
          '@entity_name' => $entity_info[$entity_type]['label'],
        )),
        '#description' => reset($modes),
      );
      $form['view_mode'][$entity_type] = array(
        '#type' => 'value',
        '#value' => key($modes),
      );
    }
  }
  if (count($this->indexes['incompatibles'])) {
    $form['incompatibles'] = array(
      '#type' => 'item',
      '#title' => 'Incompatible indexes',
      '#description' => t("The following indexes are not based on entities, and can't be used with this row style: %indexes. Items from those indexes will be skipped during rendering.", array(
        '%indexes' => implode(', ', $this->indexes['incompatibles']),
      )),
    );
  }
  return $form;
}