Hallo zusammen,
ich lese nun schon einige Zeit in diesem Forum. Nun ist es auch mal an der Zeit ein Modul bzw. eine Überarbeitung zu posten. Ich habe mich mal dem XML-Sitemap-Modul angenommen. Mich hat gestört, das man Artikeln keine verschiedene Prioritäten zuweisen kann... womit sich diese Funktion ja fast erledigt hätte.
Ich habe also den Script von Luxmedia Österreich mit den Änderungen von derSteffen genommen, alles aufgeräumt und dann noch alle weiteren Verbesserungen eingebaut, die ich im Forum finden konnte. Ausserdem habe ich die Möglichkeit eingebaut einzelne Kategorien mit eigenen Prioritäten und Änderungshäufigkeiten zu versehen.
WICHTIG: für die Verwendung bitte unbedingt die Anleitung in der Beschreibung durchlesen, da ihr ein include von HerrB benötigt.
Das Modul ist nicht für ModRewrite entwickelt worden.
Ich hoffe ich habe nicht allzuviele Fehler drin und ich muss leider gestehen, das ich die Sitemap noch nicht mit Google getestet habe.
Gruß
  Ratze
BESCHREIBUNG:
Code: Alles auswählen
MODUL-NAME: 
XMLSitemaps
BESCHREIBUNG
Diese Modul erzeugt ein Sitemap-Protocol im 
XML-Format. Diese Format unterstützen z.B.: 
Google, Yahoo!, und Microsoft. Es vereinfacht 
den Suchmaschinen das Durchsuchen der URLs 
einer Site.
INSTALLATION:
1. Anmelden beim Google Sitemaps Service unter: https://www.google.com/webmasters/sitemaps/login
2. XMLSitemap-Modul anlegen/installieren
3. Die Datei "functions.input.helper.php" von HerrB muss im includes-Ordner des Mandanten liegen.
   Sie ist z.B. Bestandteil von diesem Modul: 
   http://contenido.org/forum/viewtopic.php?t=10957
4. Neues Layout mit folgendem Inhalt anlegen: CMS_CONTAINER[1]
   Im Layout dürfen keine weiteren HTML-Tags oder Leerzeichen enthalten sein.
5. Neues Template erstellen mit dem neuen Layout und dem XMLSitemap-Modul
6. Neue Kategorie erstellen und eine neue Seite mit dem neuen Template zuweisen
7. Jetzt den Link dieser neuen Seite im Browser aufrufen und testen
8. Den Link Google mitteilen
PROBLEME UND ANMERKUNGEN:
- Bei dem Modul wird ein Fehler im Eingabe Bereich angezeigt.
  Dieser liegt im Script im Bereich "Kategorien auswählen".
  Beim Aufruf der JavaScript-Funktion ArtAdv_fncUpdateSel kommt
  er beim dynamischen CMS_VAR[".$iElementKat."] nicht klar...
  das Modul läuft aber ohne Probleme... zumindestens bei mir...
- Die Ausnahmen beziehen sich nur auf die Artikel in der Kategorie,
  nicht auf die Artikel in Unterkategorien.
WEITERE INFOS:
https://www.google.com/webmasters/sitemaps/docs/de/protocol.html
--------------------------------------------------------
Author Luxmedia Österreich
Copyright www.luxmedia.at
  2005-06-09
- INPUT: Abfrage des Skriptnames
- INPUT: Einbindung von lastmod je nach Wunsch
- INPUT: changefreq
- OUTPUT: Nur Artikel die Online sind
- OUTPUT: lastmod, changefreq, Skriptname aus INPUT
- OUTPUT: lastmod Datumsformat iso8601
  Angepasst durch derSteffen
  2005-12-21
- OUTPUT: Neu: priority
- OUTPUT: Neuer Header (<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" usw...)
  Angepasst durch derSteffen und HerrB
  2006-01-03
- INPUT: Bugfix (Speichern der Werte der Selektfelder cms php skript
  [durch HrBee] Änderungsdatum und Änderungshäufigkeit)
- INPUT: Neues Feld: priority
  Überarbeitet durch Ratze
  2007-08-11
- INPUT: Überarbeitung und Säuberung des Codes
- INPUT: Neu: Mehrsprachfähig im Backend
- INPUT/OUPUT: Neu: Ausnahmen. Die Möglichkeit einzelnen Kategorien
  andere Prioritäten und Änderungshäufigkeiten zuzuweisen
  (Scriptelemente bei den "Ausnahmen" aus dem Modul "Article List 
  Advanced" von HerrB entnommen. Danke :-)
- INPUT/OUTPU: Auszuschliessende Artikel von windowlicker vom 2006-08-06 eingebaut
- OUTPUT: SQL-Abfrage von MyAccount aus dem Modul "myGoogleSitemap" 
  vom 2006-08-02 eingebaut
- OUTPUT: Wenn eine Seite ein Seitentitel hat, wird dieser als Kommentar
  in die XML-Datei geschrieben, damit wird die Kontrolle der Seiten einfacher.
--------------------------------------------------------
Code: Alles auswählen
?><?php
/* --------------------------------------------------------------------------- */
/*                                                                             */
/*   XML Sitemaps - Ausgabe als XML - Version vom 11.08.2007                   */
/*   INPUT                                                                     */
/*                                                                             */
/* --------------------------------------------------------------------------- */
cInclude("frontend", "includes/functions.input.helper.php");
$sSubmitLink = '<a href="javascript:if (document.tplcfgform.send) {document.tplcfgform.send.value = 0}; document.tplcfgform.submit();"><img src="images/submit.gif" /></a>';
/* CONFIG -------------------------------------------------------------------- */
/* Hier können Elemente in den DropDown-Felder geändert                        */
/* oder ergänzt werden ohne unten in den Script zu gehen                       */
/* --------------------------------------------------------------------------- */
// Welche CMS-PHP-Datei wird angesprochen
$cmsPhpSkript_auswahl   = array();
$cmsPhpSkript_auswahl[] = "front_content.php";
$cmsPhpSkript_auswahl[] = "index.php";
// In welchem Rythmus wird die Seite aktualisiert?
$aktualisierung_auswahl               = array();
$aktualisierung_auswahl[0]["wert"]    = "0";
$aktualisierung_auswahl[0]["beschr"]  = mi18n("Nicht setzten");
$aktualisierung_auswahl[1]["wert"]    = "always";
$aktualisierung_auswahl[1]["beschr"]  = mi18n("Immer");
$aktualisierung_auswahl[2]["wert"]    = "hourly";
$aktualisierung_auswahl[2]["beschr"]  = mi18n("Stündlich");
$aktualisierung_auswahl[3]["wert"]    = "daily";
$aktualisierung_auswahl[3]["beschr"]  = mi18n("Täglich");
$aktualisierung_auswahl[4]["wert"]    = "weekly";
$aktualisierung_auswahl[4]["beschr"]  = mi18n("Wöchentlich");
$aktualisierung_auswahl[5]["wert"]    = "monthly";
$aktualisierung_auswahl[5]["beschr"]  = mi18n("Monatlich");
$aktualisierung_auswahl[6]["wert"]    = "yearly";
$aktualisierung_auswahl[6]["beschr"]  = mi18n("Jährlich");
$aktualisierung_auswahl[7]["wert"]    = "never";
$aktualisierung_auswahl[7]["beschr"]  = mi18n("Niemals");
// Welche Priorität soll den Seiten zugeordnet werden?
$prioritaet_auswahl               = array();
$prioritaet_auswahl[0]["wert"]    = "0";
$prioritaet_auswahl[0]["beschr"]  = mi18n("Nicht setzten");
$prioritaet_auswahl[1]["wert"]    = "0.0";
$prioritaet_auswahl[1]["beschr"]  = "0.0";
$prioritaet_auswahl[2]["wert"]    = "0.1";
$prioritaet_auswahl[2]["beschr"]  = "0.1";
$prioritaet_auswahl[3]["wert"]    = "0.2";
$prioritaet_auswahl[3]["beschr"]  = "0.2";
$prioritaet_auswahl[4]["wert"]    = "0.3";
$prioritaet_auswahl[4]["beschr"]  = "0.3";
$prioritaet_auswahl[5]["wert"]    = "0.4";
$prioritaet_auswahl[5]["beschr"]  = "0.4";
$prioritaet_auswahl[6]["wert"]    = "0.5";
$prioritaet_auswahl[6]["beschr"]  = "0.5";
$prioritaet_auswahl[7]["wert"]    = "0.6";
$prioritaet_auswahl[7]["beschr"]  = "0.6";
$prioritaet_auswahl[8]["wert"]    = "0.7";
$prioritaet_auswahl[8]["beschr"]  = "0.7";
$prioritaet_auswahl[9]["wert"]    = "0.8";
$prioritaet_auswahl[9]["beschr"]  = "0.8";
$prioritaet_auswahl[10]["wert"]   = "0.9";
$prioritaet_auswahl[10]["beschr"] = "0.9";
$prioritaet_auswahl[11]["wert"]   = "1.0";
$prioritaet_auswahl[11]["beschr"] = "1.0";
/* DEFINITION DER CMS-VARIABLEN ---------------------------------------------- */
$cmsPhpSkript     = "CMS_VALUE[0]";
$letzteAenderung  = "CMS_VALUE[1]";
$aktualisierung   = "CMS_VALUE[2]";
$prioritaet       = "CMS_VALUE[3]";
$anzAusnahmen     = "CMS_VALUE[4]";
$dontshow         = "CMS_VALUE[5]";
// Ausnahmen
$iDataStart  = 30;
if ($anzAusnahmen > 0) {
   for ($i = 0; $i < $anzAusnahmen; $i++) {
      $iElementType      = $iDataStart + ($i * 5);
      $iElementKat       = $iElementType + 1;
      $iElementWert_aktu = $iElementType + 2;
	  $iElementWert_prio = $iElementType + 3;
      $aSettings["k".$i] = array();
      $aSettings["k".$i]["ElementType"]      = "CMS_VALUE[$iElementType]";      // changefreq, priority
      $aSettings["k".$i]["ElementKat"]       = "CMS_VALUE[$iElementKat]";       // Kategorien, die geändert werden sollen
      $aSettings["k".$i]["ElementWert_aktu"] = "CMS_VALUE[$iElementWert_aktu]"; // Wert Aktualisierung
	  $aSettings["k".$i]["ElementWert_prio"] = "CMS_VALUE[$iElementWert_prio]"; // Wert Priorität
      if ($aSettings["k".$i]["ElementType"] == "") {
         $aSettings["k".$i]["ElementType"] == "0";
      }
   }
}
/* DEFAULT-WERTE ------------------------------------------------------------- */
if ($cmsPhpSkript == "") {
  $cmsPhpSkript = $cmsPhpSkript_auswahl[0];
}
if ($letzteAenderung == "") {
  $letzteAenderung = "0";
}
if ($aktualisierung == "") {
  $aktualisierung = $aktualisierung_auswahl[0]["wert"];
}
if ($prioritaet == "") {
  $prioritaet = $prioritaet_auswahl[0]["wert"];
}
if ($dontshow == "") {
  $dontshow = "";
}
/* BEGINN -------------------------------------------------------------------- */
// Weitere Infos
echo "\n\n\n".'<SCRIPT LANGUAGE="JavaScript">'."\n";
echo '  <!--'."\n";
echo '  function sitemapErklaerung() {'."\n";
echo '    erklaerungSitemap = window.open("","Erklaerung","width=700,height=450");'."\n";
echo '    sitemapErklaerung01();'."\n";
echo '  }'."\n";
echo '  function sitemapErklaerung01() {'."\n";
echo '    var sitemapErklaerungInhalt = \''.mi18n("<p><strong>INSTALLATION:<\/strong><\/p><ol><li>Anmelden beim Google Sitemaps Service unter: <a href=\"https:\/\/www.google.com\/webmasters\/sitemaps\/login\" target=\"_blank\">https:\/\/www.google.com\/webmasters\/sitemaps\/login<\/a><\/li><li>XMLSitemap-Modul anlegen\/installieren<\/li><li>Die Datei \"functions.input.helper.php\" von HerrB muss im includes-Ordner des Mandanten liegen.<br>Sie ist z.B. Bestandteil von diesem Modul:<br><a href=\"http:\/\/contenido.org\/forum\/viewtopic.php?t=10957\" target=\"_blank\">http:\/\/contenido.org\/forum\/viewtopic.php?t=10957<\/a><\/li><li>Neues Layout mit folgendem Inhalt anlegen:  CMS_CONTAINER[1]<br \/>Im Layout dürfen keine weiteren HTML-Tags oder Leerzeichen enthalten sein.<\/li><li>Neues Template erstellen mit dem neuen Layout und dem XMLSitemap-Modul<\/li><li>Neue Kategorie erstellen und eine neue Seite mit dem neuen Template zuweisen<br \/><\/li><li>Jetzt den Link dieser neuen Seite im Browser aufrufen und testen<\/li><li>Den Link Google mitteilen<\/li><\/ol><p><strong>WEITERE INFOS: <\/strong><\/p><ul><li><a href=\"https:\/\/www.google.com\/webmasters\/sitemaps\/docs\/de\/protocol.html\" target=\"_blank\">https:\/\/www.google.com\/webmasters\/sitemaps\/docs\/de\/protocol.html<\/a><\/li><\/ul>").'\';'."\n";
echo '    erklaerungSitemap.document.write(sitemapErklaerungInhalt);'."\n";
echo '  }'."\n";
echo '  // -->'."\n";
echo '</SCRIPT>'."\n\n";
echo '<table cellspacing="0" cellpadding="10" border="0">'."\n";
echo '  <tr>'."\n";
echo '    <td colspan="2"><a href="#" onClick="sitemapErklaerung()">'.mi18n("Mehr Infos über dieses Modul").'</a></td>'."\n";
echo '  </tr>'."\n";
// Welche CMS-PHP-Datei wird angesprochen?
echo '  <tr>'."\n";
echo '    <td>'.mi18n("CMS-PHP-Skript:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <select name="CMS_VAR[0]">'."\n";
foreach ($cmsPhpSkript_auswahl AS $mein) {
  echo '        <option value="'.$mein.'"';
                if ($cmsPhpSkript == $mein) { echo ' selected'; }
                echo '>'.$mein.'</option>'."\n";
}
echo '      </select>'."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
// Soll die letzte Änderung mit aufgenommen werden?
echo '  <tr>'."\n";
echo '    <td>'.mi18n("Änderungsdatum verwenden:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <select name="CMS_VAR[1]">'."\n";
echo '        <option value="0"';
              if ($letzteAenderung == "0") { echo ' selected'; }
              echo '>'.mi18n("Nicht setzen").'</option>'."\n";
echo '        <option value="1"';
              if ($letzteAenderung == "1") { echo ' selected'; }
              echo '>'.mi18n("Ja").'</option>'."\n";
echo '      </select>'."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
// In welchem Rythmus wird die Seite aktualisiert?
echo '  <tr>'."\n";
echo '    <td>'.mi18n("Änderungshäufigkeit aller Seiten:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <select name="CMS_VAR[2]">'."\n";
foreach ($aktualisierung_auswahl AS $mein) {
  echo '        <option value="'.$mein["wert"].'"';
                if ($aktualisierung == $mein["wert"]) { echo ' selected'; }
                echo '>'.$mein["beschr"].'</option>'."\n";
}
echo '      </select>'."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
// Welche Priorität soll den Seiten zugeordnet werden?
echo '  <tr>'."\n";
echo '    <td>'.mi18n("Priorität aller Seiten:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <select name="CMS_VAR[3]">'."\n";
foreach ($prioritaet_auswahl AS $mein) {
  echo '        <option value="'.$mein["wert"].'"';
                if ($prioritaet == $mein["wert"]) { echo ' selected'; }
                echo '>'.$mein["beschr"].'</option>'."\n";
}
echo '      </select>'."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
// Welch Artikel sollen ausgelassen werden?
echo '  <tr>'."\n";
echo '    <td>'.mi18n("Auszuschliessende Artikel:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <input type="text" name="CMS_VAR[5]" value="'.$dontshow.'" size="10">'."\n";
echo '      '.mi18n("Artikel-Id mit Komma getrennt (z.B. 5,23,89)")."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
/* AUSNAHMEN ----------------------------------------------------------------- */
// Wieviele Ausnahmen
echo '  <tr>'."\n";
echo '    <td>'.mi18n("Wieviele Ausnahmen:").'</td>'."\n";
echo '    <td>'."\n";
echo '      <input type="text" name="CMS_VAR[4]" value="'.$anzAusnahmen.'" size="3"> '.$sSubmitLink."\n";
echo '    </td>'."\n";
echo '  </tr>'."\n";
if ($anzAusnahmen > 0) {
  echo fncAddMultiSelJS();
  
  // Strich
  echo '  <tr><td colspan="2"><hr></td></tr>'."\n";
  
  for ($i = 0; $i < $anzAusnahmen; $i++) {
    echo "\n"."  <!-- Durchlauf ".$i." -->"."\n";
	
    $iElementType      = $iDataStart + ($i * 5);
    $iElementKat       = $iElementType + 1;
    $iElementWert_aktu = $iElementType + 2;
	$iElementWert_prio = $iElementType + 3;
    echo '  <tr>'."\n";
    echo '    <td valign="top">'.($i+1).'. '.mi18n("Ausnahme:").'</td>'."\n";
    echo '    <td>'."\n";
	
	// Typ der Ausnahme auswählen:
	echo '      '.mi18n("Typ:").'<br>'."\n";
    echo '      <select name="CMS_VAR['.$iElementType.']">'."\n";
    echo '        <option value="0"';
                  if ($aSettings["k".$i]["ElementType"] == "0") { echo ' selected'; }
                  echo '>'.mi18n("Bitte auswählen...").'</option>'."\n";		
    echo '        <option value="changefreq"';
                  if ($aSettings["k".$i]["ElementType"] == "changefreq") { echo ' selected'; }
                  echo '>'.mi18n("Änderungshäufigkeit").'</option>'."\n";
    echo '        <option value="priority"';
                  if ($aSettings["k".$i]["ElementType"] == "priority") { echo ' selected'; }
                  echo '>'.mi18n("Priorität").'</option>'."\n";		
    echo '      </select>'."\n";
	echo '       '.$sSubmitLink.' '."\n";
	
	if ($aSettings["k".$i]["ElementType"] != "0") {
	  echo '      <br><br>'."\n";	
	  
	  // Kategorie auswählen
	  echo '      '.mi18n("Kategorien auswählen:").'<br>'."\n";
      echo fncBuildCategorySelect("c".$i."cbxAddCatSel", $aSettings["k".$i]["ElementKat"], 0, "ArtAdv_fncUpdateSel('c".$i."cbxAddCatSel', '"."CMS_VAR[".$iElementKat."]"."');", "6", "multiple", false, 0, "");
      echo '<input type="hidden" name="CMS_VAR['.$iElementKat.']" value="'.$aSettings["k".$i]["ElementKat"].'">'."\n";
	  
	  echo '      <br>'."\n";
	  
	  
	  // Aktualisierung
	  if ($aSettings["k".$i]["ElementType"] == "changefreq") {
          echo '      <select name="CMS_VAR['.$iElementWert_aktu.']">'."\n";
          foreach ($aktualisierung_auswahl AS $mein) {
            echo '        <option value="'.$mein["wert"].'"';
                          if ($aSettings["k".$i]["ElementWert_aktu"] == $mein["wert"]) { echo ' selected'; }
                          echo '>'.$mein["beschr"].'</option>'."\n";
          }		
          echo '      </select>'."\n";
	  } 
	  
	  // Priorität
	  if ($aSettings["k".$i]["ElementType"] == "priority") {
          echo '      <select name="CMS_VAR['.$iElementWert_prio.']">'."\n";
          foreach ($prioritaet_auswahl AS $mein) {
            echo '        <option value="'.$mein["wert"].'"';
                          if ($aSettings["k".$i]["ElementWert_prio"] == $mein["wert"]) { echo ' selected'; }
                          echo '>'.$mein["beschr"].'</option>'."\n";
          }		
          echo '      </select>'."\n";
	  }
    } // if ($aSettings["k".$i]["ElementType"] != "0") {
  echo '    </td>'."\n";
  echo '  </tr>'."\n";
  
  // Strich
  echo '  <tr><td colspan="2"><hr></td></tr>'."\n";
  } // End: for ($i = 0; $i < $aSettings["Elements"]; $i++) {
} // End: if ($aSettings["Elements"] > 0) {
echo '</table>'."\n";
?><?php
Code: Alles auswählen
<?php
/* --------------------------------------------------------------------------- */
/*                                                                             */
/*   XML Sitemaps - Ausgabe als XML - Version vom 11.08.2007                   */
/*   OUTPUT                                                                    */
/*                                                                             */
/* --------------------------------------------------------------------------- */
/* DEFINITION DER CMS-VARIABLEN ---------------------------------------------- */
$cmsPhpSkript     = "CMS_VALUE[0]";
$letzteAenderung  = "CMS_VALUE[1]";
$aktualisierung   = "CMS_VALUE[2]";
$prioritaet       = "CMS_VALUE[3]";
$anzAusnahmen     = "CMS_VALUE[4]";
$dontshow         = "CMS_VALUE[5]";
// Ausnahmen
$iDataStart  = 30;
if ($anzAusnahmen > 0) {
   for ($i = 0; $i < $anzAusnahmen; $i++) {
      $iElementType      = $iDataStart + ($i * 5);
      $iElementKat       = $iElementType + 1;
      $iElementWert_aktu = $iElementType + 2;
	  $iElementWert_prio = $iElementType + 3;
      $aSettings["k".$i] = array();
      $aSettings["k".$i]["ElementType"]      = "CMS_VALUE[$iElementType]";               // changefreq, priority
      $aSettings["k".$i]["ElementKat"]       = explode(",", "CMS_VALUE[$iElementKat]");  // Kategorien, die geändert werden sollen
      $aSettings["k".$i]["ElementWert_aktu"] = "CMS_VALUE[$iElementWert_aktu]";          // Wert Aktualisierung
	  $aSettings["k".$i]["ElementWert_prio"] = "CMS_VALUE[$iElementWert_prio]";          // Wert Priorität
      if ($aSettings["k".$i]["ElementType"] == "") {
         $aSettings["k".$i]["ElementType"] == "0";
      }
   }
}
/* DEFAULT-WERTE ------------------------------------------------------------- */
if ($cmsPhpSkript == "") {
  $cmsPhpSkript = "front_content.php";
}
if ($letzteAenderung == "") {
  $letzteAenderung = "0";
}
if ($aktualisierung == "") {
  $aktualisierung = "0";
}
if ($prioritaet == "") {
  $prioritaet = "0";
}
if ($dontshow == "") {
   $dontshow == "";
} else {    
   $dontshow =  'AND E . idart NOT IN ('.$dontshow.')';
}
/* FUNKTIONEN ---------------------------------------------------------------- */
function iso8601_date($time) {
  $tzd = date('O',$time);
  $tzd = substr(chunk_split($tzd, 3, ':'),0,6);
  $date = date('Y-m-d\TH:i:s', $time) . $tzd;
  return $date;
}
/* BEGINN AUSGABE ------------------------------------------------------------ */
$xml_titel = $cfgClient[$client]["path"]["htmlpath"].$cmsPhpSkript."?idcat=".$idcat;
$xml_link  = $cfgClient[$client]["path"]["htmlpath"];
// Header ausgeben
header("Content-type: text/xml");
$xmlOutput = '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">'. "\n\n";
$query = "SELECT
             E . idcat ,
             E . idart ,
			 D . pagetitle ,
             C . name ,
             UNIX_TIMESTAMP( D . lastmodified ) AS lastmodified
          FROM
             ".$cfg["tab"]["cat_tree"]." AS A ,
             ".$cfg["tab"]["cat_lang"]." AS C ,
             ".$cfg["tab"]["cat"]." AS B ,
             ".$cfg["tab"]["cat_art"]." AS E
            INNER JOIN  ".$cfg["tab"]["art_lang"]." AS D  ON ( E . idart  =  D . idart )
          WHERE
                A . idcat  =  B . idcat 
            AND B . idcat  =  C . idcat 
            AND C . idcat  =  E . idcat 
            AND B . idclient  = '".$client."' 
            AND C . idlang  = '".$lang."' 
            AND D . idlang  = '".$lang."' 
            AND C . visible  = '1' 
            AND E . idcatart IS NOT NULL 
            AND C . public  = '1' 
            AND D . online = '1' 
			".$dontshow."
          ORDER BY
            A . idtree, E . idart"; 
// execute query
$db->query($query);
// get id's of sub articles
while ($db->next_record()) {
  $linkid = $db->f("idart");
  $linkcat = $db->f("idcat");
  $lastmodified = iso8601_date( $db->f("lastmodified") );
  $link = $xml_link.$cmsPhpSkript."?idart=".$linkid;
  // Bemerkung zum Seitentitel
  $xmlOutput .= '<!-- '.$db->f("pagetitle").' -->'."\n";
  $xmlOutput .= '<url>'."\n";
  $xmlOutput .= ' <loc>'.htmlspecialchars($link).'</loc>'."\n";
  // Letzte Änderung
  if($letzteAenderung != "0") {
    $xmlOutput .= ' <lastmod>'.$lastmodified.'</lastmod>'."\n"; 
  } 
  
  
  // Aktualisierung
  if($aktualisierung != "0") {
     $aktualisierung_eintrag = $aktualisierung;
     for ($i = 0; $i < $anzAusnahmen; $i++) {
        if (in_array($linkcat, $aSettings["k".$i]["ElementKat"]) == TRUE) { 
		   if ($aSettings["k".$i]["ElementType"] == "changefreq") {
		      $aktualisierung_eintrag = $aSettings["k".$i]["ElementWert_aktu"];
		      break;
		   }
		}
    }
    $xmlOutput .= ' <changefreq>'.$aktualisierung_eintrag.'</changefreq>'."\n";
  } // if($aktualisierung != "0") {
  
  
  // Priorität
  if($prioritaet != "0") {
     $prioritaet_eintrag = $prioritaet;
     for ($i = 0; $i < $anzAusnahmen; $i++) {
        if (in_array($linkcat, $aSettings["k".$i]["ElementKat"]) == TRUE) { 
		   if ($aSettings["k".$i]["ElementType"] == "priority") {
		      $prioritaet_eintrag = $aSettings["k".$i]["ElementWert_prio"];
		      break;
		   }
		}
    }
    $xmlOutput .= ' <priority>'.$prioritaet_eintrag.'</priority>'."\n"; 
  } // if($prioritaet != "0") {
  
  
  $xmlOutput .= '</url>'."\n\n";
} // end while
$xmlOutput .= '</urlset>';
// Hier wird der ganze String in UTF8 kodiert und ausgegeben
echo utf8_encode($xmlOutput);
?>