function views_rss_plugin_style_fields::map_rows in Views RSS 6.2
Same name and namespace in other branches
- 7.2 views/views_rss_plugin_style_fields.inc \views_rss_plugin_style_fields::map_rows()
Map views row result to an RSS item.
File
- views/
views_rss_plugin_style_fields.inc, line 354 - Extends the view_plugin_style class to provide new RSS view style.
Class
- views_rss_plugin_style_fields
- @file Extends the view_plugin_style class to provide new RSS view style.
Code
function map_rows($rows) {
// Fields must be pre-rendered starting from version 2.3 of Views module.
$rendered = $raw = array();
$keys = array_keys($this->view->field);
foreach ($rows as $count => $row) {
$this->view->row_index = $count;
foreach ($keys as $id) {
$rendered[$count][$id] = $this->view->field[$id]
->theme($row);
// Also let's keep raw value for further processing.
$field_name = 'field_' . $id;
if (!empty($row->{$field_name})) {
$raw[$count][$id] = $row->{$field_name};
}
}
}
// Rewrite view rows to XML item rows.
$items = $raw_items = array();
$item_elements = views_rss_get('item_elements');
foreach ($rendered as $id => $row) {
$item = $raw_item = array();
foreach ($item_elements as $module => $module_item_elements) {
foreach (array_keys($module_item_elements) as $element) {
list($namespace, $element_name) = views_rss_extract_element_names($element, 'core');
// Assign values for all elements, not only those defined in view settings.
// If element value is not defined in view settings, let's just assign NULL.
// It will not be passed to final theme function anyway during processing
// taking place in template_preprocess_views_view_views_rss().
if (isset($this->options['item'][$namespace][$module][$element_name]) && isset($row[$this->options['item'][$namespace][$module][$element_name]])) {
$item[$module][$element] = $row[$this->options['item'][$namespace][$module][$element_name]];
}
else {
$item[$module][$element] = NULL;
}
// Keep raw values too.
if (!empty($this->options['item'][$namespace][$module][$element_name]) && !empty($raw[$id][$this->options['item'][$namespace][$module][$element_name]])) {
$raw_item[$module][$element] = $raw[$id][$this->options['item'][$namespace][$module][$element_name]];
}
}
}
$items[] = $item;
$raw_items[$id] = $raw_item;
}
$this->view->views_rss['raw_items'] = $raw_items;
return $items;
}