Skip to content

Instantly share code, notes, and snippets.

@DuaelFr
Created February 5, 2014 10:30
Show Gist options
  • Save DuaelFr/8820820 to your computer and use it in GitHub Desktop.
Save DuaelFr/8820820 to your computer and use it in GitHub Desktop.
Extra field with wrappers sample
<?php
/**
* Helper to prepare field renderable array for views extra fields.
*/
function _feature_commons_extra_field_view($field_name, $title, $entity, $view_mode, $langcode, $field_content, $access = TRUE, $entity_type = 'node') {
if (empty($field_content)) {
return '';
}
list($etid, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
$field = array(
'#theme' => 'field',
'#label_display' => empty($title) ? 'hidden' : 'above',
'#view_mode' => $view_mode,
'#language' => $langcode,
'#entity_type' => $entity_type,
'#bundle' => $bundle,
'#entity' => $entity,
'#field_name' => 'ef_' . $field_name,
'#field_type' => 'extra_field',
'#field_translatable' => FALSE,
'#object' => $entity,
'#formatter' => NULL,
'#title' => $title,
'#access' => $access,
'#items' => array(
0 => array(
'value' => $field_content,
'format' => NULL,
'safe_value' => $field_content,
),
),
0 => array(
'#markup' => $field_content,
),
);
if ($entity_type == 'node') {
$field['#node'] = $entity;
}
elseif ($entity_type == 'user') {
$field['#account'] = $entity;
}
if (is_array($field_content)) {
if (key($field_content) !== 0) {
$field_content = array($field_content);
}
foreach ($field_content as $delta => $element) {
$field[$delta] = $element;
$field['#items'][$delta]['value'] = $field['#items'][$delta]['safe_value'] = drupal_render($element);
}
}
return $field;
}
/**
* Implements hook_node_view().
*/
function feature_content_projects_node_view($node, $view_mode, $langcode) {
if ($node->type == 'project') {
$settings = field_extra_fields_get_display('node', $node->type, $view_mode);
if (!empty($settings['project_builder_logo']['visible'])) {
// Get the Builder's picture
$data = $wrapper->og_builder_ref->field_picture->value();
$field_content = theme('image_style', array(
'style_name' => 'project_builder',
'path' => $data['uri'],
));
$field_content = l($field_content, 'node/' . $wrapper->og_builder_ref->nid->value(), array('html' => TRUE));
$node->content['project_builder_logo'] = _feature_commons_extra_field_view('project_builder_logo', '', $node, $view_mode, $langcode, $field_content);
}
if (!empty($settings['project_manager']['visible'])) {
$manager = _feature_commons_group_get_manager('node', $node->type, $node->nid);
if (!empty($manager)) {
$elements = user_view($manager, 'include', $langcode);
$field_content = drupal_render($elements);
}
else {
$nid = reset(entity_get_id_by_uuid('node', array('4ae0b9cf-afdf-4f6b-b858-8222c1bd9d8b')));
$field_content = l('Devenir Responsable de ce Programme', 'node/' . $nid, array('query' => array('gid' => $node->nid)));
}
$node->content['project_manager'] = _feature_commons_extra_field_view('project_manager', '', $node, $view_mode, $langcode, $field_content);
}
if (!empty($settings['project_team_button']['visible'])) {
$field_content = l('Voir l\'équipe', 'node/' . $node->nid . '/team');
$node->content['project_team_button'] = _feature_commons_extra_field_view('project_team_button', '', $node, $view_mode, $langcode, $field_content);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment