diff --git a/metatag_views_field/includes/views/handlers/views_handler_field_node_metatag.inc b/metatag_views_field/includes/views/handlers/views_handler_field_node_metatag.inc new file mode 100644 index 0000000..2639f8d --- /dev/null +++ b/metatag_views_field/includes/views/handlers/views_handler_field_node_metatag.inc @@ -0,0 +1,68 @@ + FALSE); + return $options; + } + + /** + * Implements parent::options_form(). + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $form['data_key'] = array( + '#title' => t('Metatag Type'), + '#type' => 'select', + '#options' => $this->dataKeyOptions(), + '#required' => TRUE, + '#default_value' => $this->options['data_key'], + '#description' => t('Select the metatag type to be used for this field.'), + '#weight' => 4, + ); + } + + /** + * Implements parent::render(). + */ + function render($values) { + $value = $values->{$this->field_alias}; + $data = unserialize($value); + $output = !empty($data[$this->options['data_key']]) ? $data[$this->options['data_key']]['value'] : ''; + return $output; + } + + /** + * Build an array of available metatag types for select list. + * + * @return array + */ + function dataKeyOptions() { + $options = array(); + $info = metatag_get_info(); + + foreach ($info['tags'] as $key => $tag) { + // Group metatag select options by parent if exists. + if (!empty($tag['group'])) { + $options[$info['groups'][$tag['group']]['label']][$key] = $tag['label'] . ' (' . $key . ')'; + } + else { + $options[$key] = $tag['label'] . ' (' . $key . ')'; + } + } + return $options; + } +} diff --git a/metatag_views_field/includes/views/metatag_views_field.views.inc b/metatag_views_field/includes/views/metatag_views_field.views.inc new file mode 100644 index 0000000..ddabb3a --- /dev/null +++ b/metatag_views_field/includes/views/metatag_views_field.views.inc @@ -0,0 +1,38 @@ + array( + 'left_field' => 'nid', + 'field' => 'entity_id', + 'extra' => array( + array( + 'left_field' => 'vid', + 'field' => 'revision_id', + ), + array( + 'field' => 'entity_type', + 'value' => 'node', + 'operator' => '=', + ), + ), + ), + ); + + $data['metatag']['data'] = array( + 'title' => t('Metatag Value'), + 'help' => t('The metatag value if not using defaults.'), + 'field' => array( + 'field' => 'data', + 'group' => t('Metatag'), + 'handler' => 'views_handler_field_node_metatag', + ), + ); + + return $data; +} diff --git a/metatag_views_field/metatag_views_field.info b/metatag_views_field/metatag_views_field.info new file mode 100644 index 0000000..d69c0bb --- /dev/null +++ b/metatag_views_field/metatag_views_field.info @@ -0,0 +1,8 @@ +name = Metatag views field +description = Display metatags in views. Display it as Views field. +core = 7.x +package = SEO +dependencies[] = metatag +dependencies[] = views + +files[] = includes/views/handlers/views_handler_field_node_metatag.inc diff --git a/metatag_views_field/metatag_views_field.module b/metatag_views_field/metatag_views_field.module new file mode 100644 index 0000000..ed81d57 --- /dev/null +++ b/metatag_views_field/metatag_views_field.module @@ -0,0 +1,15 @@ + 3, + 'path' => drupal_get_path('module', 'metatag_views_field') . '/includes/views', + ); +}