RSS Feed Creator mit erweiteter Kategorieauswahl???

Gesperrt
shi
Beiträge: 254
Registriert: Fr 5. Nov 2004, 14:12
Danksagung erhalten: 1 Mal
Kontaktdaten:

RSS Feed Creator mit erweiteter Kategorieauswahl???

Beitrag von shi »

Hallo, ich benutze den RSS Feed Creator aus der Version 4.6.15 und der funktioniert soweit. Ich möchte aber Auswahl der Kategorie erweitern wie bei der Article List Advanced von HerrnB.

Also die Feeds sollen aus verschieden Kategorien zusammengestellt werden.

Ist das überhaubt mit dem Modul möglich? Wann ja kann mir da jemand helfen?

Code: Alles auswählen

?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname  :      RSS Feed generator
* Author(s)   :     Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

#Selected category
$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
"."  <tr valign=\"top\">
"."    <td>".mi18n("Kategorie wählen").":</td>
"."    <td>
"."      <select name=\"CMS_VAR[0]\" style=\"width:300px;\">
"."        <option value=''>---".mi18n("Kein")."---</option>
";

#Fetch all categories
$query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat "."AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' "."AND C.visible=1 ORDER BY A.idtree";

#Execute query
$db->query($query);

#Loop result and build the options
while ($db->next_record()) {
	#Indent spacer
	$spaces = "";

	#How many levels
	$levels = $db->f("level");
	$spaces = '';
	for ($i = 0; $i <= $levels; $i ++) {
		$spaces .= "|->";
	}

	if ($selected == $db->f("idcat")) {
		#Selected category
		echo "<option selected=\"selected\" value=\"".$db->f("idcat")."\">".$spaces.$db->f("name")."</option>
";
	} else {
		#Category
		echo "<option value=\"".$db->f("idcat")."\">".$spaces.$db->f("name")."</option>
";
	}

}
echo "</select></td></tr>";

#Set default values
if ("CMS_VALUE[1]" == '') {
	$rss_sortby = 'created';
} else {
	$rss_sortby = "CMS_VALUE[1]";
}

if ("CMS_VALUE[2]" == '') {
	$rss_sortorder = 'desc';
} else {
	$rss_sortorder = "CMS_VALUE[2]";
}

if ("CMS_VALUE[3]" == '') {
	$rss_include_start_article = '';
} else {
	$rss_include_start_article = ' checked';
}

$rss_title = "CMS_VALUE[4]";

if ("CMS_VALUE[5]" == '') {
	$rss_link = $cfgClient[$client]['path']['htmlpath'];
} else {
	$rss_link = "CMS_VALUE[5]";
}

$rss_description = "CMS_VALUE[6]";

if ("CMS_VALUE[7]" == '') {
	$rss_language = 'de';
} else {
	$rss_language = "CMS_VALUE[7]";
}

$rss_copyright = "CMS_VALUE[8]";

$rss_image_title = "CMS_VALUE[9]";

$rss_image_url = "CMS_VALUE[10]";

$rss_image_link = "CMS_VALUE[11]";

$rss_managingEditor = "CMS_VALUE[12]";

$rss_webMaster = "CMS_VALUE[13]";

$rss_maxCount = "CMS_VALUE[14]";

$rss_ttl = "CMS_VALUE[15]";

$rss_description_length = "CMS_VALUE[16]";

$arrSortBy['created'] = mi18n("Erstellungsdatum");
$arrSortBy['published'] = mi18n("Publizierungsungsdatum");
$arrSortBy['artsort'] = mi18n("Sortier-Reihenfolge");
$arrSortBy['lastmodified'] = mi18n("Änderungsdatum");
$arrSortBy['name'] = mi18n("Alphabetisch");

#Sort by
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Sortieren nach").":</td>
"."    <td><select name=\"CMS_VAR[1]\" style=\"width:300px;\">
";
foreach ($arrSortBy as $key => $value) {
	if ($key == $rss_sortby) {
		echo "<option value=\"$key\" selected=\"selected\">$value
";
	} else {
		echo "<option value=\"$key\">$value
";
	}
}
echo "    </select></td></tr>
";

#Sort order
$arrSortOrder['asc'] = mi18n("aufsteigend");
$arrSortOrder['desc'] = mi18n("absteigend");

echo "  <tr valign=\"top\">
"."    <td>".mi18n("Sortier-Reihenfolge").":</td>
"."    <td><select name=\"CMS_VAR[2]\" style=\"width:300px;\">
";
foreach ($arrSortOrder as $key => $value) {
	if ($key == $rss_sortorder) {
		echo "<option value=\"$key\" selected=\"selected\">$value
";
	} else {
		echo "<option value=\"$key\">$value
";
	}
}
echo "    </select></td></tr>
";

#Include start article?
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Startartikel einbeziehen").":</td>
"."    <td><input type=\"checkbox\" name=\"CMS_VAR[3]\" value=\"yes\"$rss_include_start_article></td></tr>
";

#Title
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Titel").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[4]\" value=\"".$rss_title."\">
"."    </td>
"."  </tr>
";

#Link
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Link").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[5]\" value=\"".$rss_link."\">
"."    </td>
"."  </tr>
";

#Description
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Beschreibung").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[6]\" value=\"".$rss_description."\">
"."    </td>
"."  </tr>
";

#Language
$arrLanguages['de'] = mi18n("deutsch");
$arrLanguages['en'] = mi18n("englisch");
$arrLanguages['fr'] = mi18n("französisch");
$arrLanguages['it'] = mi18n("italienisch");
$arrLanguages['es'] = mi18n("spanisch");
$arrLanguages['nl'] = mi18n("niederländisch");
$arrLanguages['el'] = mi18n("griechisch");
$arrLanguages['pt'] = mi18n("portugiesisch");

echo "  <tr valign=\"top\">
"."    <td>".mi18n("Sprache").":</td>
"."    <td><select name=\"CMS_VAR[7]\" style=\"width:300px;\">
";
foreach ($arrLanguages as $key => $value) {
	if ($key == $rss_language) {
		echo "<option value=\"$key\" selected=\"selected\">$value
";
	} else {
		echo "<option value=\"$key\">$value
";
	}
}
echo "    </select></td></tr>
";

#Copyright
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Copyright").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[8]\" value=\"".$rss_copyright."\">
"."    </td>
"."  </tr>
";

#Image title
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Bildtitel").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[9]\" value=\"".$rss_image_title."\">
"."    </td>
"."  </tr>
";

#Image
$sql = "SELECT * FROM ".$cfg['tab']['upl']." WHERE (filetype='jpg') OR (filetype='jpeg') OR (filetype='gif') OR (filetype='png') ORDER BY dirname,filename";
$db->query($sql);
echo '<tr><td>'.mi18n("Bild").':</td><td><select name="CMS_VAR[10]" size="1" style="width:300px;">';
$selected = false;
$img_display = '';

while ($db->next_record()) {
	$path = $db->f("dirname").$db->f("filename");
	if ($db->f("idupl") == $rss_image_url) {
		echo '<option selected="selected" value="'.$db->f("idupl").'">'.$path.'</option>';
		$img_display = $path;
		$selected = true;
	} else {
		echo '<option value="'.$db->f("idupl").'">'.$path.'</option>';
	}
}

if ($selected) {
	echo '<option value="">'.mi18n("Nichts ausgewählt.").'</option>';
} else {
	echo '<option selected="selected" value="">'.mi18n("Nichts ausgewählt.").'</option>';
}
echo "</select></td></tr>
";

#Image link
echo "  <tr valign=\"top\">
"."    <td>".mi18n("Link (bei Klick auf das Bild)").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[11]\" value=\"".$rss_image_link."\">
"."    </td>
"."  </tr>
";

#Editor
echo "  <tr valign=\"top\">
"."    <td>".mi18n("EMail-Adresse Herausgeber").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[12]\" value=\"".$rss_managingEditor."\">
"."    </td>
"."  </tr>
";

#EMail Webmaster
echo "  <tr valign=\"top\">
"."    <td>".mi18n("EMail-Adresse Webmaster").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[13]\" value=\"".$rss_webMaster."\">
"."    </td>
"."  </tr>
";

#Max. number of articles
echo "  <tr valign=\"top\">
"."    <td>".mi18n("maximale Anzahl Artikel").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[14]\" value=\"".$rss_maxCount."\">
"."    </td>
"."  </tr>
";

#TTL
echo "  <tr valign=\"top\">
"."    <td>".mi18n("TTL (Minuten)").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[15]\" value=\"".$rss_ttl."\">
"."    </td>
"."  </tr>
";

#Description length
echo "  <tr valign=\"top\">
"."    <td>".mi18n("max. Länge der Beschreibung").":</td>
"."    <td><input type=\"text\" maxlength=\"200\" style=\"width:300px;\" name=\"CMS_VAR[16]\" value=\"".$rss_description_length."\">
"."    </td>
"."  </tr>
";

echo "</table>
";
?><?php

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUPUT
*
* Modulname  :      RSS Feed generator
* Author(s)   :     Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

#Includes
cInclude('classes', 'class.article.php');

#Get settings
$rss_cat = "CMS_VALUE[0]";
$rss_sortby = "CMS_VALUE[1]";
$rss_sortorder = "CMS_VALUE[2]";
$rss_include_start_article = "CMS_VALUE[3]";
$rss_title = "CMS_VALUE[4]";
$rss_link = "CMS_VALUE[5]";
$rss_description = "CMS_VALUE[6]";
$rss_language = "CMS_VALUE[7]";
$rss_copyright = "CMS_VALUE[8]";
$rss_image_title = "CMS_VALUE[9]";
$rss_image_url = "CMS_VALUE[10]";
$rss_image_link = "CMS_VALUE[11]";
$rss_managingEditor = "CMS_VALUE[12]";
$rss_webMaster = "CMS_VALUE[13]";
$rss_maxCount = "CMS_VALUE[14]";
$rss_ttl = "CMS_VALUE[15]";
$rss_description_length = "CMS_VALUE[16]";

#Check settings
if ($rss_maxCount == '') {
	$rss_maxCount = 999;
}

if ($rss_description_length=='') {
	$rss_description_length = 200;
}

#Get feed image
if ($rss_image_link != '') {
	if (substr(strtolower($rss_image_link), 0, 7) != 'http://') {
		$rss_image_link = 'http://'.$rss_image_link;
	}
}

if ($rss_image_url != '') {
	$sql = "SELECT * FROM ".$cfg['tab']['upl']." WHERE idupl = ".$rss_image_url;
	$db->query($sql);
	if ($db->next_record()) {
		$rss_image_url = $cfgClient[$client]['path']['htmlpath'].$cfgClient[$client]['upl']['frontendpath'].$db->f("dirname").$db->f("filename");
		$rss_image_fs = $cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upl']['frontendpath'].$db->f("dirname").$db->f("filename");
	}
}

#Output feed header
header("Content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
";
echo "<rss version=\"2.0\">
";
echo "<channel>
";

echo "<title>".prepareStringForOutput($rss_title)."</title>
";
echo "<copyright>".prepareStringForOutput($rss_copyright)."</copyright>
";
echo "<link>".prepareStringForOutput($rss_link)."</link>
";
echo "<description>".prepareStringForOutput($rss_description)."</description>
";
echo "<language>".prepareStringForOutput($rss_language)."</language>
";
echo "<lastBuildDate>".date('D, d M Y H:i:s T')."</lastBuildDate>
";
echo "<pubDate>".date('D, d M Y H:i:s T')."</pubDate>
";
echo "<generator>Contenido CMS</generator>
";
echo "<managingEditor>".$rss_managingEditor."</managingEditor>
";
echo "<webMaster>".$rss_webMaster."</webMaster>
";
echo "<ttl>".$rss_ttl."</ttl>
";
echo "<image>
";
echo "<title>".prepareStringForOutput($rss_image_title)."</title>
";
list ($width, $height, $type, $attr) = getimagesize($rss_image_fs);
echo "<width>".$width."</width>
";
echo "<height>".$height."</height>
";
echo "<url>".prepareStringForOutput($rss_image_url)."</url>
";
echo "<link>".prepareStringForOutput($rss_image_link)."</link>
";
echo "</image>
";

#Output articles
if ($rss_cat != '') {
	if ($rss_include_start_article != '') {
		$b_include_start_article = true;
	} else {
		$b_include_start_article = false;
	}
	$options = array ('idcat' => $rss_cat, "start" => $b_include_start_article, "order" => $rss_sortby, "direction" => $rss_sortorder);
	$list = new ArticleCollection($options);
	$count = $list->count;

	if ($count > 0) {
		$aArticleList = array ();
		$aArticleList = $list->articles;
		$aTmpArticleList = array ();
		$index = 1;
		foreach ($aArticleList as $value) {
			if ($index <= $rss_maxCount) {
				$tmp_article = new Article($value, $client, $lang);
				$headline = '';
				$i = 1;
				while (($i<20) && (is_empty($headline))) {
					$headline = strip_tags($tmp_article->getContent('CMS_HTMLHEAD', $i));
					$i++;
				}
					
				$i = 1;
				while (($i<20) && (is_empty($headline))) {
					$headline = strip_tags($tmp_article->getContent('CMS_TEXT', $i));
					$i++;
				}
				
				$description = '';
				$i = 1;
				while (($i<20) && (is_empty($description))) {
					$description = strip_tags($tmp_article->getContent('CMS_HTML', $i));
					$i++;
				}

				$description = capiStrTrimAfterWord($description, $rss_description_length);

				$pub_date = $tmp_article->getField("created");
				$pub_date = strtotime($pub_date);
				$pub_date = date('r', $pub_date);
				if ($headline != '') {
					$headline = prepareStringForOutput($headline);
					$link = str_replace('&','&',$cfgClient[$client]['path']['htmlpath']."front_content.php?idcat=$rss_cat&idart=$value&client=$client&lang=$lang");
					echo "<item>
";
					echo "<title>".prepareStringForOutput($headline)."</title>
";
					echo "<description>".prepareStringForOutput($description)."</description>
";
					echo "<link>".$link."</link>
";
					echo "<pubDate>".$pub_date."</pubDate>
";
					$t1 = $cfg["tab"]["art_lang"];
					$t2 = $cfg["tab"]["phplib_auth_user_md5"];
					$sql = "SELECT ".$t2.".realname FROM ".$t1." INNER JOIN ".$t2." ON ".$t1.".author = ".$t2.".username WHERE (".$t1.".idart=$value) AND (".$t1.".idlang=$lang)";
					$db->query($sql);
					
					if ($db->next_record()) {
						$author = prepareStringForOutput($db->f("realname"));
					} else {
						$author = '';
					}
					echo "<author>".$author."</author>
";
					echo "</item>
";
				}
			}
			$index ++;
		}
	}
}

echo "</channel>
";
echo "</rss>
";

function is_empty($in_str) {

	$tmp = trim($in_str);
	$tmp = strip_tags($tmp);
	$tmp = str_replace(chr(13).chr(10), '', $tmp);
	$tmp = str_replace('&nbsp;', '', $tmp);

	if ($tmp == '') {
		return true;
	} else {
		return false;
	}
}

function prepareStringForOutput($sIn) {

	$sIn = str_replace('&nbsp;',' ',$sIn);
	$sIn = str_replace('&nbsp;',' ',$sIn);
	$sIn = str_replace(chr(13).chr(10),' ',$sIn);
	return htmlspecialchars($sIn, ENT_QUOTES);
	return htmlnumericalentities(html_entity_decode($sIn));
         return str_replace('&','&',htmlnumericalentities($sIn));
         $sIn = html_entity_decode($sIn);
}

function htmlnumericalentities($str) {

	return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str);
}
?>
delinquent
Beiträge: 184
Registriert: Fr 17. Aug 2007, 12:15
Kontaktdaten:

Beitrag von delinquent »

Soweit ich weiß, kann das Modul des Standardmandanten nur Artikel aus einer Kategorie als Feed darstellen, korrigiert mich, wenn ich mich irre.

Du könntest dazu das Blog-Modul aus meiner Signatur etwas zweckentfremden. Alle Artikel, die das Modul teasert (auch in Unterkategorien) können als Feeds dargestellt werden.

Siehe z.B.:
http://www.josupeit.com/weblog
http://www.capits.com/aktuelles

und jeweils
http://www.josupeit.com/weblog?output=rss
http://www.capits.com/aktuelles?output=rss


Vielleicht hat aber hier jemand auch andere Module, die nur für sowas "gebaut" wurden. :-)


Gruß,
Manuel
former
Beiträge: 27
Registriert: So 2. Jul 2006, 19:16
Wohnort: Offenbach
Kontaktdaten:

Beitrag von former »

Ich hänge gerade vor der gleichen Aufgabenstellung.

Nachdem ich delinquents Modul nicht zum laufen gebracht habe, war meine nächste Eingebung:

Man könnte HerrB's Artikelliste Advanced dafür vergewaltigen. Also ein Mischmasch aus dem Standard Feed Creator und der Artikelliste.

Bevor ich gegen Jahresende und sich auftürmender Arbeit noch so eine quick&dirty Lösung versuche würde mich interssieren ob Du einen eleganteren Weg gegangen bist.
Gesperrt