In Zeile 168 steht "con_art_lang" statt dessn muss es "'.$cfg["tab"]["art_lang"].'" heißen. Der Fehler tritt wohl nur dann auf, wenn man einen anderen Tabellenprefix verwendet?
Hier der Code nochmals als Ganzes:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname: SitemapExtended
* Author(s): Rene Hankel
* Copyright: michse
* Created: 2007.04.17
* Version: 0.3
*
************************************************/
//----------------------------------------------------------------
// Includes
cInclude('classes', 'class.article.php');
cInclude('includes', 'functions.api.string.php');
//----------------------------------------------------------------
// get vars
unset($lo_set);
$lo_set = array();
// kategorie
$lo_set["Cat_Id"] = "CMS_VALUE[0]";
$lo_set["Cat_Level"] = "CMS_VALUE[1]";
$lo_set["Cat_SortBy"] = "CMS_VALUE[2]";
$lo_set["Cat_SortDir"] = "CMS_VALUE[3]";
$lo_set["Cat_Prefix"] = "CMS_VALUE[4]";
$lo_set["Cat_Style"] = "CMS_VALUE[5]";
// artikel
$lo_set["Art_Show"] = "CMS_VALUE[10]";
$lo_set["Art_SortBy"] = "CMS_VALUE[11]";
$lo_set["Art_SortDir"] = "CMS_VALUE[12]";
$lo_set["Art_MaxArt"] = "CMS_VALUE[13]";
$lo_set["Art_MaxChar"] = "CMS_VALUE[14]";
$lo_set["Art_IncStart"] = "CMS_VALUE[15]";
$lo_set["Art_Prefix"] = "CMS_VALUE[16]";
$lo_set["Art_Style"] = "CMS_VALUE[17]";
//----------------------------------------------------------------
// standart
// kategorie
$lo_default_cat_level = 1;
$lo_default_cat_sortby = 'CAT_TREE.idtree';
$lo_default_cat_sortdir = 'desc';
$lo_default_cat_prefix = 'sitemapext_cat';
$lo_default_cat_style = 'ul';
// artikel
$lo_default_art_sortby = 'created';
$lo_default_art_sortdir = 'desc';
$lo_default_art_maxart = 50;
$lo_default_art_maxchar = 200;
$lo_default_art_prefix = 'sitemapext_art';
$lo_default_art_style = 'ul';
//----------------------------------------------------------------
// test
// cat - level
if( (int)$lo_set["Cat_Level"] <= 0 )
{ $lo_set["Cat_Level"] = $lo_default_cat_level; }
// cat - sortby
if(
($lo_set["Cat_SortBy"] != 'CAT_TREE.idtree') &&
($lo_set["Cat_SortBy"] != 'CAT_LANG.Name') &&
($lo_set["Cat_SortBy"] != 'CAT.created') &&
($lo_set["Cat_SortBy"] != 'CAT.lastmodified')
)
{ $lo_set["Cat_SortBy"] = $lo_default_cat_sortby; }
// cat - sortdir
if( ($lo_set["Cat_SortDir"] != 'desc') && ($lo_set["Cat_SortDir"] != 'asc') )
{ $lo_set["Cat_SortDir"] = $lo_default_cat_sortdir; }
// cat - prefix
if( strlen($lo_set["Cat_Prefix"]) == 0 )
{ $lo_set["Cat_Prefix"] = $lo_default_cat_prefix; }
// cat - style
if( ($lo_set["Cat_Style"] != 'ul') && ($lo_set["Cat_Style"] != 'tpl') )
{ $lo_set["Cat_Style"] = $lo_default_cat_style; }
//-------------------
// art - sortby
if(
($lo_set["Art_SortBy"] != 'created') &&
($lo_set["Art_SortBy"] != 'lastmodified') &&
($lo_set["Art_SortBy"] != 'published') &&
($lo_set["Art_SortBy"] != 'artsort') &&
($lo_set["Art_SortBy"] != 'title')
)
{ $lo_set["Art_SortBy"] = $lo_default_art_sortby; }
// art - sortdir
if( ($lo_set["Art_SortDir"] != 'desc') && ($lo_set["Art_SortDir"] != 'asc') )
{ $lo_set["Art_SortDir"] = $lo_default_art_sortdir; }
// art - max art
if( (int)$lo_set["Art_MaxArt"] <= 0 )
{ $lo_set["Art_MaxArt"] = $lo_default_art_maxart; }
// art - maxchar
if( (int)$lo_set["Art_MaxChar"] <= 0 )
{ $lo_set["Art_MaxChar"] = $lo_default_art_maxchar; }
// art - prefix
if( strlen($lo_set["Art_Prefix"]) == 0 )
{ $lo_set["Art_Prefix"] = $lo_default_art_prefix; }
// art - style
if( ($lo_set["Art_Style"] != 'ul') && ($lo_set["Art_Style"] != 'tpl') )
{ $lo_set["Art_Style"] = $lo_default_art_style; }
//----------------------------------------------------------------
// wenn funktion noch nicht existiert -> erstellen
if( !function_exists('SitemapExtended') )
{
/**
* rekursive funktion zum aufbau eines sitemapbaumes mit listung artikel
*
* @param int $lo_kat id der kategorie die als liste aufgebaut werden soll
* @param int $lo_level interne var um css-listen-klassen und html-quelltext zu formatieren
* @return string ergebnis als html
*/
function SitemapExtended($lo_kat = 0, $lo_level = 0)
{
global $sess, $lang, $client, $cfg, $lo_set;
$lo_run = 0;
$lo_limitart = 0;
$lo_sql = '';
$lo_tmp = '';
$lo_result = '';
$lo_arthead = '';
$lo_options = array();
$lo_dbobj;
$lo_tpl;
$lo_tplart;
$lo_artlist;
$lo_article;
// ist db-objekt auch objekt?
if ( !is_object($lo_dbobj) )
{ $lo_dbobj = new DB_Contenido; }
$lo_sql = 'SELECT ';
$lo_sql.= ' CAT_TREE.level, ';
$lo_sql.= ' CAT.idcat, CAT.idclient, CAT.parentid, ';
$lo_sql.= ' CAT_LANG.Name, ';
$lo_sql.= ' count(CAT_LANG_PARENT.idcat) AS count_subcat, ';
$lo_sql.= ' if(count(ART_LANG.idartlang), 1, 0) AS artexist, ';
$lo_sql.= ' if(count(ART_LANG_START.idartlang), 1, 0) AS startartexist ';
$lo_sql.= 'FROM '.$cfg["tab"]["cat_tree"].' AS CAT_TREE ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["cat"].' AS CAT ';
$lo_sql.= ' ON CAT_TREE.idcat = CAT.idcat ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["cat_lang"].' AS CAT_LANG ';
$lo_sql.= ' ON CAT.idcat = CAT_LANG.idcat ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["cat"].' AS CAT_PARENT ';
$lo_sql.= ' ON (CAT.idcat = CAT_PARENT.parentid) ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["cat_lang"].' AS CAT_LANG_PARENT ';
$lo_sql.= ' ON CAT_PARENT.idcat = CAT_LANG_PARENT.idcat ';
$lo_sql.= ' AND (CAT_LANG_PARENT.visible = 1) ';
$lo_sql.= ' AND (CAT_LANG_PARENT.public = 1) ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["cat_art"].' AS CAT_ART ';
$lo_sql.= ' ON CAT.idcat = CAT_ART.idcat ';
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["art_lang"].' AS ART_LANG ';
$lo_sql.= ' ON (CAT_ART.idart = ART_LANG.idart) ';
$lo_sql.= ' AND (ART_LANG.online = 1) ';
// startartikel einbeziehen?
if( $lo_set["Art_IncStart"] != 'true')
{ $lo_sql.= ' AND (CAT_LANG.startidartlang != ART_LANG.idartlang) '; }
$lo_sql.= 'LEFT OUTER JOIN '.$cfg["tab"]["art_lang"].' AS ART_LANG_START ';
$lo_sql.= ' ON (CAT_ART.idart = ART_LANG_START.idart) ';
$lo_sql.= ' AND (ART_LANG_START.online = 1) ';
$lo_sql.= ' AND (CAT_LANG.startidartlang = ART_LANG_START.idartlang) ';
$lo_sql.= 'WHERE CAT_LANG.idlang = \''.$lang.'\' ';
$lo_sql.= 'AND CAT.idclient = \''.$client.'\' ';
$lo_sql.= 'AND CAT.parentid = \''.$lo_kat.'\' ';
$lo_sql.= 'AND CAT_LANG.visible = 1 ';
$lo_sql.= 'AND CAT_LANG.public = 1 ';
$lo_sql.= 'GROUP BY CAT.idcat ';
$lo_sql.= 'ORDER BY '.$lo_set["Cat_SortBy"].' '.$lo_set["Cat_SortDir"];
//echo $lo_sql.'<br><br>';
// sql ausfuehren
$lo_dbobj->query($lo_sql);
//------------------------------------------
// wenn ergebnisse vorliegen
if( $lo_dbobj->num_rows() )
{
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Cat_Style"] == 'tpl' )
{
// template obj erstellen
if (!is_object($lo_tpl))
{ $lo_tpl = new Template; }
// templatedaten zuruecksetzen
$lo_tpl->reset();
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// html-quelltxt schoen machen
$lo_result .= "\n".str_repeat(" ", ($lo_level * 4));
// css-class einfuegen
$lo_result .= '<ul class="'.$lo_set["Cat_Prefix"].'_'.$lo_level.'">'."\n";
}
//------------------------------------------
// ergebnisse durchlaufen
while( $lo_dbobj->next_record() )
{
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Cat_Style"] == 'tpl' )
{
// var zuruecksetzen
$lo_result = '';
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// html-quelltxt schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4) + 2);
// listeneintrag beginnen
$lo_result .= '<li>';
}
//------------------------------------------
// wenn kategorie einen startartikel besitzt, link erstellen
if( (int)$lo_dbobj->f("startartexist") )
{
$lo_result .= '<a href="';
$lo_result .= $sess->url('front_content.php?idcat='.$lo_dbobj->f('idcat'));
$lo_result .= '">';
$lo_result .= $lo_dbobj->f("Name");
$lo_result .= '</a>';
}
else
{ $lo_result .= $lo_dbobj->f("Name"); }
//------------------------------------------
// sollen artikel falls vorhanden anzeigen?
if( ($lo_set["Art_Show"] == 'true') && (int)$lo_dbobj->f("artexist") )
{
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Art_Style"] == 'tpl' )
{
// template obj erstellen
if (!is_object($lo_tplart))
{ $lo_tplart = new Template; }
// templatedaten zuruecksetzen
$lo_tplart->reset();
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// html-quelltxt schoen machen
$lo_result .= "\n".str_repeat (" ", ($lo_level * 4) + 4);
$lo_result .= '<ul class="'.$lo_set["Art_Prefix"].'_'.$lo_level.'">'."\n";
}
//------------------------------------------
// optionsarray fur artikelabfrage erstellen
$lo_options['idcat'] = $lo_dbobj->f('idcat');
// startartikel anzeigen?
if( $lo_set["Art_IncStart"] == 'true' )
{ $lo_options['start'] = true; }
else
{ $lo_options['start'] = false; }
// sortierung
$lo_options['order'] = $lo_set["Art_SortBy"];
// sortierungsrichtung
$lo_options['direction'] = $lo_set["Art_SortDir"];
//------------------------------------------
// artikel abfragen
$lo_artlist = new ArticleCollection($lo_options);
//------------------------------------------
// falls artikel vorliegen
if ($lo_artlist->count > 0)
{
//------------------------------------------
// pruefe ob vorhanden artikelanzahl groesser ist als
// max angezeigt werden sollen
if( $lo_set["Art_MaxArt"] < $lo_artlist->count )
{ $lo_limitart = $lo_set["Art_MaxArt"]; }
else
{ $lo_limitart = $lo_artlist->count; }
//------------------------------------------
// durchlaufe alle gefundenen artikel
for( $lo_run = 0; $lo_run < $lo_limitart; $lo_run++ )
{
// hole naechsten artikel
$lo_article = $lo_artlist->nextArticle();
//artikelhead holen
$lo_arthead = strip_tags(trim( $lo_article->getContent('CMS_HTMLHEAD', 1) ));
//------------------------------------------
// wenn text laenger als gewuenscht ist
if( strlen($lo_arthead) > $lo_set["Art_MaxChar"] )
{
$lo_arthead = capiStrTrimAfterWord($lo_arthead, (int)$lo_set["Art_MaxChar"]);
$lo_arthead .= '...';
}
elseif( strlen($lo_arthead) == 0 )
{
$lo_arthead = mi18n("no articlehead exist!");
}
// html-quelltxt schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4) + 6);
//------------------------------------------
// artikel darstellen
//------------------------------------------
// sitemap als html-liste darstellen
if( $lo_set["Art_Style"] != 'tpl' )
{ $lo_result .= '<li>'; }
$lo_tmp = '<a href="';
$lo_tmp .= $sess->url('front_content.php?idcat='.$lo_dbobj->f('idcat').'&idart='.$lo_article->getField('idart'));
$lo_tmp .= '">';
$lo_tmp .= $lo_arthead;
$lo_tmp .= '</a>';
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Art_Style"] == 'tpl' )
{
$lo_tplart->set('d', 'ART', $lo_tmp);
$lo_tplart->next();
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{ $lo_result .= $lo_tmp.'</li>'."\n"; }
}// end for
}
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Art_Style"] == 'tpl' )
{
$lo_result .= $lo_tplart->generate('templates/'.$lo_set["Art_Prefix"].'_'.$lo_level.'.html', true);
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// html-quelltxt schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4) + 4);
$lo_result .= '</ul>'."\n";
}
}
//------------------------------------------
// wenn subkategorien
if( ($lo_dbobj->f('count_subcat') > 0) && ($lo_set["Cat_Level"] > ($lo_level+1)) )
{
$lo_result .= SitemapExtended($lo_dbobj->f('idcat'), ($lo_level+1));
$lo_result .= str_repeat (" ", ($lo_level * 4) + 2);
}
//------------------------------------------
// falls artikel vorhanden und anzeigen, html-quelltxt schoen machen
// if( ($lo_set["Art_Show"] == 'true') && (int)$lo_dbobj->f("artexist") )
// { $lo_result .= str_repeat (" ", ($lo_level * 4) + 2); }
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Cat_Style"] == 'tpl' )
{
$lo_tpl->set('d', 'CAT', $lo_result);
$lo_tpl->next();
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// listeneintrag beenden
$lo_result .= '</li>'."\n";
}
}// end while
//------------------------------------------
// wenn sitemap mit template darzustellen ist
if( $lo_set["Cat_Style"] == 'tpl' )
{
$lo_result = $lo_tpl->generate('templates/'.$lo_set["Cat_Prefix"].'_'.$lo_level.'.html', true);
}
//------------------------------------------
// sitemap als html-liste darstellen
else
{
// html-quelltxt schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4));
// liste schliessen
$lo_result .= "</ul>\n";
}
}
// ergebnis zurueckgeben
//$lo_result = "Test";
return($lo_result);
}
}
//----------------------------------------------------------------
// sitemap darstellen
echo SitemapExtended((int)$lo_set["Cat_Id"]);
?>