function views_rss_yandex_realty_plugin_style_fields::map_rows in Views RSS: Yandex Elements 7
Map views row result to an RSS item.
Overrides views_rss_plugin_style_fields::map_rows
File
- views_rss_yandex_realty/
views/ views_rss_yandex_realty_plugin_style_fields.inc, line 130 - Extends the views_rss_plugin_style_fields class to provide RSS for Yandex.Realty.
Class
- views_rss_yandex_realty_plugin_style_fields
- @file Extends the views_rss_plugin_style_fields class to provide RSS for Yandex.Realty.
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();
$offer_elements = views_rss_get('yandex_realty_offer_elements');
foreach ($rendered as $id => $row) {
$item = $raw_item = array();
foreach ($offer_elements as $module => $module_item_elements) {
foreach (array_keys($module_item_elements) as $element) {
list($namespace, $element_name) = views_rss_extract_element_names($element, 'yandex_realty_offer');
// 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_yandex_realty().
if (isset($this->options['offer'][$namespace][$module][$element_name]) && isset($row[$this->options['offer'][$namespace][$module][$element_name]])) {
$item[$module][$element] = $row[$this->options['offer'][$namespace][$module][$element_name]];
}
elseif (isset($this->options['offer'][$namespace][$module][$element_name]) && substr($this->options['offer'][$namespace][$module][$element_name], 0, 24) == 'views_rss_yandex_realty_') {
$item[$module][$element] = $this->options['offer'][$namespace][$module][$element_name];
}
else {
$item[$module][$element] = NULL;
}
// Keep raw values too.
if (!empty($this->options['offer'][$namespace][$module][$element_name]) && !empty($raw[$id][$this->options['offer'][$namespace][$module][$element_name]])) {
$raw_item[$module][$element] = $raw[$id][$this->options['offer'][$namespace][$module][$element_name]];
}
}
}
$items[$id] = $item;
$raw_items[$id] = $raw_item;
}
$this->view->views_rss['raw_items'] = $raw_items;
return $items;
}