RSS-Feed eigene Variblen defenieren
am 05.12.2012 - 10:33 Uhr in
Hallo,
ich habe noch eine Problem mit den generieren der RSS-Feeds.
Dieses Problem ist uns erst ab der Version 7.16 auf. In früheren hat es Problemlos geklappt
In den RSS-Feeds-Templates sind eigene Variablen definiert. Um die Variablen mit Werten zu füllen wurden die Funktionen „template_preprocess_views_view_rss(&$vars)“ und „template _preprocess_views_view_row_rss(&$vars)“ überschrieben.
Die RSS-Feeds werden in zwei schritten generiert.
Zu erst die „row’s“ geniert. Hier klappt es mit den eigenen definierten Feldern problemlos.
Im zweiten Schritt wird der äußere Bereich geniert. In diesem werden die eigenen Variablen nicht rein gerändert. Von Drupal vorgegebene Variablen können problemlos überschreiben werden.
Hier ein Codebeispiel wie ich die Variablen in der „template.php“ setzte:
$vars['copyright'] = “Test AG”In dem Template werden sie wie folgt rein geschrieben
<copyright><?php print $copyright; ?></copyright>Über Hilfe für die Lösung des Problems würde ich mich freuen.
Mit freundlichen Grüßen
Alex
- Anmelden oder Registrieren um Kommentare zu schreiben

Hat jemand eine Idee?
am 23.01.2013 - 13:08 Uhr
Hallo,
ich hatte vor einiger Zeit die Frage gestellt: „RSS-Feed eigene Variblen defenieren“.
Leider bisher keine antwort erhalten.
Hat niemand eine Idee?
Mit freundlichen Grüßen
Alex
Was ist genau dein Problem.
am 23.01.2013 - 13:11 Uhr
Was ist genau dein Problem. Welche RSS Feeds meinst du? Hast du einen Feed per Views erstellt?
Die "richtigen" RSS
am 23.01.2013 - 13:21 Uhr
Hallo,
ich meine die "richtigen" RSS, die am ende "*.rss" haben. Die, die auch in den RSS-Readern abonniert werden.
MfG
Alex
Ja ok aber wo ist das
am 23.01.2013 - 13:24 Uhr
Ja ok aber wo ist das Problem?
Selbst definierte Variablen sind das Problem
am 23.01.2013 - 13:32 Uhr
Hallo,
das Problem liegt darin, das selbst definierte Variablen nicht in dem „äußere Bereich“ rein gerändert werden.
Ich denke, ich habe es oben gut beschrieben.
Mit freundlichen Grüßen
Alex
Problem besteht immer noch
am 22.08.2014 - 08:36 Uhr
Hallo,
ich nach einiger Zeit nochmal versucht das Problem zu lösen, aber bisher keine Möglichkeit gefunden es zu lösen.
Das Problem beschränkt sich auf die „template_preprocess_views_view_rss(&$vars)“ und der „views-view-rss--xxx.tpl.php“ Datei.
Über hinweise würde ich mich freien.
Mit freundlichen Grüßen
Alex
Wie wärs, wenn Du mal den
am 22.08.2014 - 08:53 Uhr
Wie wärs, wenn Du mal den Quellcode postest? Bist du denn sicher, dass die views-view-rss--xxx.tpl.php auch genutzt wird, wenn der RSS feed gerendert wird?
OK, hier mal der ganz Code
am 22.08.2014 - 09:16 Uhr
OK, hier mal der ganz Code und die Templatedate.
Hier der Code der Funktion:
<?php
function own_preprocess_views_view_rss(&$vars) {
global $base_url;
global $language;
$view = &$vars['view'];
$options = &$vars['options'];
$items = &$vars['rows'];
$style = &$view->style_plugin;
// The RSS 2.0 "spec" doesn't indicate HTML can be used in the description.
// We strip all HTML tags, but need to prevent double encoding from properly
// escaped source data (such as & becoming &amp;).
$vars['description'] = check_plain(decode_entities(strip_tags($options['description'])));
$vars['last_build_date'] = "";
$vars['lastbuilddate'] = "";
if ($view->display_handler->get_option('sitename_title')) {
$title = variable_get('site_name', 'Drupal');
if ($slogan = variable_get('site_slogan', '')) {
$title .= ' - ' . $slogan;
}
}
else {
$title = $view->get_title();
}
// Figure out which display which has a path we're using for this feed. If there isn't
// one, use the global $base_url
$link_display_id = $view->display_handler->get_link_display();
if ($link_display_id && !empty($view->display[$link_display_id])) {
$path = $view->display[$link_display_id]->handler->get_path();
}
if ($path) {
$path = $view->get_url(NULL, $path);
$url_options = array('absolute' => TRUE);
if (!empty($view->exposed_raw_input)) {
$url_options['query'] = $view->exposed_raw_input;
}
// Compare the link to the default home page; if it's the default home page, just use $base_url.
if ($path == variable_get('site_frontpage', 'node')) {
$path = '';
}
$vars['link'] = check_url(url($path, $url_options));
}
/* create last Build Date, hier create date. Is not good but the best wath i fond */
$tmpResult = $view->result;
$tmpMaxDate =null;
for($i=0; $i<count($tmpResult); $i++){
if(empty($tmpMaxDate)){
$tmpMaxDate = $tmpResult[$i]->node_created;
} else if($tmpMaxDate < $tmpResult[$i]->node_created){
$tmpMaxDate = $tmpResult[$i]->node_created;
}
}
if(!empty($tmpMaxDate)){
$vars['last_build_date'] = check_plain($this->createRssDate($tmpMaxDate));
}
$vars['title'] = check_plain($title);
$vars['langcode'] = check_plain($language->language);
$vars['namespaces'] = drupal_attributes($style->namespaces);
$vars['items'] = $items;
$vars['description'] = check_plain($view->description);
// During live preview we don't want to output the header since the contents
// of the feed are being displayed inside a normal HTML page.
if (empty($vars['view']->live_preview)) {
drupal_add_http_header('Content-Type', 'application/rss+xml; charset=utf-8');
}
return $vars;
}
?>
Hier der Template code
<?php
/**
* @file views-view-rss.tpl.php
* Default template for feed displays that use the RSS style.
*
* @ingroup views_templates
*/
?>
<?php print "<?xml"; ?> version="1.0" encoding="utf-8" <?php print "?> \n"; ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><?php print $title; ?></title>
<link><?php print $link; ?></link>
<description><?php print $description; ?></description>
<language><?php print $langcode; ?></language>
<lastBuildDate><?php print $last_build_date; ?></lastBuildDate>
<copyright>XXXXXXX</copyright>
<?php print $channel_elements; ?>
<?php print $items; ?>
</channel>
</rss>
return $vars; ist schon mal
am 22.08.2014 - 09:25 Uhr
return $vars;ist schon mal nicht nötig in der template-Funktion. Und wo wird jetzt copyright definiert? Und bei Copyright steht XXXX in der template-datei???Copyright wird direkt rein geschrieben
am 22.08.2014 - 09:35 Uhr
Das Copyright wird nicht rein gerändert, es steht direkt da drinnen. Es ist der Name der Firma.
Das "return" war ein Versuch gewesen.
Mal ehrlich - Deine Frage
am 22.08.2014 - 10:00 Uhr
Mal ehrlich - Deine Frage war, wieso die Variablen nicht gerendert werden - und in Deiner Template-Datei stehen gar keine Variablen und in der preprocess-Funktion werden keine eigenen Variablen definiert. Was bitte ist jetzt Dein Problem?
Was währe ein andere Weg?
am 22.08.2014 - 10:30 Uhr
Das Problem ist, das ich in dieser Template das Datum brauche, es aber nicht als Variable vordefiniert ist und ich keine andere Möglichkeit gefunden habe es zu setzten.
Ein weiter Grund warum ich diese Funktion genommen habe, das sie ein "template_" (ist in: sites/all/modules/views/theme/theme.inc) davor stehen hat. Wenn mich nicht alles täuscht, heißt es doch das ich sie überschreiben kann. Oder habe ich da was falsch verstanden?
Was gibt es noch für Möglichkeiten sie rein zu bekommen?
Also geht es jetzt nicht mehr
am 22.08.2014 - 10:35 Uhr
Also geht es jetzt nicht mehr um eine copyright-Variable, sondern um die $last_build_date??? Ich kann Dir schlecht sagen, was ein anderer Weg wäre, wenn ich nicht weiß, was Dein Problem ist!
Auch diese Variable ist zwar definiert, hat aber nirgendwo ein Datum bekommen?!
Der Variablenname ist egal, das Problem ist gleich
am 22.08.2014 - 10:44 Uhr
Was in der Variable drinnen steht ist egal. Das mit dem Copyright habe ich anders gelöst, in dem ich es direkt rein geschrieben haben. Da ist es mir zum ersten mal aufgefallen.
Damit die RSS richtig validiert werden kann, muss ein Datum rein. Das steht in dem Standard von Drupal, wie es ausgeliefert wird, nicht drinnen. Jetzt wollte ich zu erst das "copyright" Dynamisch hinzufügen, habe mich dann aber anders entschieden.
Nach dem ich es rein geschrieben habe, ist es mit dem Datum mir aufgefallen.
Die Variable bekomme ein Datum. Die Funktion, die es macht habe ich raus genommen, da es sonst soviel code wäre.
Also wenn Du alles lieferst,
am 22.08.2014 - 11:03 Uhr
Also wenn Du alles lieferst, außer das, was relevant ist, kann man Dir auch nicht helfen. Ich klinke mich hier dann mal aus.