Page 2 of 2
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Sat Apr 29, 2006 1:33 pm
by Piratos
um den exponentiellen Wert zu!
So kann man es auch massiv und recht deutlich ausdrücken.
So ist es in fast allen Fällen, lokal mit 500K Testdatensätzen läuft da wegen Timeout des Servers überhaupt nichts mehr.
Alle hier in der CMS vorhandenen Abfragen mit einem ORDER BY verursachen einen Filesort von Mysql.
Mysql und auch andere Datenbanksysteme sind nur in sehr wenigen Fällen dazu zu bringen einen eventuell vorhandenen Schlüssel (der ja sortiert) zu nutzen um sich diese extra Sortierung zu sparen.
Je nach Qualität der Abfrage selbst und der Datenbankstruktur kann es zusätzlich auch noch zur Erzeugung einer temporären Tabelle führen - und das bedeutet - das Auto fährt mit angezogenen Bremsen.
Auf der anderen Seite ist das auch ein gutes Beispiel, wo sich der Anwender einmal Gedanken machen sollte.
News sind News und haben von Haus aus ein Verfallsdatum, denn irgendwann sind es ja keine News mehr , sondern alte Kamellen.
Ein Limit zu setzen z.B. auf 8 oder sonst etwas ist ja auch unlogisch, denn man könnte tatsächlich ja auch 10 oder 20 News haben.
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Sat Apr 29, 2006 4:20 pm
by Piratos
Sp nun die letzte Version - ist etwas langsamer, benötigt etwas mehr Speicher - aber es verwendet Adodb oder Adodb Lite und entspricht sopmit dem Standard:
Code: Select all
<?php
$starttime = microtime();
// Hier anpassen wenn erforderlich
//---------------------------------
// wird nur verwendet, wenn es keine sitreprefs gibt cmsms version < 13.1
// Sie sollten hier etwas eintragen wenn ältere Version verwendet werden oder wenn in den siteprefs nichts ist
// this field only neeed if you have a cmsms version prior 13.1 or you have 13.1 and has no sitename set
$websitetitel='NoName';
$untertitel='NewsFeed';
// Wenn Sie unbedingt SPAM ohne Ende wünschen, tragen sie hier ihre Mailadresse ein.
// if you would like to get much spams than put here your email adress
$email ='noreply@'.$_SERVER['HTTP_HOST'];
// sind keine durch Komma getrennte angegeben,werden alle verwendet
// auf exakte gleiche Schreibweise achten
// here you can define the categories you wil use
// set ot '' of you want to use all categorys
$kategorien='1.Mannschaft,AH-Mannschaft,Jugend,Verein,General';
// wenn 1 dann wird die Zusammenfassung zum Inhalt zugeschlagen, da Newsreader wie beim IE 7 die
// die Zusammenfassung nicht auswerten
// ist das NICHT erwünscht den Wert auf 0 setzen
// some newsreader does not show your summary
// if this is set to 1 the summarys are added to the content of the news, if 0 than not
$sum_zu_content=1;
// Ende der Anpassung
// no further change
//--------------------------------------------------------------------
$dn=dirname(__FILE__);
require_once($dn.'/config.php');
if ($config['use_adodb_lite'] == false && file_exists($dn."/lib/adodb/adodb.inc.php"))
require($dn."/lib/adodb/adodb.inc.php");
else
require($dn."/lib/adodb_lite/adodb.inc.php");
$db = &ADONewConnection($config['dbms'], 'pear:date:cmsms');
$db->Connect($config["db_hostname"],$config["db_username"],$config["db_password"],$config["db_name"]);
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$linkteil='?module=News&id=cntnt01&cntnt01action=detail&cntnt01articleid=';
function tstamp($s)
{
if ($s =='') return '';
$t=explode(' ',$s);
$j=explode('-',$t[0]);
$u=explode(':',$t[1]);
$ts= mktime ($u[0],$u[1],$u[2],$j[1],$j[2],$j[0]);
return $ts;
}
$root_url=$config['root_url'];
$feedurl=$root_url.'/atom.php';
$homepage=$root_url;
$table_prefix=$config['db_prefix'];
if (!$config['default_encoding'] == '')
$encoding=$config['default_encoding'] ;
else
$encoding =$config['admin_encoding'];
$now=time();
$nownull=$now-1;
if ($kategorien !='')
{
$kats=explode(",",$kategorien);
}
$ext='';
if ($kats !=null)
{ $c=count($kats);
$i=0;
//$ext=" AND k.news_category_id = n.news_category_id AND (";
$ext=" AND (";
foreach($kats as $one)
{
$ext .=" k.news_category_name = '$one' ";
$i++;
if ($i < $c) $ext .="OR ";
}
$ext .=")";
}
$sql="SELECT n. * , k.news_category_name FROM ".$table_prefix."module_news n, ".$table_prefix."module_news_categories k WHERE k.news_category_id = n.news_category_id AND STATUS = 'published'".$ext;
$sql .= " AND ((".$db->IfNull('end_time',"'".$db->DBTimeStamp(1)."'")." = '".$db->DBTimeStamp(1)."') OR (end_time > '".$db->DBTimeStamp(time())."')) ";
$result=$db->Execute($sql);
$pref=$db->GetRow("SELECT sitepref_value FROM ".$table_prefix."siteprefs WHERE sitepref_name = 'sitename'");
if ($pref) {
$titel =$pref['sitepref_value'];
if ($titel=="") $titel=$websitetitel;
}
else
{
$titel=$websitetitel;
}
// Copyright bitte belassen
$copyright="CMSMS Atom 1.0 by Jan Czarnowski(c)2006";
$out='<?xml version="1.0" encoding="'.$encoding.'"?><feed xmlns="http://www.w3.org/2005/Atom">';
$out .='<title type="text">'.$titel.'</title><subtitle type="text">'.$untertitel.'</subtitle>';
$first=true;
while($result && $dbr = $result->FetchRow())
{
if ($dbr['create_date']==null) $dbr['create_date']= $nownull; else $dbr['create_date']=tstamp($dbr['create_date']);
if ($dbr['modified_date']==null) $dbr['modified_date']= $now;else $dbr['modified_date']=tstamp($dbr['modified_date']);
if ($dbr['create_date']== $dbr['modified_date']) $dbr['modified_date']=$dbr['modified_date']+1;
$d_a=date("Y-m-d H:m:s", $dbr['modified_date']);
$d_b=date("Y-m-d H:m:s", $dbr['create_date']);
$d = explode(" ", $d_a);
$date = $d[0];
$time = $d[1];
$datetime = implode("T",$d);
$d2 = explode(" ", $d_b);
$date2 = $d2[0];
$time2 = $d2[1];
$datetime2 = implode("T",$d2);
if ($first)
{
$first=false;
$out .="<updated>".$datetime."Z</updated>";
$out .="<id>$feedurl</id>";
$out .='<link rel="alternate" type="text/html" href="'.$homepage.'"/>';
$out .='<link rel="self" type="application/atom+xml" href="'.$feedurl.'"/>';
$out .='<rights>'.$copyright.'</rights>';
$out .='<generator uri="'.$feedurl.'" version="1.0">'.$copyright.'</generator>';
}
$pid=$dbr['news_id'];
$betr=trim($dbr['news_titel']);
if (strlen($betr) == 0) $titel1 = 'Kein Titel'; else $titel1= $betr;
$out .='<entry><title type="text">'.$titel1.'</title>';
$out .='<link type="text/html" href="'.$root_url.'/index.php'.$linkteil.$pid.'"/>';
$out .='<id>'.$root_url.'/index.php'.$linkteil.$pid.'</id>';
$out .='<published>'.$datetime2.'Z</published>';
$out .='<updated>'.$datetime.'Z</updated>';
$out .='<author><name>'.htmlspecialchars($titel).'</name><uri>'.$homepage.'</uri> <email>'.$email.'</email> </author>';
if ($sum_zu_content==1) $neu=$dbr['summary'].'<br />'.$dbr['news_data'];else$neu=$dbr['news_data'];
if (strlen($dbr['summary'])==0) $kurz = substr($neu,0,90).' ....';else $kurz=$dbr['summary'];
$out .='<summary type="html">'.htmlspecialchars($kurz).'</summary>';
$out .= '<content type="html" xml:lang="de">'.htmlspecialchars($neu).'</content></entry>';
}
$out .="</feed>";
$endtime = microtime();
list($a_dec, $a_sec) = explode(" ", $starttime);
list($b_dec, $b_sec) = explode(" ", $endtime);
$verbrauch = $b_sec - $a_sec + $b_dec - $a_dec;
$out .="<!--CMSMS Atom-Feed needs $verbrauch Seconds and ".(function_exists('memory_get_usage')?memory_get_usage():'n/a')." Bytes of Memory RAM --><!-- CMSMS ATOM Version 1.0 (c) Jan Czarnowski - http://piratos.byethost33.com -->";
header("Content-Type: application/xml");
echo $out;
?>
Mehr gibt es nicht, wer mehr haben will muss selbst ändern (ich muss mal langsam an PW denken).
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Sat Apr 29, 2006 5:02 pm
by cyberman
Wie immer besten Dank für das klasse Tool.
Piratos wrote:
(ich muss mal langsam an PW denken).
Und OneMenFTP

...
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Sat Apr 29, 2006 5:05 pm
by Piratos
OneMenFTP
Genau , da habe ich schon ein ganz schlechtes Gewissen mir gegenüber, ein Teil was zu 98% fertig ist.
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Mon May 01, 2006 10:05 am
by Nogga
Und OneMenFTP ...
Das ist ein Widerspruch in sich - Men ist Plural und One bezeichnet einen einzelnen... OneManFTP wäre logischer...
Re: Separates Feed Script für News auf Basis Atom Version 1
Posted: Mon May 01, 2006 11:13 am
by Piratos
Das ist ein Widerspruch in sich
Da muss ich schmunzeln, fast genau den Wortlaut habe ich von meinem Sohn auch schon gehört.
Es ist aber eine freie Wortspielerei nach dem Motto Einer für Alle.