summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-12-07 05:09:58 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-12-07 05:09:58 +0000
commit28a17bc5bf058aa27eb6cc82b3e19521aae8fc9f (patch)
treef7c57d448a8c8a588b51e3b75132efaef0313534 /modules/field
parent731bc4fd232501e4ddf868c77a85bc14331af7a0 (diff)
downloadbrdo-28a17bc5bf058aa27eb6cc82b3e19521aae8fc9f.tar.gz
brdo-28a17bc5bf058aa27eb6cc82b3e19521aae8fc9f.tar.bz2
#990148 by chx, jhodgdon: Provide context to hook_field_attach_view_alter().
Diffstat (limited to 'modules/field')
-rw-r--r--modules/field/field.api.php10
-rw-r--r--modules/field/field.attach.inc1
-rw-r--r--modules/field/field.module1
-rw-r--r--modules/field/tests/field.test3
-rw-r--r--modules/field/tests/field_test.module9
5 files changed, 22 insertions, 2 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index 0b7b6787f..ed0d63fd1 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -1277,7 +1277,7 @@ function hook_field_attach_purge($entity_type, $entity, $field, $instance) {
}
/**
- * Perform alterations on field_attach_view().
+ * Perform alterations on field_attach_view() or field_view_field().
*
* This hook is invoked after the field module has performed the operation.
*
@@ -1287,7 +1287,13 @@ function hook_field_attach_purge($entity_type, $entity, $field, $instance) {
* An associative array containing:
* - entity_type: The type of $entity; for example, 'node' or 'user'.
* - entity: The entity with fields to render.
- * - view_mode: View mode, for example, 'full' or 'teaser'.
+ * - view_mode: View mode; for example, 'full' or 'teaser'.
+ * - display: Either a view mode string or an array of display settings. If
+ * this hook is being invoked from field_attach_view(), the 'display'
+ * element is set to the view mode string. If this hook is being invoked
+ * from field_view_field(), this element is set to the $display argument
+ * and the view_mode element is set to '_custom'. See field_view_field()
+ * for more information on what its $display argument contains.
* - language: The language code used for rendering.
*/
function hook_field_attach_view_alter(&$output, $context) {
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index 35c4cc57c..59c91f959 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -1166,6 +1166,7 @@ function field_attach_view($entity_type, $entity, $view_mode, $langcode = NULL)
'entity_type' => $entity_type,
'entity' => $entity,
'view_mode' => $view_mode,
+ 'display' => $view_mode,
'language' => $langcode,
);
drupal_alter('field_attach_view', $output, $context);
diff --git a/modules/field/field.module b/modules/field/field.module
index 68cfff68d..14f6c447d 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -705,6 +705,7 @@ function field_view_field($entity_type, $entity, $field_name, $display = array()
'entity_type' => $entity_type,
'entity' => $entity,
'view_mode' => '_custom',
+ 'display' => $display,
);
drupal_alter('field_attach_view', $result, $context);
diff --git a/modules/field/tests/field.test b/modules/field/tests/field.test
index 57c4837af..35be17d8a 100644
--- a/modules/field/tests/field.test
+++ b/modules/field/tests/field.test
@@ -1743,12 +1743,14 @@ class FieldDisplayAPITestCase extends FieldTestCase {
'type' => 'field_test_multiple',
'settings' => array(
'test_formatter_setting_multiple' => $this->randomName(),
+ 'alter' => TRUE,
),
);
$output = field_view_field('test_entity', $this->entity, $this->field_name, $display);
$this->drupalSetContent(drupal_render($output));
$setting = $display['settings']['test_formatter_setting_multiple'];
$this->assertNoText($this->label, t('Label was not displayed.'));
+ $this->assertText('field_test_field_attach_view_alter', t('Alter fired, display passed.'));
$array = array();
foreach ($this->values as $delta => $value) {
$array[] = $delta . ':' . $value['value'];
@@ -1768,6 +1770,7 @@ class FieldDisplayAPITestCase extends FieldTestCase {
$this->drupalSetContent($view);
$setting = $display['settings']['test_formatter_setting_additional'];
$this->assertNoText($this->label, t('Label was not displayed.'));
+ $this->assertNoText('field_test_field_attach_view_alter', t('Alter not fired.'));
foreach ($this->values as $delta => $value) {
$this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), t('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
}
diff --git a/modules/field/tests/field_test.module b/modules/field/tests/field_test.module
index 693e825a9..6e068fe33 100644
--- a/modules/field/tests/field_test.module
+++ b/modules/field/tests/field_test.module
@@ -235,3 +235,12 @@ function field_test_dummy_field_storage_query(EntityFieldQuery $query) {
function field_test_entity_label_callback($entity) {
return 'label callback ' . $entity->ftlabel;
}
+
+/**
+ * Implements hook_field_attach_view_alter().
+ */
+function field_test_field_attach_view_alter(&$output, $context) {
+ if (!empty($context['display']['settings']['alter'])) {
+ $output['test_field'][] = array('#markup' => 'field_test_field_attach_view_alter');
+ }
+}