function ds_render_content in Display Suite 6.3
Same name and namespace in other branches
- 6 ds.module \ds_render_content()
- 6.2 ds.module \ds_render_content()
Render content for an object.
Parameters
string $key: A key for the object
stdClass $object : The object to manipulate.
string $module : The module that is requesting.
array $vars : The variables required for rendering.
string $theme_function : The theming function for a field.
2 calls to ds_render_content()
- ds_render in includes/
ds.api.inc - API function to return rendered content for an item
- views_plugin_ds_fields_view::ds_fields_render in views/
views_plugin_ds_fields_view.inc - Render the fields.
File
- includes/
ds.api.inc, line 210 - API functions for building and rendering displays
Code
function ds_render_content(&$object, $module, $vars, $theme_function = DS_DEFAULT_THEME_FIELD) {
if (!isset($object->layout)) {
$object->layout = DS_DEFAULT_LAYOUT;
}
$display
->getLayout($object->layout);
// Sort regions to get them in the right order for rendering
$display
->assignActiveRegions($vars['regions']);
// Build mode for this object
$display->build_mode = $object->build_mode;
// API info for this module and type. This doesn't cost a lot
// since it will be cached already in ds_build_fields_and_regions().
$display->api_info = ds_api_info($module, $object->type);
// Display settings for this module and object.
$display->display_settings = ds_get_settings($module, $object->type, $display->build_mode);
$display->region_styles = ds_default_value($display->display_settings, 'region_styles');
// Iterate over the active regions to build the display object
$count = 0;
foreach ($display->regions as $region_name => $region) {
if ($region['#hidden'] == FALSE) {
// Initialise the region with default values
$display
->regionSetup($region_name);
// Order region fields by weight
$display
->regionOrderFields($region_name);
// Loop through fields and extract them from the passed-in object
foreach ($display->regions[$region_name]['#field_weights'] as $key => $weight) {
/**
* Preprocess some field content
*/
switch ($object->ds_fields[$key]['field_type']) {
case DS_FIELD_TYPE_PREPROCESS:
if (!empty($object->ds_fields[$key]['preprocess_settings']['key'])) {
$object->ds_fields[$key]['content'] = $vars[$key][$object->preprocess_fields[$key]['key']];
}
else {
$object->ds_fields[$key]['content'] = $vars[$key];
}
break;
case DS_FIELD_TYPE_IGNORE:
$object->ds_fields[$key]['content'] = isset($object->content[$key]['#value']) ? $object->content[$key]['#value'] : '';
break;
}
/**
* Choose a field rendering pipeline based on the type
*
* Groups get content and render within wrapper functions.
* Fields get content then call the renderer directly.
*/
switch ($object->ds_fields[$key]['field_type']) {
case DS_FIELD_TYPE_GROUP:
$display->regions[$region_name][$key] = ds_render_group($object, $key, $vars);
break;
case DS_FIELD_TYPE_MULTIGROUP:
$display->regions[$region_name][$key] = ds_render_multigroup($object, $key, $vars);
break;
default:
// Set content for this item
$object->ds_fields[$key]['content'] = ds_get_content($object->ds_fields[$key], $vars, $key);
$display->regions[$region_name][$key] = ds_render_item($object->ds_fields[$key]);
break;
}
// Tabs are unsupported for the time being. Warn.
if (!empty($object->ds_fields[$key]['theme'])) {
if ($object->ds_fields[$key]['theme'] == 'ds_tabs') {
drupal_set_message('This build mode use Tabs, which are currently unsupported. Please select a different formatter.');
}
}
}
}
}
// Add field content to all regions
$display
->regionsAddContent();
// Plugins.
ds_plugins_process($display, $object, $vars);
// Add classes based on regions.
if ($display
->regionIsActive('middle')) {
$display->regions['middle']['#field_content'] = '<div class="' . $display->api_info['module'] . '-region-middle">' . $display->regions['middle']['#field_content'] . '</div>';
$middle_class = $module . '-no-sidebars';
if ($display
->regionIsActive('left') && $display
->regionIsActive('right')) {
$middle_class = $module . '-two-sidebars';
}
elseif ($display
->regionIsActive('left')) {
$middle_class = $module . '-one-sidebar ' . $module . '-sidebar-left';
}
elseif ($display
->regionIsActive('right')) {
$middle_class = $module . '-one-sidebar ' . $module . '-sidebar-right';
}
$display
->regionAttr('middle', 'class', $middle_class);
$display
->regionAttr('middle', 'class', $display->api_info['module'] . '-region-middle-wrapper');
$display
->regionRemoveAttr('middle', 'class', $display->api_info['module'] . '-region-middle');
}
// Clean up regions ready for rendering
$display
->regionsRenderAll();
// Theme the regions with their content.
$display
->displayFinalise();
$display
->displayRender();
return $display
->content();
}