function ds_render_content in Display Suite 6.2
Same name and namespace in other branches
- 6.3 includes/ds.api.inc \ds_render_content()
- 6 ds.module \ds_render_content()
Render content for an object.
Parameters
object $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.
Return value
mixed Result of the render.
Deprecated
This function is a builder, use the statically cached ds_render
2 calls to ds_render_content()
- ds_render in ./
ds.module - 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
- ./
ds.module, line 573 - Core functions for the Display Suite module.
Code
function ds_render_content(&$object, $module, $vars, $theme_function = DS_DEFAULT_THEME_FIELD) {
/*
* Basic object set up
*/
// Object to hold our complete rendered object.
$object_display = new stdClass();
// Sort regions to get them in the right order for rendering.
$object_display->active_regions = array();
$object_display->all_regions = ds_regions('all', TRUE);
foreach ($object_display->all_regions as $region_name => $region) {
if (isset($vars['regions'][$region_name]) && !empty($vars['regions'][$region_name])) {
$object_display->active_regions[$region_name] = $vars['regions'][$region_name];
}
}
// Only themed regions.
$object_display->themed_regions = array();
// Classes for regions.
$object_display->region_classes = array();
// Build mode for this object.
$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().
$object_display->api_info = ds_api_info($module, $object->type);
// Display settings for this module and object.
$object_display->display_settings = ds_get_settings($module, $object->type, $object->build_mode);
$object_display->region_styles = ds_default_value($object_display->display_settings, 'region_styles');
/*
* Give field types an opportunity to change settings before we sort groups
*/
foreach ($object->ds_fields as $key => $field) {
switch ($field['field_type']) {
case DS_FIELD_TYPE_PREPROCESS:
if (!empty($field['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;
}
}
/*
* Pack groups
*/
if (!empty($object->ds_groups)) {
foreach ($object->ds_groups as $group_key => $group) {
foreach ($group as $field_key => $field) {
$object->ds_fields[$group_key]['fields'][$field_key] = $object->ds_fields[$field_key];
unset($object->ds_fields[$field_key]);
}
}
}
/*
* Iterate over the active regions to build the display object
*
* Instead of iterating over groups first, we iterate over active regions
* and build groups only when required.
*/
$count = 0;
foreach (array_keys($object_display->active_regions) as $region_name) {
$region_fields = array();
// Loop through all fields after ordering on weight.
asort($object_display->active_regions[$region_name]);
foreach (array_keys($object_display->active_regions[$region_name]) as $key) {
$region_fields[$key] = $object->ds_fields[$key];
/*
* 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:
$region_fields[$key]['rendered'] = ds_render_group($object, $key, $vars);
break;
case DS_FIELD_TYPE_MULTIGROUP:
$region_fields[$key]['rendered'] = 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);
$region_fields[$key]['rendered'] = ds_render_item($object->ds_fields[$key]);
break;
}
// Support for tabs. We need to create an additional field and unset
// the existing group field.
if (!empty($object->ds_fields[$key]['theme'])) {
if ($object->ds_fields[$key]['theme'] == 'ds_tabs') {
$object_display->active_regions[$region_name]['tab_' . $region_name] = $object->ds_fields[$key]['weight'];
$region_fields['tab_' . $region_name] = array(
'tab' => TRUE,
'name' => $region_name,
'fields' => array(
$object->ds_fields[$key]['weight'] => $object->ds_fields[$key],
),
);
$region_fields['tab_' . $region_name]['fields'][$object->ds_fields[$key]['weight']]['content'] = $object->ds_fields[$key]['rendered'];
unset($object->ds_fields[$key]);
unset($region_fields[$key]);
}
}
}
// Store content from a region and add classes if necessary.
if (is_array($region_fields) && !empty($region_fields)) {
if ($region_name == 'left' || $region_name == 'right') {
$object_display->region_classes[$region_name] = $region_name;
}
$style = isset($object_display->region_styles[$region_name]) ? ' ' . $object_display->region_styles[$region_name] : '';
$rendered_region = '';
foreach ($region_fields as $region_field) {
if (!empty($region_field['rendered'])) {
$rendered_region .= $region_field['rendered'];
}
}
$object_display->themed_regions[$region_name] = array(
'content' => $rendered_region,
'extra_class' => $style,
'count' => $count,
'fields' => $region_fields,
'hidden' => FALSE,
);
if (empty($rendered_region)) {
$object_display->themed_regions[$region_name]['hidden'] = TRUE;
}
}
$count++;
}
/*
* Do some final configuration and pass the complete display object off to
* theme_ds_regions for final rendering.
*/
// Plugins.
ds_plugins_process($object_display, $object, $vars);
// Cleanup:
// Remove any regions which are hidden before rendering.
foreach ($object_display->themed_regions as $key => $region) {
if ($region['hidden'] == TRUE) {
unset($object_display->themed_regions[$key]);
}
}
// Add classes based on regions.
if (isset($object_display->themed_regions['middle'])) {
$middle_class = $module . '-no-sidebars';
if (isset($object_display->themed_regions['left']) && isset($object_display->themed_regions['right'])) {
$middle_class = $module . '-two-sidebars';
}
elseif (isset($object_display->themed_regions['left'])) {
$middle_class = $module . '-one-sidebar ' . $module . '-sidebar-left';
}
elseif (isset($object_display->themed_regions['right'])) {
$middle_class = $module . '-one-sidebar ' . $module . '-sidebar-right';
}
$object_display->themed_regions['middle']['extra_class'] .= ' ' . $middle_class;
}
// Theme the regions with their content.
return theme(DS_DEFAULT_THEME_REGIONS, $object_display, $module);
}