{"id":368,"date":"2016-01-07T15:58:23","date_gmt":"2016-01-07T14:58:23","guid":{"rendered":"http:\/\/elektroelch.de\/draft\/?page_id=368"},"modified":"2016-01-07T16:07:41","modified_gmt":"2016-01-07T15:07:41","slug":"anlage-2-programmlistings","status":"publish","type":"page","link":"https:\/\/elektroelch.de\/drafts\/betriebliche-projektarbeit-content-syndication-von-nightloop-de\/anlagen\/anlage-2-programmlistings\/","title":{"rendered":"Anlage 2: Programmlistings"},"content":{"rendered":"<p>Inhaltsverzeichnis<br \/>\n1.   Server\t1<br \/>\n1.1.   backend.php\t1<br \/>\n1.2.   backend_soap.php\t2<br \/>\n1.3.   backend_base.php\t2<br \/>\n1.4.   include\/config.inc\t5<br \/>\n1.5.   include\/sql_magazin_stars.php\t5<br \/>\n1.6.   include\/sql_magazin_soundcheck.php \t5<br \/>\n2.   PHP-Client\t5<br \/>\n2.1.   client.php\t5<br \/>\n2.2.   include\/inc_client_http.php\t6<br \/>\n2.3.   include\/inc_client_soap.php\t7<br \/>\n3.   Perl-Client\t9<br \/>\n3.1.   nightloop.pm\t9<br \/>\n3.2.   client.pl\t11<br \/>\n4.   Web-Interface\t12<br \/>\n4.1.   syndic8.php\t12<br \/>\n4.2.   syndic8.css\t15<br \/>\n4.3.   template.php\t16<br \/>\n4.4.   vorlage.perl.txt  \t17<br \/>\n4.5.   vorlage.php.txt\t18<\/p>\n<p>1. Server<br \/>\n1.1. backend.php<br \/>\n<?php\n\ninclude (\"include\/config.inc\");\ninclude (\"backend_base.php\");\n\n#----------------------------------------------------------------------------------\n\n#---\n# moegliche Werte fuer $cat:\n# magazin_stars, magazin_music, magazin_soundcheck\n#---\n$cat = $_GET[\"cat\"];\n\n#---\n# Wenn keine Kategorie eingebenen wurde, ein Fehler-Dokument erzeugen und\n# das Programm abbrechen\n#---\nif (strlen($cat) < 0)\n  createErrorDocument($cat);\n\n#---\n# dem Parameter \"cat\" die entsprechden SQL-Datei nachladen\n# Wenn die Datei nicht gefunden werden kann, wird eine Fehlermeldung\n# ausgegeben und das Programm beendet.\n#---\n$default_error_handler = set_error_handler(\"CatNotFoundError\");\ninclude (\"include\/sql_$cat.php\");\nset_error_handler($default_error_handler);\n\n#---\n# Wenn mit items eine maximale Anzahl von Ueberschriften vorgegeben wurde,\n# die SQL-Anweisung um eine Begrenzung erweitern.\n# Wenn der Parameter item kein numerischer Wert ist, wird eine Fehlermeldung\n# ausgegeben und das Programm beendet.\n#---\n$items = $_GET[\"items\"];\nif (strlen($items) > 0)<br \/>\n  if (is_numeric($items))<br \/>\n    $sql .= &#8221; limit $items&#8221;;<br \/>\n  else<br \/>\n    createErrorDocument(&#8220;Item ist kein numerischer Wert!&#8221;);<\/p>\n<p>#&#8212;<br \/>\n# Wenn als Parameter &#8220;RDF&#8221; uebergeben wurde, dann RDF zurueckgeben,<br \/>\n# ansonsten XML.<br \/>\n#&#8212;<br \/>\n$format = strtoupper($_GET[&#8220;format&#8221;]);<br \/>\nif ($format != &#8220;RDF&#8221; )<br \/>\n  print createXML($sql, $db);<br \/>\nelse<br \/>\n  print createRDF($sql, $db);<\/p>\n<p>?><\/p>\n<p>1.2. backend_soap.php<br \/>\n<?php\n\n\ninclude (\"include\/config.inc\");\ninclude (\"backend_base.php\");\nrequire_once(\"include\/nusoap.php\");\n\n$s = new soap_server;\n$s -> register(&#8220;backend&#8221;);<\/p>\n<p>function backend($cat, $items=0, $protocol=&#8221;xml&#8221;)<br \/>\n{<\/p>\n<p>  global $base_url;<\/p>\n<p>  $sql_file = &#8220;include\/sql_$cat.php&#8221;;<br \/>\n  if (! file_exists($sql_file) )<br \/>\n    return &#8220;Error!&#8221;;<br \/>\n  include ($sql_file);<\/p>\n<p>  if (is_numeric($items))<br \/>\n    $sql .= &#8221; limit $items&#8221;;<\/p>\n<p>  return createXML($sql, $db);<\/p>\n<p>}<\/p>\n<p>$s->service($HTTP_RAW_POST_DATA);<\/p>\n<p>?><\/p>\n<p>1.3. backend_base.php<br \/>\n<?php\n\nglobal $base_url;\n$base_url = \"http:\/\/develop.nwn.int\/www.nightloop.de\/main_magazin.php\";\n\n$title         = \"nightloop.de\";\n$link          = \"http:\/\/www.nightloop.de\/\";\n$description   = \"die party community des nordwest-net\";\n$language      = \"de-DE\";\n$creator       = \"Lutz Schroeer (Lutz.Schroeer@team.nwn.de)\";\n$rights        = \"Copyright \" . date(\"Y\") . \" nordwest.net\";\n$image         = \"http:\/\/www.nightloop.de\/pics\/logo.gif\";\n$publisher     = \"nordwest.net GmbH &#038; CO. KG, 26122 Oldenburg, Germany\";\n\n#----------------------------------------------------------------------------------\n# Diese Funktion liest mit der importierten SQL-Funktion $sql die Datensaetze\n# aus der Datenbank aus und erstellt daraus ein assosiatives Array mit den \n# Schluesseln \"title\", \"description\" und \"link\".\n#\n# IN:  $sql:  SQL-Anweisung\n#      $db:   Datenbank, aus der gelesen werden soll\n# OUT: $feld: assosiatives Array mit den Feldern \"title\", \"description\" und \"link\"\n#-----\n\nfunction retrieve_db($sql, $db_name)\n{\n  \n  #--- Neues DB-Object erzeugen und Daten auslesen\n  global $DB_M_dbase, $DB_S_dbase;\n  $DB_M_dbase = $DB_S_dbase = $db_name;\n  $db = new NWN_DB or\n        die (\"Es konnte keine Verbindung zur Datenbank hergestellt werden.\");\n  $db->read($sql);<\/p>\n<p>  #&#8211; Daten in einem assosiativen Feld speichern<br \/>\n  while ($row = $db->get())<br \/>\n    $feld[] = array(&#8220;title&#8221;       => $row[&#8220;title&#8221;],<br \/>\n                    &#8220;description&#8221; => $row[&#8220;description&#8221;],<br \/>\n                    &#8220;link&#8221;        => $row[&#8220;href&#8221;]);<\/p>\n<p>  $db->close(); #&#8212; Datenbank schliessen<\/p>\n<p>  return $feld; #&#8211; das assosiative Feld zurueckgeben<\/p>\n<p>} \/\/teleschau()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nfunction createErrorDocument($reason)<br \/>\n{<br \/>\n  print $reason;<br \/>\n  die(); #&#8212; Programm beenden<br \/>\n}<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n# Hier werden die Fehler abgefangen, wenn kein Parameter &#8220;cat&#8221; angegeben oder<br \/>\n# eine Kategorie angegeben wurde, zu der keine entsprechende &#8220;include\/sql_*&#8221;-<br \/>\n# Datei vorhanden ist.<br \/>\n#<br \/>\n# IN:   $errno:   Fehlernummer<br \/>\n#       $errstr:  Fehlerbeschreibung<br \/>\n#       $errfile: Datei, in der der Fehler auftrat<br \/>\n#       $errline: Zeile, in der der Fehler auftrat<br \/>\n# OUT:  N\/A<br \/>\n#&#8212;&#8211;<\/p>\n<p>function catNotFoundError($errno, $errstr, $errfile, $errline)<br \/>\n{<br \/>\n  switch ($errno)<br \/>\n  {<br \/>\n   case 2:<br \/>\n     {<br \/>\n       createErrorDocument(&#8220;Kategorie konnte nicht gefunden werden.&#8221;);<br \/>\n       break;<br \/>\n     } \/\/case<br \/>\n   case 8:<br \/>\n     {<br \/>\n       createErrorDoument(&#8220;Es wurde keine Kategorie angegeben.&#8221;);<br \/>\n       break;<br \/>\n     } \/\/case<br \/>\n   default:<br \/>\n       print &#8220;<br \/>Fehler: [$errno] $errstr.<br \/>&#8220;;<br \/>\n  } \/\/switch<\/p>\n<p>die(); #&#8212; Programmausfuehrung abbrechen<\/p>\n<p>} \/\/function()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n# Diese Funktion erstellt einen String, der die aus der Datenbank erhaltenen<br \/>\n# Daten als XML-Baum darstellt.<br \/>\n#<br \/>\n# IN:  $sql:   SQL-String<br \/>\n#      $db:    Datenbank, aus der gelesen werden soll<br \/>\n# OUT: $xml:   String mit der XML-Datenstruktur<br \/>\n#&#8212;&#8211;<br \/>\nfunction createXML($sql, $db)<br \/>\n{<\/p>\n<p>  #&#8212;<br \/>\n  # Erzeugen eines neuen Text-Kind-Elements<br \/>\n  #&#8212;<br \/>\n  function new_child($doc, $parent, $name, $value)<br \/>\n  {<br \/>\n    $child = $parent->append_child($doc->create_element($name));<br \/>\n    return $child = $child->append_child($doc->create_text_node($value));<br \/>\n  } \/\/new_child()<\/p>\n<p>  #&#8212;<br \/>\n  # Das Root-ELement erzeugen, der Name ist immer &#8220;channel&#8221;.<br \/>\n  #&#8212;<br \/>\n  $doc = domxml_new_doc(&#8220;1.0&#8221;);<br \/>\n  $root = $doc->create_element(&#8220;channel&#8221;);<br \/>\n  $root = $doc->append_child($root);<\/p>\n<p>  #&#8212;<br \/>\n  # neues Titel-Element erzeugen<br \/>\n  # &#8220;Wie heisst unser Channel?&#8221;<br \/>\n  #&#8212;<\/p>\n<p>  new_child($doc, $root, &#8220;title&#8221;, &#8220;nightloop.de&#8221;);<br \/>\n  new_child($doc, $root, &#8220;link&#8221;, &#8220;http:\/\/www.nightloop.de\/&#8221;);<br \/>\n  new_child($doc, $root, &#8220;description&#8221;, &#8220;die party community des nordwest-net&#8221;);<br \/>\n  new_child($doc, $root, &#8220;language&#8221;, &#8220;de-DE&#8221;);<br \/>\n  new_child($doc, $root, &#8220;creator&#8221;, &#8220;Lutz Schroeer (Lutz.Schroeer@team.nwn.de)&#8221;);<br \/>\n  new_child($doc, $root, &#8220;rights&#8221;, &#8220;Copyright &#8221; . date(&#8220;Y&#8221;) . &#8221; nordwest.net&#8221;);<br \/>\n  new_child($doc, $root, &#8220;image&#8221;, &#8220;http:\/\/www.nightloop.de\/pics\/logo.gif&#8221;);<\/p>\n<p>  #&#8212;<br \/>\n  # Die noetigen Daten aus der Datenbank holen und die Felder<br \/>\n  # in den XML-Baum einfuegen.<br \/>\n  #&#8212;<br \/>\n  foreach (retrieve_db($sql, $db) as $item)<br \/>\n  {<br \/>\n    $new_item = $root->append_child($doc->create_element(&#8220;item&#8221;));<br \/>\n    new_child($doc, $new_item, &#8220;title&#8221;, ($item[&#8220;title&#8221;]));<br \/>\n    new_child($doc, $new_item, &#8220;link&#8221;, ($item[&#8220;link&#8221;]));<br \/>\n    new_child($doc, $new_item, &#8220;description&#8221;, ($item[&#8220;description&#8221;]));<br \/>\n  } \/\/foreach<\/p>\n<p>#&#8212;<br \/>\n# Eine mit UTF-8 kodierten XML-String an den Aufrufer zurueckgeben.<br \/>\n#&#8212;<br \/>\n# return utf8_encode($doc->dump_mem(1, &#8220;utf-8&#8221;));<\/p>\n<p>$doc = utf8_encode($doc->dump_mem(1, &#8220;utf-8&#8221;));<br \/>\nreturn $doc;<\/p>\n<p>} \/\/create_XML()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nfunction createRDF($sql, $db)<br \/>\n{<\/p>\n<p>  global $title, $description, $link, $language, $creator, $rights, $image, $publisher;<\/p>\n<p>  #&#8212;<br \/>\n  # Erzeugen eines neuen Text-Kind-Elements<br \/>\n  #&#8212;<br \/>\n  function new_child($doc, $parent, $name, $value)<br \/>\n  {<br \/>\n    $child = $parent->append_child($doc->create_element($name));<br \/>\n    return $child = $child->append_child($doc->create_text_node($value));<br \/>\n  } \/\/new_child()<\/p>\n<p>  #&#8212;<br \/>\n  # Erzeugen eines neuen Text-Kind-Elements mit Attributen<br \/>\n  #&#8212;<br \/>\n  function new_attribute_child($doc, $parent, $name, $value, $key, $key_value)<br \/>\n  {<br \/>\n    $child = $parent->append_child($doc->create_element($name));<br \/>\n    $child = $child->set_attribute($key, $key_value);<br \/>\n    return $child = $child->append_child($doc->create_text_node($value));<br \/>\n  } \/\/new_child()<\/p>\n<p>  #&#8212;<br \/>\n  # Das Root-ELement erzeugen, der Name ist immer &#8220;channel&#8221;.<br \/>\n  #&#8212;<br \/>\n  $doc = domxml_new_doc(&#8220;1.0&#8221;);<br \/>\n  $root = $doc->create_element(&#8220;rdf:RDF&#8221;);<br \/>\n  $root = $doc->append_child($root);<br \/>\n  $root->set_attribute(&#8220;xmlns:rdf&#8221;, &#8220;http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#&#8221;);<br \/>\n  $root->set_attribute(&#8220;xmlns:dc&#8221;, &#8220;http:\/\/purl.org\/dc\/elements\/1.1\/&#8221;);<\/p>\n<p>  $channel = $root->append_child($doc->create_element(&#8220;channel&#8221;));<br \/>\n  $channel->set_attribute(&#8220;rdf:about&#8221;, &#8220;http:\/\/www.nightloop.de&#8221;);<\/p>\n<p>  new_child($doc, $channel, &#8220;dc:title&#8221;, $title);<br \/>\n  new_child($doc, $channel, &#8220;dc:link&#8221;, $link);<br \/>\n  new_child($doc, $channel, &#8220;dc:description&#8221;, $description);<br \/>\n  new_child($doc, $channel, &#8220;dc:language&#8221;, $language);<br \/>\n  new_child($doc, $channel, &#8220;dc:date&#8221;, date(&#8220;Y-m-d\\TH:i:s+01:00&#8221;) );<br \/>\n  new_child($doc, $channel, &#8220;dc:creator&#8221;, $creator);<br \/>\n  new_child($doc, $channel, &#8220;dc:publisher&#8221;, $publisher);<br \/>\n  new_child($doc, $channel, &#8220;dc:type&#8221;, &#8220;World Wide Web Home Page&#8221;);<\/p>\n<p>  # Nun die Resourcen-Liste<br \/>\n  $items = $channel->append_child($doc->create_element(&#8220;items&#8221;));<br \/>\n  $rdfseq = $items->append_child($doc->create_element(&#8220;rdf:Seq&#8221;));<\/p>\n<p>  $schlagzeilen = retrieve_db($sql, $db);<br \/>\n  foreach($schlagzeilen as $schlagzeile)<br \/>\n    new_attribute_child($doc, $rdfseq, &#8220;rdf:li&#8221;, &#8220;&#8221;, &#8220;rdf:resource&#8221;,<br \/>\n                        substr($schlagzeile[&#8220;link&#8221;], strpos(&#8220;http:\/\/&#8221;, $schlagzeile[&#8220;link&#8221;])));<\/p>\n<p>  $string = substr($string, 0, strpos($string,$sep2));<\/p>\n<p>  # foreach (retrieve_db($sql, $db) as $item)<br \/>\n  foreach ($schlagzeilen as $item)<br \/>\n  {<br \/>\n    $new_item = $items->append_child($doc->create_element(&#8220;item&#8221;));<br \/>\n    new_child($doc, $new_item, &#8220;title&#8221;, ($item[&#8220;title&#8221;]));<br \/>\n    new_child($doc, $new_item, &#8220;link&#8221;, ($item[&#8220;link&#8221;]));<br \/>\n    new_child($doc, $new_item, &#8220;description&#8221;, ($item[&#8220;description&#8221;]));<br \/>\n  } \/\/foreach<\/p>\n<p>  return utf8_encode($doc->dump_mem(1, &#8220;utf-8&#8221;));<\/p>\n<p>}<\/p>\n<p>?><\/p>\n<p>1.4. include\/config.inc<br \/>\n<?\n\n\/*\n * Konfiguratuion fuer die TerminDB\n *\n * Server-Definitionen aus dem htdocs_includes\/TerminDB Verzeichniss includen\n *\n *\/\n\n\/\/ Die Datenbank Klasse\ninclude (\"include\/NWN_DB.class.php\");\n\n\/\/ Farben\n\/\/$BG_COLOR_HELL = \"#EEEEFF\";\n$BG_COLOR_HELL = \"#D6EBF9\";\n\/\/$BG_COLOR_DUNKEL = \"#CCCCFF\";\n$BG_COLOR_DUNKEL = \"#7CC6FF\";\n\n\/\/ Datenbankdefinition f\u00fcr die Datenbank\n\n\/\/Master\n$DB_M_server = \"develop.nwn.int\";\n$DB_M_user   = \"root\";\n$DB_M_pass   = \"\";\n;\n\/\/Writer\n$DB_S_server = \"develop.nwn.int\";\n$DB_S_user   = \"root\";\n$DB_S_pass   = \"\";\n\n?><\/p>\n<p>1.5. include\/sql_magazin_stars.php<br \/>\n<?php\n\n  # Die SQL-Anweisung darf nicht mit einem Semikolon enden, da sie noch\n  # erweitert wird.\n\n  $db = \"teleschau\";\n  $sql = \"select Ueberschrift_2 as title, \" .\n         \"concat(Gruppe_Person_Name, ' ', Ueberschrift_3) as description, \" .\n         \"concat('a href=\\\"$base_url?CMD=mag_folge&#038;page=mag_stars&#038;Dienst_ID=', Dienst_ID,\" .\n         \"'&#038;ID=', Artikel_ID, '\\\"') as href from star_portraits \";\n\n?><\/p>\n<p>1.6. include\/sql_magazin_soundcheck.php<br \/>\n<?php\n\n# Als Description wrid der erste Satz des Artikels genommen.\n#\n   $db = \"teleschau\";\n   $sql = \"select concat(Bandname_Interpret, ' - ', CD_Titel) as title, \" .\n          \"left(Artikel_Text, locate('.', Artikel_Text)   ) as description \" .\n          \"from cd_besprechung where Dienst_ID = 12\";\n\n   print $sql;\n\n?><\/p>\n<p>2. PHP-Client<br \/>\n2.1. client.php<br \/>\n<?php\n\n#\n#------------------------------------------------------------------------------\n# Importieren der Funktion \"getNightloop(<string: cat>, <int: itemcount>)<br \/>\n# Durch das Einbinden unterschiedlicher Module kann man sich hier entscheiden,<br \/>\n# ob die Uebrtragung der Daten wie eine uebliche Web-Seite stattfindet oder<br \/>\n# per SOAP.<\/p>\n<p># Fuer die Uebertragung per WWW:<br \/>\n#include &#8220;include\/inc_client_http.php&#8221;;<\/p>\n<p>#Fuer die Uebertragung per SOAP:<br \/>\ninclude &#8220;include\/inc_client_soap.php&#8221;;<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# Erstellt ein Inline-Stylesheet um die Tabelle und die Datenfelder formatiert<br \/>\n# darstellen zu koennen.<br \/>\n#&#8212;&#8211;<br \/>\nfunction getInlineStyleSheet()<br \/>\n{<\/p>\n<p>?><\/p>\n<p><STYLE TYPE=\"text\/css\"><br \/>\n<!--\n.nightloop_td {border-color: black; border-style: solid; border-width: 1px;}\n.nightloop_table {border-color:#000000; border-style:solid;border-width:2px; border-collapse: collapse;}\n--><br \/>\n<\/STYLE><\/p>\n<p><?\n\n} \/\/getInlineStyleSheet()\n\n#------------------------------------------------------------------------------\n# Erzeugen der Ausgabe-Tabelle\n#-----\nfunction showPanel($channel_data, $schlagzeilen)\n{\n  getInlineStyleSheet(); #-- Stylesheet zur Formatierung erzeugen\n\n  print \"\n \n<br \/>\n<table class=\\\"nightloop_table\\\">&#8220;;<br \/>\n  print &#8220;<\/p>\n<tr bgcolor=#000000>\n<th>&#8220;;<br \/>\n  print &#8220;<a href=\\\"\" . $channel_data[\"link\"] . \"\\\">&#8220;;<br \/>\n  print &#8220;<img src=\\\"\" . $channel_data[\"image\"] . \"\\\" border=0><\/a><\/tr>\n<\/th>\n<p>&#8220;;<\/p>\n<p>  foreach ($schlagzeilen as $schlagzeile)<br \/>\n  {<br \/>\n    print &#8220;<\/p>\n<tr>\n<td class=\\\"nightloop_td\\\"\" .\n          \"\n\n<li><\" . $schlagzeile[\"link\"] . \">&#8221; . $schlagzeile[&#8220;title&#8221;].&#8221;<\/a>&#8221; .<br \/>\n          &#8220;<br \/><small><i>&#8221; . $schlagzeile[&#8220;description&#8221;] . &#8220;<\/i><\/small><\/td>\n<\/tr>\n<p>&#8220;;<br \/>\n  } \/\/foreach<\/p>\n<p>} \/\/showPanel)<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# MAIN<br \/>\n#&#8212;&#8211;<br \/>\nlist($channel_data, $schlagzeilen) = getNightloop(&#8220;magazin_stars&#8221;, 10);<br \/>\nshowPanel($channel_data, $schlagzeilen);<\/p>\n<p>?><\/p>\n<p>2.2. include\/inc_client_http.php<br \/>\n<?php\n\n#======================================================================================\n# Dieses Modul verbindet sich mit dem Nightloop-Backend per HTTP und uebertraegt als\n# Parameter die Werte \"cat\" und \"items\". \"cat\" enthaelt die Nightloop-Kategorie und\n# \"items\" die Anzahl der gewuenschten Schlagzeilen.\n#\n# Die Funktion \"getNightloop(cat, items)\" gibt als Funktionsergebnis einen String\n# zurueck an den Aufrufer, der die Schlagzeilen in XML-Darstellung enthaelt.\n#======================================================================================\n\n#---------------------------------------------------------------------------------------\n# function getXML():\n# Wird der Funktion als einziger Parameter der Kategorie-Name uebergeben, so werden alle\n# Schlagzeilen dieser Kategorie zurueckgegeben, ansonsten nur \"$item\" Schlagzeilen.\n# Ist \"$item\" groesser als die Anzahl der Schlagzeilen, so werden ohne Fehlermeldung alle\n# Schlagzeilen zurueckgegeben.\n#\n# IN:   -\/-\n# OUT:  $page (string): XML-Baum\n#-----\nfunction getXML()\n{\n\n  # URL des Nightloop-Backends\n  $url = \"http:\/\/develop.nwn.int\/schroeer\/tennis\/soap\/backend.php\";\n\n  $channel = func_get_arg(0);     # Name des Channels\n  if (func_num_args() == 2 )      # Wenn ein weiterer Parameter uebergeben wurde,\n    $items = func_get_arg(1);     # den Wert in $items speichern\n\n  $url .= \"?cat=$channel\";        # Die URL um den Kategorie-Parameter erweitern\n\n  if (isset($items))              # Wenn die Varianle \"$items\" gesetzt ist,\n    $url .= \"&#038;items=$items\";      # den Parameter \"items\" an die URL anhaengen.\n\n  $fp = fopen($url,\"r\");          # Die URL oeffnen\n  $page = \"\";                     # $page enthaelt den Inhalt der Seite,auf die $url zeigt\n\n  while (!feof($fp))              # Die Seite blockweise auslesen, bis keine Daten mehr\n    $page .= fgets($fp,1024);     # vorhanden sind.\n  fclose($fp);\n\n  return $page;                   # Den Inhalt der Seite zureuckgeben.\n} \/\/getXML()\n\n#---------------------------------------------------------------------------\n# function getElement():\n# Aus den Nachfolger-Nodes des uebergebenden Nodes wird der Wert des\n# ersten Textnode gesucht und zurueckgegeben. Wurde kein Textnode gefunden\n# bleibt der Rueckgabewert undefiniert.\n#\n# IN:   $node:    Node, dessen Textelement ausgelesen werden sollen\n#       $tagname (string): Name des auszulesenden Textelements\n# OUT:  Wert des Textnodes\n#-----\nfunction getElement($node, $tagname)\n{\n  foreach ($node->child_nodes() as $child)<br \/>\n    if ( ($child->node_type() == XML_ELEMENT_NODE) &#038;&#038; ($child->tagname() == $tagname) )<br \/>\n      foreach ($child->child_nodes() as $sub)<br \/>\n        if  ($sub->node_type() == XML_TEXT_NODE)<br \/>\n            return trim(utf8_decode($sub->content));<br \/>\n} \/\/getElement()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# function getChannelData():<br \/>\n# Mit einer XPath-Abfrage wird nach dem <channel>-Element gesucht und alle<br \/>\n# Nachfolge-Elemente mit Ausnahme der <item>-Elemente ausgelesen und in einem<br \/>\n# assoziativen Feld gespeichert. Dieses Feld wird an den Aufrufer zureuckgegeben.<br \/>\n# IN:  $ctx: DOM-Kontext<br \/>\n# OUT: assoziatives Feld mit den Channel-Daten (title, link, description&#8221;<br \/>\n#      language, creator, rights, image)<br \/>\n#&#8212;&#8211;<br \/>\nfunction getChannelData($ctx)<br \/>\n{<br \/>\n  $result = xpath_eval($ctx, &#8220;\/channel&#8221;);<br \/>\n  $nodes = $result->nodeset;<\/p>\n<p>  foreach ($nodes as $node)<br \/>\n    $channel_feld = array (&#8220;title&#8221; => getElement($node, &#8220;title&#8221;),<br \/>\n                           &#8220;link&#8221; => getElement($node, &#8220;link&#8221;),<br \/>\n                           &#8220;description&#8221; => getElement($node, &#8220;description&#8221;),<br \/>\n                           &#8220;language&#8221; => getElement($node, &#8220;language&#8221;),<br \/>\n                           &#8220;creator&#8221; => getElement($node, &#8220;creator&#8221;),<br \/>\n                           &#8220;rights&#8221; => getElement($node, &#8220;rights&#8221;),<br \/>\n                           &#8220;image&#8221; => getElement($node, &#8220;image&#8221;));<\/p>\n<p>  return $channel_feld;<\/p>\n<p>} \/\/getChannelData()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n# function getNightloop():<br \/>\n# IN:   $channel (string): Kategorie der Schlagzeilen<br \/>\n#       $items (integer):  Anzahl der zurueckzugebenden Schlagzeilen<br \/>\n# OUT:  Feld mit zwei assoziativen Feldern, die die Channel-Daten und die Daten<br \/>\n#       der Schlagzeilen enthalten.<br \/>\n#&#8212;&#8211;<br \/>\nfunction getNightloop($channel, $items)<br \/>\n{<br \/>\n  $doc = getXML($channel, $items);      #&#8211; Die XML-datei vom Server holen.<br \/>\n  $dom = domxml_open_mem($doc);         #&#8211; Ein DOM im Speicher zeugen.<br \/>\n  $ctx = xpath_new_context($dom);       #&#8211; Einen XPath-Kontext erzeugen.<br \/>\n  $channel_data = getChannelData($ctx); #&#8211; Die Channel-daten holen.<\/p>\n<p>  #&#8212;&#8211;<br \/>\n  # und jetzt die Items auslesen.<br \/>\n  #&#8212;&#8211;<br \/>\n  $result = xpath_eval($ctx,&#8221;\/\/item&#8221;);  #&#8211; Nach *allen* Items suchen.<br \/>\n  $nodes = $result->nodeset;            #&#8211; Aus dem Objekt eine Liste erstellen.<\/p>\n<p>  #&#8212;&#8211;<br \/>\n  # Aus den Nodes ein assoziatives Feld erstellen.<br \/>\n  #&#8212;&#8211;<br \/>\n  foreach ($nodes as $node)<br \/>\n     $feld[] = array(&#8220;title&#8221; => getElement($node, &#8220;title&#8221;),<br \/>\n                     &#8220;description&#8221; => getElement($node, &#8220;description&#8221;),<br \/>\n                     &#8220;link&#8221; => getElement($node, &#8220;link&#8221;));<\/p>\n<p>  return array($channel_data, $feld); #&#8212; Das Channel- und Itemsfeld zurueckgeben.<\/p>\n<p>} \/\/getNightloop<\/p>\n<p>?><\/p>\n<p>2.3. include\/inc_client_soap.php<br \/>\n<?php\n\n#======================================================================================\n# Dieses Modul verbindet sich mit dem Nightloop-Backend per HTTP und uebertraegt als\n# Parameter die Werte \"cat\" und \"items\". \"cat\" enthaelt die Nightloop-Kategorie und\n# \"items\" die Anzahl der gewuenschten Schlagzeilen.\n#\n# Die Funktion \"getNightloop(cat, items)\" gibt als Funktionsergebnis einen String\n# zurueck an den Aufrufer, der die Schlagzeilen in XML-Darstellung enthaelt.\n#======================================================================================\n\n#---------------------------------------------------------------------------------------\n# function getXML():\n# Wird der Funktion als einziger Parameter der Kategorie-Name uebergeben, so werden alle\n# Schlagzeilen dieser Kategorie zurueckgegeben, ansonsten nur \"$item\" Schlagzeilen.\n# Ist \"$item\" groesser als die Anzahl der Schlagzeilen, so werden ohne Fehlermeldung alle\n# Schlagzeilen zurueckgegeben.\n#\n# IN:   -\/-\n# OUT:  $page (string): XML-Baum\n#-----\nfunction getXML($channel, $items)\n{\n\n  # URL des Nightloop-SOAP-Backends.\n  $url = \"http:\/\/develop.nwn.int\/schroeer\/tennis\/soap\/backend_soap.php\";\n\n  # Wir brauchen das SOAP-Modul\n  require_once(\"include\/nusoap.php\");\n\n  # einen neuen Client erzeugen und mit dem SOAP-backend verbinden.\n  $soap_client = new soapclient($url);\n\n  # Die notwendigen Parameter erstellen\n  $parameters = array(\"cat\"=>$channel, &#8220;items&#8221;=>$items);<\/p>\n<p>  # Den SOAP-Server abfragen und den XML-String zurueckgeben.<br \/>\n  return $soap_client->call(&#8216;backend&#8217;, $parameters);<\/p>\n<p>}<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# function getElement():<br \/>\n# Aus den Nachfolger-Nodes des uebergebenden Nodes wird der Wert des<br \/>\n# ersten Textnode gesucht und zurueckgegeben. Wurde kein Textnode gefunden<br \/>\n# bleibt der Rueckgabewert undefiniert.<br \/>\n#<br \/>\n# IN:   $node:    Node, dessen Textelement ausgelesen werden sollen<br \/>\n#       $tagname (string): Name des auszulesenden Textelements<br \/>\n# OUT:  Wert des Textnodes<br \/>\n#&#8212;&#8211;<br \/>\nfunction getElement($node, $tagname)<br \/>\n{<br \/>\n  foreach ($node->child_nodes() as $child)<br \/>\n    if ( ($child->node_type() == XML_ELEMENT_NODE) &#038;&#038; ($child->tagname() == $tagname) )<br \/>\n      foreach ($child->child_nodes() as $sub)<br \/>\n        if  ($sub->node_type() == XML_TEXT_NODE)<br \/>\n            return trim(utf8_decode($sub->content));<br \/>\n} \/\/getElement()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# function getChannelData():<br \/>\n# Mit einer XPath-Abfrage wird nach dem <channel>-Element gesucht und alle<br \/>\n# Nachfolge-Elemente mit Ausnahme der <item>-Elemente ausgelesen und in einem<br \/>\n# assoziativen Feld gespeichert. Dieses Feld wird an den Aufrufer zureuckgegeben.<br \/>\n# IN:  $ctx: DOM-Kontext<br \/>\n# OUT: assoziatives Feld mit den Channel-Daten (title, link, description<br \/>\n#      language, creator, rights, image)<br \/>\n#&#8212;&#8211;<br \/>\nfunction getChannelData($ctx)<br \/>\n{<br \/>\n  $result = xpath_eval($ctx, &#8220;\/channel&#8221;);<br \/>\n  $nodes = $result->nodeset;<\/p>\n<p>  foreach ($nodes as $node)<br \/>\n    $channel_feld = array (&#8220;title&#8221; => getElement($node, &#8220;title&#8221;),<br \/>\n                           &#8220;link&#8221; => getElement($node, &#8220;link&#8221;),<br \/>\n                           &#8220;description&#8221; => getElement($node, &#8220;description&#8221;),<br \/>\n                           &#8220;language&#8221; => getElement($node, &#8220;language&#8221;),<br \/>\n                           &#8220;creator&#8221; => getElement($node, &#8220;creator&#8221;),<br \/>\n                           &#8220;rights&#8221; => getElement($node, &#8220;rights&#8221;),<br \/>\n                           &#8220;image&#8221; => getElement($node, &#8220;image&#8221;));<\/p>\n<p>  return $channel_feld;<\/p>\n<p>} \/\/getChannelData()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n# function getNightloop():<br \/>\n# IN:   $channel (string): Kategorie der Schlagzeilen<br \/>\n#       $items (integer):  Anzahl der zurueckzugebenden Schlagzeilen<br \/>\n# OUT:  Feld mit zwei assoziativen Feldern, die die Channel-Daten und die Daten<br \/>\n#       der Schlagzeilen enthalten.<br \/>\n#&#8212;&#8211;<br \/>\nfunction getNightloop($channel, $items)<br \/>\n{<br \/>\n  $doc = getXML($channel, $items);      #&#8211; Die XML-datei vom Server holen.<br \/>\n  $dom = domxml_open_mem($doc);         #&#8211; Ein DOM im Speicher zeugen.<br \/>\n  $ctx = xpath_new_context($dom);       #&#8211; Einen XPath-Kontext erzeugen.<br \/>\n  $channel_data = getChannelData($ctx); #&#8211; Die Channel-daten holen.<\/p>\n<p>  #&#8212;&#8211;<br \/>\n  # und jetzt die Items auslesen.<br \/>\n  #&#8212;&#8211;<br \/>\n  $result = xpath_eval($ctx,&#8221;\/\/item&#8221;);  #&#8211; Nach *allen* Items suchen.<br \/>\n  $nodes = $result->nodeset;            #&#8211; Aus dem Objekt eine Liste erstellen.<\/p>\n<p>  #&#8212;&#8211;<br \/>\n  # Aus den Nodes ein assoziatives Feld erstellen.<br \/>\n  #&#8212;&#8211;<br \/>\n  foreach ($nodes as $node)<br \/>\n     $feld[] = array(&#8220;title&#8221; => getElement($node, &#8220;title&#8221;),<br \/>\n                     &#8220;description&#8221; => getElement($node, &#8220;description&#8221;),<br \/>\n                     &#8220;link&#8221; => getElement($node, &#8220;link&#8221;));<\/p>\n<p>  return array($channel_data, $feld); #&#8212; Das Channel- und Itemsfeld zurueckgeben.<\/p>\n<p>} \/\/getNightloop<\/p>\n<p>?><\/p>\n<p>3. Perl-Client<br \/>\n3.1. nightloop.pm<br \/>\npackage nightloop;<\/p>\n<p>use XML::XPath;             # XPAth-Ausdruecker ermoeglichen.<br \/>\nuse XML::XPath::XMLParser;  # XML-Parsing ermoeglichen.<br \/>\nuse XML::XPath::NodeSet;<br \/>\nuse Encode;                 # UTF8-Dekodierung erlauben.<\/p>\n<p>use Exporter;               # Tool zu Modulerstellung.<br \/>\n$VERSION=1.0;               # Versionsnummer dieses Moduls.<\/p>\n<p>@EXPORT = qw(getNightloop); # Es soll nur die Subroutine &#8220;getNightloop&#8221;<br \/>\n                            # exportiert werden.<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n# sub getXML_HTTP<br \/>\n#<br \/>\n# Diese Subroutine holt sich vom Server per HTTP ein Dokument, das<br \/>\n# <ITEMS> Schlagzeilen aus der Kategoprie <CAT> beinhaltet.<br \/>\n#<br \/>\n# IN:   CAT (string) => Kategorie, die uebertragen werden soll<br \/>\n# &#8212;   ITEMS (int)  => Anzahl der zu uebertragenden Schlagzeilen<br \/>\n# OUT:  (string) => XML-Dokument mit den Schlagzeilen<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<\/p>\n<p>sub getXML_HTTP<br \/>\n{<\/p>\n<p>  use LWP::Simple;            # Webzugriff ermoeglichen.<\/p>\n<p>  my %arg = ( CAT => &#8216;xxx&#8217;,   # Kategorie<br \/>\n              ITEMS => -1,    # Anzahl<br \/>\n              @_,);           # Hier steht die Liste der Argumentenpaare<\/p>\n<p>  # URI des Backend-Skriptes<br \/>\n  my $url = &#8220;http:\/\/develop.nwn.int\/schroeer\/tennis\/soap\/backend.php&#8221;;<\/p>\n<p>  # die URI entsprechend den Parametern aufbereiten<br \/>\n  $url .= &#8220;?cat=$arg{CAT}&#8221;;<\/p>\n<p>  # Wenn <ITEMS> angegeben wurden, URI aufbereiten<br \/>\n  if (ITEMS>=0)<br \/>\n  {<br \/>\n    $url .= &#8220;&#038;items=$arg{ITEMS}&#8221;;<br \/>\n  } #if<\/p>\n<p>  # Die Daten vom Server uebertragen und an den Aufrufer zurueckgeben.<br \/>\n  return get($url);<\/p>\n<p>} #getXML_HTTP()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n# sub getXML_SOAP<br \/>\n#<br \/>\n# Diese Subroutine holt sich vom Server per SOAP ein Dokument, das<br \/>\n# <ITEMS> Schlagzeilen aus der Kategoprie <CAT> beinhaltet.<br \/>\n#<br \/>\n# IN:   CAT (string) => Kategorie, die uebertragen werden soll<br \/>\n# &#8212;   ITEMS (int)  => Anzahl der zu uebertragenden Schlagzeilen<br \/>\n# OUT:  (string) => XML-Dokument mit den Schlagzeilen<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<\/p>\n<p>sub getXML_SOAP<br \/>\n{<\/p>\n<p>  ($cat, $items) = @_;   # Parameter uebernehmen.<\/p>\n<p>  use SOAP::Lite;   # Das notwendige SOAP-Modul einbinden.<\/p>\n<p>  # URI des SOAP-Backend-Skriptes<br \/>\n  $url = &#8220;http:\/\/develop.nwn.int\/schroeer\/tennis\/soap\/backend_soap.php&#8221;;<\/p>\n<p>  # Das SOAP-Modul mit den entprechenden Parametern aufrufen und das<br \/>\n  # XML Dokument als String an den Aufrufer zurueckgeben.<br \/>\n  return SOAP::Lite<br \/>\n    -> uri(&#8216;http:\/\/nightloop.de\/Backend\/&#8217;)<br \/>\n    -> proxy($url)<br \/>\n    -> backend($cat, $items)<br \/>\n    -> result;<\/p>\n<p>} #getXML_SOAP()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#<br \/>\n#<br \/>\n# IN:   $tag (string): XPATH-Ausdruck des zu findenden Tags.<br \/>\n# &#8212;   $node (node):  (Sub-) Node, der das Tag enthaelt.<br \/>\n#<br \/>\n# OUT:  (string): Der Wert des $tag-Elements<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<\/p>\n<p>sub getElement<br \/>\n{<\/p>\n<p>  (my $tag, my $node) = @_;      # Parameter uebernehmen<\/p>\n<p>  $child = $node->find($tag);    # gefordertes Element aus dem XML-<br \/>\n                                 # Dokument auslesen<\/p>\n<p>  $child =~ s\/^\\s+\/\/;            # remove leading whitespace<br \/>\n  $child =~ s\/\\s+$\/\/;            # remove trailing whitespace<\/p>\n<p>  return decode(&#8220;utf8&#8243;, $child); # String mit UTF-8 dekodieren und<br \/>\n                                 # an den Aufrufer zurueckgeben<\/p>\n<p>} #getElement()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#<br \/>\n# IN:   N\/A<br \/>\n# &#8212;<br \/>\n#<br \/>\n# OUT:  (hash array): Assoziatives Feld mit den Channel-Daten<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<\/p>\n<p>sub getChannelData<br \/>\n{<\/p>\n<p>  %feld = ();   # Das Array initialisieren<\/p>\n<p>  $nodes = $xp->find(&#8216;\/channel&#8217;); # XPATH-Ausdruck fuer das Channel-Tag<\/p>\n<p>  # Alle Sub-Nodes von Channel ueberpruefen und das Feld<br \/>\n  # entsprechend belegen.<br \/>\n  foreach my $node ($nodes->get_nodelist)<br \/>\n  {<br \/>\n    $feld{title} = getElement(&#8216;title&#8217;, $node);<br \/>\n    $feld{description} = getElement(&#8216;description&#8217;, $node);<br \/>\n    $feld{link} = getElement(&#8216;link&#8217;, $node);<br \/>\n    $feld{language} = getElement(&#8216;language&#8217;, $node);<br \/>\n    $feld{creator} = getElement(&#8216;creator&#8217;, $node);<br \/>\n    $feld{rights} = getElement(&#8216;rights&#8217;, $node);<br \/>\n    $feld{image} = getElement(&#8216;image&#8217;, $node);<br \/>\n  } #foreach<\/p>\n<p>  return %feld; # Das assoziative Feld an den Aufrufer zurueckgeben.<\/p>\n<p>} #getChannelData()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#<br \/>\n# IN:  $channel (string):<br \/>\n# &#8212;  $items (int):<br \/>\n#      $protocol (string):<br \/>\n#<br \/>\n# OUT: ( array (hash array, hash array) ) Daten und Schlagzeilen des Channels<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<\/p>\n<p>sub getNightloop<br \/>\n{<\/p>\n<p>  my %arg = ( channel => &#8221;,<br \/>\n              items => 10,<br \/>\n              protocol => &#8220;HTTP&#8221;,<br \/>\n              @_,);           # Hier steht die Liste der Argumentenpaare<\/p>\n<p>  # parameter an lokale Variablen uebergeben<br \/>\n  my $channel = $arg{&#8216;channel&#8217;};<br \/>\n  my $items = $arg{&#8216;items&#8217;};<br \/>\n  my $protocol = $arg{&#8216;protocol&#8217;};<\/p>\n<p>  # Welches Protokoll soll benutzt werden?<br \/>\n  my $xml;<br \/>\n  if ($protocol == &#8220;HTTP&#8221;)<br \/>\n  {<br \/>\n    $xml = getXML_HTTP(CAT => $channel, ITEMS => $items);<br \/>\n  } #if<br \/>\n  else<br \/>\n  {<br \/>\n    $xml = getXML_SOAP(CAT => $channel, ITEMS => $items);<br \/>\n  } #else<\/p>\n<p>  # Ein neues globales XPath-Object erstellen<br \/>\n  $xp = XML::XPath->new($xml);<\/p>\n<p>  # Die Channel-Daten in ein globales Array speichern<br \/>\n  %channelData = getChannelData();<\/p>\n<p>  $nodes = $xp->find(&#8216;\/\/item&#8217;);  #XPath auf alle <item>-Elemente<\/p>\n<p>  @items= (); # globales Array initialisieren<\/p>\n<p>  # Alle Nodes durchsuchen und das Array entsprechend fuellen<br \/>\n  foreach my $node ($nodes->get_nodelist)<br \/>\n  {<br \/>\n    push @items, { &#8216;title&#8217; => getElement(&#8216;title&#8217;, $node),<br \/>\n                   &#8216;description&#8217; => getElement(&#8216;description&#8217;, $node),<br \/>\n                   &#8216;link&#8217; => getElement(&#8216;link&#8217;, $node)<br \/>\n                 };<br \/>\n  } #foreach<\/p>\n<p>  # Referenzen auf die beiden Felder an den Aufrufer zurueckgeben<br \/>\n  return (\\%channelData, \\@items);<\/p>\n<p>} #getNightloop<\/p>\n<p>#&#8211;eof<\/p>\n<p>3.2. client.pl<br \/>\n#!\/usr\/bin\/perl<\/p>\n<p>use nightloop;<br \/>\nuse CGI;<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# Erstellt ein Inline-Stylesheet um die Tabelle und die Datenfelder formatiert<br \/>\n# darstellen zu koennen.<br \/>\n# IN:  N\/A<br \/>\n# &#8212;<br \/>\n# OUT: (string) Stylesheet-Informationen<br \/>\n# &#8212;-<br \/>\n#&#8212;&#8212;<br \/>\nsub getInlineStyleSheet<br \/>\n{<\/p>\n<p> return qq{<\/p>\n<p><STYLE TYPE=\"text\/css\"><br \/>\n<!--\n.nightloop_td { \n                border-color: black; \n                border-style: solid; \n                border-width: 1px;\n              }\n.nightloop_table {\n                   border-color: #000;\n                   border-style: solid;\n                   border-width: 2px;\n                   border-collapse: collapse;}\n--><br \/>\n<\/STYLE><\/p>\n<p> }; #&#8211; qq<\/p>\n<p>} #&#8211; getInlineStylesheet()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# Erzeugen der Ausgabe-Tabelle<br \/>\n#&#8212;&#8211;<br \/>\nsub showPanel<br \/>\n{<br \/>\n  ($channeldata, $schlagzeilen) = @_;     # Parameter uebernehmen<\/p>\n<p>  print CGI::header();                    # HTML-Header-Daten ausgeben<br \/>\n  print CGI::start_html(&#8216;Nightloop.de&#8217;);  # HTML-Start-Tags ausgeben<\/p>\n<p>  print getInlineStyleSheet();            #&#8211; Stylesheet zur Formatierung erzeugen<\/p>\n<p>  # Neue Tabelle erzeigen und einen Tabellenkopf mit Titel, link und Logo erzeugen<br \/>\n  print qq{                                  <\/p>\n<table class=\"nightloop_table\">\n<tr bgcolor=#000000>\n<th>\n    <a href=\"$channeldata->{&#8220;link&#8221;}&#8221;><br \/>\n    <img decoding=\"async\" src=\"$channeldata->{&#8220;image&#8221;}&#8221; border=0><\/a><\/tr>\n<\/th>\n<p>  };<\/p>\n<p>  foreach $schlagzeile (@{$schlagzeilen})<br \/>\n  {<br \/>\n    print qq{<\/p>\n<tr>\n<td class=\\\"nightloop_td\\\">\n<li><$schlagzeile->{&#8220;link&#8221;}>$schlagzeile->{&#8220;title&#8221;}<\/a><br \/>\n      <br \/><small><i>$schlagzeile->{&#8220;description&#8221;}<\/i><\/small>\n      <\/td>\n<\/tr>\n<p>      };<br \/>\n  } #&#8211; foreach<\/p>\n<p>  print &#8220;<\/table>\n<p>&#8220;;<\/p>\n<p>  print CGI::end_html();<\/p>\n<p>} #&#8211; showPanel()<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>($channeldata, $items) = nightloop::getNightloop( channel => &#8220;magazin_stars&#8221;,<br \/>\n                                                  protocol => &#8220;HTTP&#8221;,<br \/>\n                                                  items => 2<br \/>\n                                                );<br \/>\nshowPanel($channeldata, $items);<\/p>\n<p>4. Web-Interface<br \/>\n4.1. syndic8.php<br \/>\n<HTML><br \/>\n  <head><br \/>\n    <title><br \/>\n      nightloop.de &#8212; Content Syndication<br \/>\n    <\/title><\/p>\n<link rel=\"stylesheet\" type=\"text\/css\" href=\"wi.css\">\n    <script language=\"javascript\"><\/p>\n<p>      var win= null;<\/p>\n<p>      function NewWindow(fieldName)\n      {\n        \/\/ Save the name of the target input field to the hidden input\n        document.form1.fieldName.value=fieldName<\/p>\n<p>        \/\/ Opens the Color Chart Popup\n        win2=window.open('colorchooser.php','colorPop','height=130,width=274,top=150,left=100,scrollbars=no,resizable=no');\n      }<\/p>\n<p>      function doIt(color)\n      {\n        \/\/ Get the selected color and send it to the target input field\n        eval('document.form1.' + document.form1.fieldName.value + '.value=\"' + color + '\"');\n        switch (document.form1.fieldName.value)\n        {\n          case \"titelfarbe\":\n            eval('document.getElementById(\"nltitel\").style.color = \"' + color + '\"');\n            break;\n          case \"titelhintergrund\":\n            eval('document.getElementById(\"nltitel\").style.backgroundColor = \"' +  color + '\"');\n            break;\n          case \"hintergrund\":\n            for (var i = 1; i<= 5; i++)\n              eval('document.getElementById(\"nltd' + i + '\").style.backgroundColor = \"' + color + '\"');\n            break;\n          case \"textfarbe\":\n            for (var i = 1; i<= 5; i++)\n              eval('document.getElementById(\"nltd' + i + '\").style.color = \"' + color + '\"');\n            break;\n          case \"tabellenrand\":\n        for (var i = 1; i <= 5; i++)\n              eval('document.getElementById(\"nltd' + i + '\").style.borderColor = \\'' + color + '\\'');\n              eval('document.getElementById(\"nltable\").style.borderColor = \"' + color + '\"');\n             break;\n        } \/\/switch\n      } \/\/doIt()\n\n      function borderwidth(size)\n      {\n        for (var i=1; i<=5; i++)\n          eval('document.getElementById(\"nltd' + i + '\").style.borderWidth = \\'' + \n               document.form1.randdicke.value + 'px\\'');\n        eval('document.getElementById(\"nltable\").style.borderWidth = \\'' + document.form1.randdicke.value + 'px\\'');\n       }\n\n     <\/script><\/p>\n<p>  <\/HEAD><\/p>\n<p><!-- ================================================================================= --><\/p>\n<p>  <BODY><\/p>\n<table id=\"header\">\n<tr>\n<td>\n        <a href=\"http:\/\/www.nightloop.de\"><br \/>\n        <img decoding=\"async\" src=\"images\/logo.gif\" border=0><\/a>\n      <\/td>\n<td width=\"100%\" height=\"82\" align=\"right\">\n        <img decoding=\"async\" src=\"images\/kollage.jpg\">\n      <\/td>\n<\/tr>\n<tr id=\"whiteline\">\n<td colspan=3 id=\"whiteline\">\n        <font id=\"heading\" color=\"white\" size=\"+3\"><br \/>\n        <b><br \/>\n          &nbsp;content syndication<br \/>\n        <\/b>\n      <\/td>\n<\/tr>\n<\/table>\n<div id=\"leftContent\">\n<form id=\"form1\" method=\"POST\" name=\"form1\" action=\"template.php\">\n  <input type=\"hidden\" name=\"fieldName\" value=\"\"><br \/>\n  <center><\/p>\n<table id=\"innertable\">\n<tr>\n<td>Kategorie:<\/td>\n<td>\n      <select name=\"kategorie\" size=\"1\"><\/p>\n<p>        <?php\n          $handle = @opendir(\"include\");\n          while ($file = @readdir ($handle))\n\n          # Nur Dateien, die mit \"sql\" anfangen und mit \"php\" aufhoeren.\n          if (eregi(\"^sql.*php$\", $file))\n          {\n             $f = substr($file, 4);\n             $f = substr($f, 0, strlen($f)-4);\n             print \"<option>$f<\/option>\";<br \/>\n          }<br \/>\n        ?><br \/>\n      <\/select>\n    <\/td>\n<\/tr>\n<tr>\n<td>Anzahl Schlagzeilen:<\/td>\n<td><input type=\"text\" size=\"2\" value=\"10\" name=\"items\"><\/td>\n<\/tr>\n<\/table>\n<table id=\"innertable\">\n  <?php\n  # Erstellen der Eingabemaske fuer die Farbwerte\n  $felder = array(\"Titel\" => array(\"name\" => \"titelfarbe\", \"default\" => \"#ffffff\"),<br \/>\n                \"Titelhintergrund\" => array(\"name\" => \"titelhintergrund\", \"default\"=>\"#000000\"),<br \/>\n                \"Hintergrund\" => array(\"name\" => \"hintergrund\", \"default\" => \"#ffffff\"),<br \/>\n                \"Text\" => array(\"name\" => \"textfarbe\", \"default\" => \"#000000\"),<br \/>\n                \"Neuer Link\" => array(\"name\" => \"neuerlink\", \"default\" => \"#0000ff\"),<br \/>\n                \"Hover Link\" => array(\"name\" => \"hoverlink\", \"default\" => \"#0000ff\"),<br \/>\n                \"Besuchter Link\" => array(\"name\" => \"besuchterlink\", \"default\" => \"#ff00ff\"),<br \/>\n                \"Tabellenrand\"=>array(\"name\"=>\"tabellenrand\", \"default\" => \"#000000\")<br \/>\n               );<\/p>\n<p>while (list($key,$value) = each ($felder))<br \/>\n{<br \/>\n  print \"<\/p>\n<tr>\n<td>$key<\/td>\n<p>\";<br \/>\n  print \"<\/p>\n<td><input id=\\\"eingabefeld\\\" type=\\\"text\\\" name=\\\"\".$value[\"name\"].\"\\\" value=\\\"\".$value[\"default\"].\"\\\" size=\\\"7\\\" style=\\\"font-family: monospace;\\\"><\/td>\n<p>\";<br \/>\n  print \"<\/p>\n<td><input type=\\\"button\\\" name=\\\"bg\\\" value=\\\"Farben\\\" onclick=\\\"NewWindow('\".$value[\"name\"].\"');return false\\\" style=\\\"font-size:12\\\"><\/td>\n<p>\";<br \/>\n  print \"<\/tr>\n<p>\";<br \/>\n}<br \/>\n?><\/p>\n<tr>\n<td>St&auml;rke Tabellenrand<\/td>\n<td><select onChange=\"borderwidth(this);\" name=\"randdicke\" size=\"1\"><br \/>\n<?php\n   for ($i=1; $i<=10; $i++)\n     print \"<option value=\\\"$i\\\">$i<\/option>\";<br \/>\n?><\/p>\n<p>  <select><br \/>\n<\/tr>\n<tr>\n<td>\n    Textausrichtung\n  <\/td>\n<td>\n  <select name=\"ausrichtung\"><option>linksb&uuml;ndig<\/option><option>zentriert<\/option><option>rechtsb&uuml;ndig<\/option><\/select><br \/>\n<\/table>\n<table id=\"innertable\">\n<tr>\n<td>\n      Sprache\n    <\/td>\n<td>\n      <select name=\"sprache\" id=\"sprache\"><\/p>\n<p>        <?php\n          $handle = @opendir(\".\");\n          while ($file = @readdir ($handle))\n\n          # Nur Dateien, die mit \"sql\" anfangen und mit \"php\" aufhoeren.\n          if (eregi(\"^vorlage.*txt$\", $file))\n          {\n            $f = substr($file, 8);\n            $f = substr($f, 0, strlen($f)-4);\n            print \"<option>$f<\/option>\";<\/p>\n<p>          }<br \/>\n       ?><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><\/center><br \/>\n<input type=\"submit\" value=\"Templates erstellen\"><\/p>\n<\/form>\n<\/div>\n<div id=\"rightcontent\">\n<p><?php\ninclude (\"include\/config.inc\");\nglobal $base_url;\n$base_url = \"http:\/\/develop.nwn.int\/www.nightloop.de\/main_magazin.php\";\n\n$handle = @opendir(\"include\");\nwhile ($file = @readdir ($handle))\n  if (eregi(\"^sql.*php$\", $file))\n    break;\n\ninclude(\"include\/$file\");\n$sql .= \" limit 5\";\n#--- Neues DB-Object erzeugen und Daten auslesen\nglobal $DB_M_dbase, $DB_S_dbase;\n$DB_M_dbase = $DB_S_dbase = \"teleschau\";\n$db = new NWN_DB or\n      die (\"Es konnte keine Verbindung zur Datenbank hergestellt werden.\");\n$db->read($sql);<\/p>\n<p>#-- Daten in einem assosiativen Feld speichern<br \/>\nwhile ($row = $db->get())<br \/>\n  $feld[] = array(\"title\"       => $row[\"title\"],<br \/>\n                  \"description\" => $row[\"description\"],<br \/>\n                  \"link\"        => $row[\"href\"]);<\/p>\n<p>$db->close(); #--- Datenbank schliessen<\/p>\n<p>?><\/p>\n<table class=\"nl\" id=\"nltable\">\n<tr>\n<td id=\"nltitel\">nightloop.de<br \/><small><i>die nwn party community<\/i><\/small><\/td>\n<\/tr>\n<p><?php\n  $i=1;\n  foreach ($feld as $schlagzeile)\n   print \"\n\n<tr id\\\"=nltr$i\\\">\n<td class=\\\"nl\\\" id=\\\"nltd\" . $i++ . \"\\\">\n<li>\" . $schlagzeile[\"title\"] .<br \/>\n         \"<br \/><small><i>\" . $schlagzeile[\"description\"] . \"<\/i><\/small><\/li>\n<\/td>\n<\/tr>\n<p>\\n\";<br \/>\n?><\/p>\n<\/table>\n<\/div>\n<p><br clear=\"all\"><\/p>\n<div id=\"hinweise\">\n  <b><br \/>\n    Hinweise:<br \/>\n  <\/b><\/p>\n<li>\n    Die Farben f&uuml;r die Links k&ouml;nnen leider nicht interaktiv dargestellt werden.\n  <\/li>\n<\/div>\n<div id=\"unten\">\n  <small><br \/>\n    &copy; 2003 nordwest.net&nbsp;<br \/>\n  <\/small>\n<\/div>\n<p><\/BODY><br \/>\n<\/HTML><\/p>\n<p>4.2. syndic8.css<br \/>\nbody {<br \/>\n       margin: 0px;<br \/>\n       background-color: aabbcc;<br \/>\n       color: black;<br \/>\n     }<\/p>\n<p>#header {<br \/>\n         border:          0px;<br \/>\n         background-color: #001743;<br \/>\n         border-collapse: collapse;<br \/>\n         padding: 0px;<br \/>\n         }<\/p>\n<p>#heading { \/* Ueberschrift *\/<br \/>\n         font-weight: bolder;<br \/>\n         font-family: sans-serif;<br \/>\n         }<\/p>\n<p>#leftcontent { \/* Linker Block *\/<br \/>\n         float:           left;<br \/>\n         width:           50%;<br \/>\n         background-color:#fff;<br \/>\n         border:          2px solid #000;<br \/>\n         margin-right:    15px;<br \/>\n         margin-left:     10px;<br \/>\n         }<\/p>\n<p>#rightcontent {<br \/>\n         padding-left:    10px;<br \/>\n         margin-top:      10px;<br \/>\n         margin-right:    10px;<br \/>\n         }<\/p>\n<p>#whiteline {<br \/>\n         border-top:      2px solid #fff;<br \/>\n         border-bottom:   2px solid #fff;<br \/>\n         }<\/p>\n<p>#innertable {<br \/>\n         border: 1px solid #000;<br \/>\n         border-collapse: collapse;<br \/>\n         margin-left: auto;<br \/>\n         margin-right: auto;<br \/>\n         margin-top: 5px;<br \/>\n         }<\/p>\n<p>#unten {<br \/>\n         border-top: 1px solid #fff;<br \/>\n         position: absolute;<br \/>\n         bottom: 0px;<br \/>\n         background-color: #001743;<br \/>\n         width: 100%;<br \/>\n         color: white;<br \/>\n         text-align: right;<br \/>\n         }<\/p>\n<p>#eingabefeld {<br \/>\n         border: 1px solid #000;<br \/>\n         }<\/p>\n<p>#hinweise<br \/>\n       {<br \/>\n        margin-left: 10px;<br \/>\n        margin-top: 10px;<br \/>\n       }<\/p>\n<p>#nltitel {<br \/>\n       color: #ffffff;<br \/>\n       background-color: #000000;<br \/>\n       }<\/p>\n<p>.nl {<br \/>\n     border-color: #000;<br \/>\n     border-style: solid;<br \/>\n     border-width: 1px;<br \/>\n     border-collapse: collapse;<br \/>\n     background-color: #fff;<br \/>\n    }<\/p>\n<p>4.3. colorchooser.php<br \/>\n<html><br \/>\n<head><title>Color Chooser<\/title><\/p>\n<p><script TYPE=\"text\/javascript\">\n  function loadfocus()\n  {\n    refButton = opener.document.form1.fieldName.value\n    window.focus()\n  }\n<\/script><\/p>\n<p><\/head><\/p>\n<p><body onload=\"loadfocus()\" onblur=\"window.focus()\" bgcolor=\"#334455\" leftmargin=\"0\" marginwidth=\"0\" topmargin=\"0\" marginheight=\"0\"><\/p>\n<p><?php\n\n\n$farben = array(\n                 array(\"ffeeee\", \"ffcccc\", \"ffaaaa\", \"ff8888\", \"ff6666\", \"ff4444\",\n                       \"ff2222\", \"ff0000\", \"ee0000\", \"cc0000\", \"aa0000\", \"880000\",\n                       \"770000\", \"660000\", \"550000\", \"440000\", \"330000\"),\n\n                 array(\"eeffee\", \"ccffcc\", \"aaffaa\", \"88ff88\", \"66ff66\", \"44ff44\",\n                       \"22ff22\", \"00ff00\", \"00ee00\", \"00cc00\", \"00aa00\", \"008800\",\n                       \"007700\", \"006600\", \"005500\", \"004400\", \"003300\"),\n\n                 array(\"eeeeff\", \"ccccff\", \"aaaaff\", \"8888ff\", \"6666ff\", \"4444ff\",\n                       \"2222ff\", \"0000ff\", \"0000ee\", \"0000cc\", \"0000aa\", \"000088\",\n                       \"000077\", \"000066\", \"000055\", \"000044\", \"000033\"),\n\n                 array(\"ffffee\", \"ffffcc\", \"ffffaa\", \"ffff88\", \"ffff66\", \"ffff44\",\n                       \"ffff22\", \"ffff00\", \"eeee00\", \"cccc00\", \"aaaa00\", \"888800\",\n                       \"777700\", \"666600\", \"555500\", \"444400\", \"333300\"),\n\n                 array(\"ffeeff\", \"ffaaff\", \"ff88ff\", \"ff66ff\", \"ff44ff\", \"ff22ff\",\n                       \"ff00ff\", \"ee00ee\", \"cc00cc\", \"cc00cc\", \"aa00aa\", \"880088\",\n                       \"770077\", \"660066\", \"550055\", \"440044\", \"330033\"),\n\n                 array(\"ffddd0\", \"ffe0aa\", \"ffdd88\", \"ffcc77\", \"ffbb66\", \"ffaa55\",\n                       \"ffaa44\", \"ff9944\", \"ff8833\", \"ff7722\", \"ff6622\", \"ee5522\",\n                       \"dd4411\", \"cc3300\", \"aa2200\", \"882200\", \"662200\"),\n\n                 array(\"eeffff\", \"ccffff\", \"aaffff\", \"88ffff\", \"66ffff\", \"44ffff\",\n                       \"22ffff\", \"00ffff\", \"00eeee\", \"00cccc\", \"00aaaa\", \"008888\",\n                       \"007777\", \"006666\", \"005555\", \"004444\", \"003333\"),\n\n\n                 array(\"ffffff\", \"eeeeee\", \"dddddd\", \"cccccc\", \"bbbbbb\", \"aaaaaa\",\n                       \"a0a0a0\", \"999999\", \"888888\", \"777777\", \"666666\", \"555555\",\n                       \"444444\", \"333333\", \"222222\", \"111111\", \"000000\"),\n              );\n\n\nprint \"\n\n<table border=\\\"1\\\" bgcolor=\\\"#888888\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\";<\/p>\n<p>$size = 14;<br \/>\nfor ($i=0;$i<8;$i++)\n{\n  print \"\n\n<tr>\";<br \/>\n  $farbe = $farben[$i];<br \/>\n  for ($j=0;$j<17;$j++)\n  {\n    print \"\n\n<td bgcolor=$farbe[$j] height=\\\"$size\\\" width=\\\"$size\\\">\" .<br \/>\n          \"<a href=\\\"\\\"javascript:void(0);\\\" onclick=\\\"window.close();window.opener.doIt('#$farbe[$j]')\\\">\" .<br \/>\n          \"<img src=\\\"blank.gif\\\" border=\\\"0\\\" height=\\\"$size\\\" width=\\\"$size\\\" alt=\\\"#$farbe[$j]\\\">\".<br \/>\n          \"<\/a><\/td>\n<p>\";<br \/>\n  }<br \/>\n  print \"<\/tr>\n<p>\";<br \/>\n}<br \/>\nprint \"<\/table>\n<p>\";<br \/>\n?><\/p>\n<p>4.4. template.php<br \/>\n<?php\n\n# Liest die Vorlagen aus und ersetzt die Platzhalter mit den Parametern\n# aus dem Formular.Die Platzhalter sind mit \"{%\" und \"%}\" gekennzeichnet.\nfunction Ausgabe($sprache)\n{\n  # Die in der URl uebergebenen Parameter auslesen\n  $titelfarbe =       $_POST[\"titelfarbe\"];\n  $titelhintergrund = $_POST[\"titelhintergund\"];\n  $hintergrund =      $_POST[\"hintergrund\"];\n  $textfarbe =        $_POST[\"textfarbe\"];\n  $neuerlink =        $_POST[\"neuerlink\"];\n  $hoverlink =        $_POST[\"hoverlink\"];\n  $besuchterlink =    $_POST[\"besuchterlink\"];\n  $tabellenrand =     $_POST[\"tabellenrand\"];\n  $borderwidth =      $_POST[\"randdicke\"];\n  $ausrichtung =      $_POST[\"ausrichtung\"];\n  $sprache =          $_POST[\"sprache\"];\n  $items =            $_POST[\"items\"];\n  $kategorie =        $_POST[\"kategorie\"];\n\n\n  # Variablen in den Vorlagen haben die Form \/\/$variable\/\/\n  $trenner = \"\/\/\";\n\n  $zeilen = file(\"vorlage.\" . strtolower($sprache) . \".txt\");  # Die URL oeffnen\n\n  foreach ($zeilen as $zeile)                                  # eine Zeile nach der anderen\n\n    if (strpos($zeile, $trenner) > 0)                          # Variable in Zeile gefunden<br \/>\n      foreach (explode($trenner, $zeile) as $part)             # Zeile aufteilen<br \/>\n        if ($part{0} == \"$\")                                   # $ bezeichnet Variable<br \/>\n          eval (\"print $part;\");                               # \u00c5usgabe der Variablen<br \/>\n        else<br \/>\n          print $part;                                         # simpler Text<\/p>\n<p>    else<br \/>\n      print $zeile;                                            # simple Zeile<\/p>\n<p>}  # Ausgabe<\/p>\n<p>?><br \/>\n<html><br \/>\n  <head><br \/>\n    <title><br \/>\n      nightloop.de --- content syndication<br \/>\n    <\/title>\n    <link rel=\"stylesheet\" type=\"text\/css\" href=\"wi.css\">\n <\/head><\/p>\n<p>  <body><\/p>\n<table id=\"header\">\n<tr>\n<td>\n        <img decoding=\"async\" src=\"images\/logo.gif\">\n      <\/td>\n<td width=\"100%\" height=\"82\" align=\"right\">\n        <img decoding=\"async\" src=\"images\/kollage.jpg\">\n      <\/td>\n<\/tr>\n<tr id=\"whiteline\">\n<td colspan=3 id=\"whiteline\">\n        <font id=\"heading\" color=\"white\" size=\"+3\"><br \/>\n        <b><br \/>\n          &nbsp;content syndication<br \/>\n        <\/b>\n      <\/td>\n<\/tr>\n<\/table>\n<p>  <center><\/p>\n<table>\n<tr>\n<td>\n<form>\n   Um das Nightloop-Panel auf Ihrer web-Seite nutzen zu k&ouml;nnen ben&ouml;tigen Sie ein Modul, das alle<br \/>\n   notwendigen Routinen beinhaltet<br \/>\n   (Download) und eine Code-Vorlage, die Sie in Ihr <?=$sprache?>-Skript einf&uuml;gen m&uuml;ssen.<\/p>\n<p>\n   Diesen Code kopieren und an die gew&uuml;nschte Stelle in Ihrem Skript einf&uuml;gen:<\/td>\n<\/tr>\n<tr>\n<td>\n    <br \/>\n    <textarea name=\"template\" cols=\"70\" rows=\"25\"><\/p>\n<p><?php\n\n  Ausgabe($sprache);\n\n?><\/p>\n<p>    <\/textarea><br \/>\n  <\/form>\n<\/td>\n<\/tr>\n<\/table>\n<p>  <\/body><br \/>\n<\/html><\/p>\n<p>4.5. vorlage.perl.txt<br \/>\nsub getInlineStyleSheet()<br \/>\n{<br \/>\n  print qq{<\/p>\n<p><!--\n\n\n<style>\n\nA:link\n\t{\n\tcolor: \/\/$neuerlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nA:visited\n\t{\n\tcolor: \/\/$besuchterlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nA:hover\n\t{\n\tcolor: \/\/$hoverlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nnl_table\n\t{\n\tborder: \/\/$borderwidth\/\/ px solid \/\/$tabellenrand\/\/;\n\tborder-collapse: collapse;\n\t}\n\nnl_titel\n\t{\n\tcolor: \/\/$titelfarbe\/\/;\n\tbackground: \/\/$hintergrund\/\/;\n\t};\n\nnl_topic\n\t{\n\tborder: \/\/$borderwidth\/\/ px solid \/\/$tabellenrand\/\/;\n\tcolor: \/\/$textfarbe\/\/;\n\tbackground: \/\/$hintergrund\/\/;\n\t}\n\n\n-->};<\/p>\n<p>} #getInlineStyleSheet()<\/p>\n<p>sub showPanel($channel_data, $schlagzeilen)\n{\n  getInlineStyleSheet(); #-- Stylesheet zur Formatierung erzeugen<\/p>\n<p>  print \"<\/p>\n<p><table id=\\\"nl_table\\\">\";\n  print \"<\/p>\n<tr bgcolor=#000000>\n<th>\";\n  print \"<a href=\\\"\" . $channel_data[\"link\"] . \"\\\">\";\n  print \"<img src=\\\"\" . $channel_data[\"image\"] . \"\\\" border=0><\/a><\/tr>\n<\/th>\n<p>\";<\/p>\n<p>  foreach ($schlagzeilen as $schlagzeile)\n  {\n    print \"<\/p>\n<tr>\n<td class=\\\"nl_topic\\\"\" .\n          \"\n\n<li><\" . $schlagzeile[\"link\"] . \">\" . $schlagzeile[\"title\"].\"<\/a>\" .\n          \"<br \/><small><i>\" . $schlagzeile[\"description\"] . \"<\/i><\/small><\/td>\n<\/tr>\n<p>\";\n  } #foreach<\/p>\n<p>} #showPanel()<\/p>\n<p> list($channel_data, $schlagzeilen) = getNightloop(\/\/$kategorie\/\/, \/\/$items\/\/);\n showPanel($channel_data, $schlagzeilen);<\/p>\n<p>4.6. vorlage.php.txt<\/p>\n<p><!--\n\n\n<style>\n\nA:link\n\t{\n\tcolor: \/\/$neuerlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nA:visited\n\t{\n\tcolor: \/\/$besuchterlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nA:hover\n\t{\n\tcolor: \/\/$hoverlink\/\/;\n\ttext-decoration: underline;\n\t}\n\nnl_table\n\t{\n\tborder: \/\/$borderwidth\/\/ px solid \/\/$tabellenrand\/\/;\n\tborder-collapse: collapse;\n\t}\n\nnl_titel\n\t{\n\tcolor: \/\/$titelfarbe\/\/;\n\tbackground: \/\/$hintergrund\/\/;\n\t};\n\nnl_topic\n\t{\n\tborder: \/\/$borderwidth\/\/ px solid \/\/$tabellenrand\/\/;\n\tcolor: \/\/$textfarbe\/\/;\n\tbackground: \/\/$hintergrund\/\/;\n\t}\n\n\n-->\n<\/style>\n<p><?php\n\ninclude \"include\/inc_client_soap.php\";\n\nfunction showPanel($channel_data, $schlagzeilen)\n{\n\n  print \"\n \n<br \/>\n<table id=\\\"nl_table\\\">\";<br \/>\n  print \"<\/p>\n<tr bgcolor=#000000>\n<th>\";<br \/>\n  print \"<a href=\\\"\" . $channel_data[\"link\"] . \"\\\">\";<br \/>\n  print \"<img src=\\\"\" . $channel_data[\"image\"] . \"\\\" border=0><\/a><\/tr>\n<\/th>\n<p>\";<\/p>\n<p>  foreach ($schlagzeilen as $schlagzeile)<br \/>\n  {<br \/>\n    print \"<\/p>\n<tr>\n<td class=\\\"nl_topic\\\"\" .\n          \"\n\n<li><\" . $schlagzeile[\"link\"] . \">\" . $schlagzeile[\"title\"].\"<\/a>\" .<br \/>\n          \"<br \/><small><i>\" . $schlagzeile[\"description\"] . \"<\/i><\/small><\/td>\n<\/tr>\n<p>\";<br \/>\n  } \/\/foreach<\/p>\n<p>} \/\/showPanel)<\/p>\n<p> list($channel_data, $schlagzeilen) = getNightloop(\"\/\/$kategorie\/\/\", \/\/$items\/\/);<br \/>\n showPanel($channel_data, $schlagzeilen);<\/p>\n<p>?><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inhaltsverzeichnis 1. Server 1 1.1. backend.php 1 1.2. backend_soap.php 2 1.3. backend_base.php 2 1.4. include\/config.inc 5 1.5. include\/sql_magazin_stars.php 5 1.6. include\/sql_magazin_soundcheck.php 5 2. PHP-Client 5 2.1. client.php 5 2.2. include\/inc_client_http.php 6 2.3. include\/inc_client_soap.php 7 3. Perl-Client 9 3.1. nightloop.pm 9 3.2. client.pl 11 4. Web-Interface 12 4.1. syndic8.php 12 4.2. syndic8.css 15 4.3. template.php 16 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":375,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"class_list":["post-368","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/pages\/368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/comments?post=368"}],"version-history":[{"count":1,"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/pages\/368\/revisions"}],"predecessor-version":[{"id":369,"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/pages\/368\/revisions\/369"}],"up":[{"embeddable":true,"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/pages\/375"}],"wp:attachment":[{"href":"https:\/\/elektroelch.de\/drafts\/wp-json\/wp\/v2\/media?parent=368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}