Separates Feed Script für News auf Basis Atom Version 1

Hilfe zu Modulen und Tags
Piratos

Re: Separates Feed Script für News auf Basis Atom Version 1

Post 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.
Piratos

Re: Separates Feed Script für News auf Basis Atom Version 1

Post 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).
cyberman

Re: Separates Feed Script für News auf Basis Atom Version 1

Post by cyberman »

Wie immer besten Dank für das klasse Tool.
Piratos wrote: (ich muss mal langsam an PW denken).
Und OneMenFTP  ;D ...
Piratos

Re: Separates Feed Script für News auf Basis Atom Version 1

Post by Piratos »

OneMenFTP
Genau , da habe ich schon ein ganz schlechtes Gewissen mir gegenüber, ein Teil was zu 98% fertig ist.
Nogga

Re: Separates Feed Script für News auf Basis Atom Version 1

Post by Nogga »

Und OneMenFTP ...
Das ist ein Widerspruch in sich - Men ist Plural und One bezeichnet einen einzelnen... OneManFTP wäre logischer...
Piratos

Re: Separates Feed Script für News auf Basis Atom Version 1

Post 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.
Post Reply

Return to “Module und Tags”