diff --git a/title.info b/title.info index a6f87fd..6010686 100644 --- a/title.info +++ b/title.info @@ -3,4 +3,5 @@ description = Replaces entity legacy fields with regular fields. core = 7.x package = Fields files[] = title.module +files[] = views/views_handler_title_field.inc files[] = tests/title.test diff --git a/title.module b/title.module index 8c7f078..2ba31e6 100644 --- a/title.module +++ b/title.module @@ -747,3 +747,13 @@ function title_field_replacement_hide_label($entity_type, $entity, &$variables, $variables[$key] = FALSE; } } + +/** + * Implements hook_views_api(). + */ +function title_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'title') . '/views', + ); +} diff --git a/views/title.views.inc b/views/title.views.inc new file mode 100644 index 0000000..f973d9f --- /dev/null +++ b/views/title.views.inc @@ -0,0 +1,20 @@ + $entity_info) { + $replacements = title_field_replacement_info($entity_type); + if ($replacements) { + foreach ($replacements as $replacement) { + $field = field_info_field($replacement['field']['field_name']); + $table = _field_sql_storage_tablename($field); + if (isset($data[$table][$field['field_name']])) { + $data[$table][$field['field_name']]['field']['handler'] = 'views_handler_title_field'; + } + } + } + } +} diff --git a/views/views_handler_title_field.inc b/views/views_handler_title_field.inc new file mode 100644 index 0000000..03516e9 --- /dev/null +++ b/views/views_handler_title_field.inc @@ -0,0 +1,50 @@ + isset($this->definition['link_to_entity default']) ? $this->definition['link_to_entity default'] : FALSE); + return $options; + + } + + /** + * Provide link to entity option. + */ + function options_form(&$form, &$form_state) { + $form['link_to_entity'] = array( + '#title' => t('Link this field to the original entity'), + '#description' => t("Enable to override this field's links."), + '#type' => 'checkbox', + '#default_value' => !empty($this->options['link_to_entity']), + ); + + parent::options_form($form, $form_state); + } + + function advanced_render($values) { + $this->original_values = $values; + return parent::advanced_render($values); + } + + function render_item($count, $item) { + if (!empty($this->options['link_to_entity'])) { + $values = $this->original_values; + $entity_type = $this->definition['entity_tables'][$this->base_table]; + $entity_info = entity_get_info($entity_type); + $key = $entity_info['entity keys']['id']; + if (!empty($values->_field_data[$key]['entity'])) { + $entity = $values->_field_data[$key]['entity']; + $uri = entity_uri($entity_type, $entity); + $this->options['alter']['make_link'] = TRUE; + $this->options['alter']['path'] = $uri['path']; + } + } + return parent::render_item($count, $item); + } +}