ich verwende die SitemapExtended etwas abgewandelt als Navigation, Grund hier für ist, das ich eine kombnierte Navigation aus Kategorien und Artikeln brauche. Jetzt habe ich aber ein Problem, ich hätte gerne geschützte Kategoriepunkte nur dann eingeblendet, wenn der entsprechende User eingelogt ist.
Das ist der verwendete Code, hat da jemand ein paar Tipps oder gar eine Lösung, wie ich das machen kann
Code: Alles auswählen
<?php
//----------------------------------------------------------------
// Includes
cInclude('classes', 'class.article.php');
cInclude('includes', 'functions.api.string.php');
// Test Start
echo '<div id="subnav">';
$db2 = new DB_Contenido;
$sql = "SELECT
parentid
FROM
".$cfg['tab']['cat']."
WHERE
idcat='$idcat'";
$db2->query($sql);
if ($db2->next_record()){
$parentid = $db2->f("parentid");
}
//echo "idcat ".$idcat;
//echo "parent ".$parentid;
//----------------------------------------------------------------
// get vars
unset($lo_set);
$lo_set = array();
// kategorie
//$lo_set["Cat_Id"] = "CMS_VALUE[0]";
if ($parentid == 0 or $parentid == 1 or $parentid == 5 or $parentid == 10 or $idcat == 14 ) {
$lo_set["Cat_Id"] = "$idcat";
} else {
$lo_set["Cat_Id"] = "$parentid";
}
$lo_set["Cat_Level"] = "10";
$lo_set["Cat_SortBy"] = "CAT_TREE.idtree";
$lo_set["Cat_SortDir"] = "asc";
$lo_set["Cat_CssPrefix"] = "";
// artikel
$lo_set["Art_Show"] = "true";
$lo_set["Art_SortBy"] = "artsort";
$lo_set["Art_SortDir"] = "asc";
$lo_set["Art_MaxArt"] = "50";
$lo_set["Art_MaxChar"] = "200";
$lo_set["Art_IncStart"] = "false";
$lo_set["Art_CssPrefix"] = "";
//----------------------------------------------------------------
// standart
// kategorie
$lo_default_cat_level = "10";
$lo_default_cat_sortby = 'CAT_TREE.idtree';
$lo_default_cat_sortdir = 'desc';
$lo_default_cat_cssprefix = '';
// artikel
$lo_default_art_sortby = 'created';
$lo_default_art_sortdir = 'asc';
$lo_default_art_maxart = 50;
$lo_default_art_maxchar = 200;
$lo_default_art_cssprefix = '';
//----------------------------------------------------------------
// 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 - cssprefix
if( strlen($lo_set["Cat_CssPrefix"]) == 0 )
{ $lo_set["Cat_CssPrefix"] = $lo_default_cat_cssprefix; }
//-------------------
// 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 - cssprefix
if( strlen($lo_set["Art_CssPrefix"]) == 0 )
{ $lo_set["Art_CssPrefix"] = $lo_default_art_cssprefix; }
//----------------------------------------------------------------
// 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 listen mit ergebnis
*/
function SitemapExtended($lo_kat = 0, $lo_level = 0)
{
global $sess, $lang, $client, $cfg, $lo_set, $idart, $idcat, $parentid;
$lo_run = 0;
$lo_limitart = 0;
$lo_sql = '';
$lo_result = '';
$lo_arthead = '';
$lo_options = array();
$lo_dbobj;
$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 con_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() )
{
// html-quelltxt schoen machen
$lo_result .= "\n".str_repeat(" ", ($lo_level * 4));
// css-class einfuegen
//$lo_result .= '<div id="subnav"><ul class="'.$lo_set["Cat_CssPrefix"].'_'.$lo_level.'">'."\n";
//$lo_result .= '<div id="subnav"><ul>'."\n";
$lo_result .= '<ul>'."\n";
//------------------------------------------
// ergebnisse durchlaufen
while( $lo_dbobj->next_record() )
{
// html-quelltext schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4) + 2);
// listeneintrag beginnen
$lo_result .= '<li>';
$lo_articleidcat = $lo_dbobj->f('idcat');
if ($lo_articleidcat == $idcat) {
$klasse = "active";
} else {
$klasse = "";
}
//------------------------------------------
// 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 .= '" class="'.$klasse.'">';
$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") )
{
// html-quelltxt schoen machen
$lo_result .= "\n".str_repeat (" ", ($lo_level * 4) + 4);
$lo_result .= '<ul class="'.$lo_set["Art_CssPrefix"].'_'.$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) ));
$lo_arthead = trim($lo_article->getField('title'));
//------------------------------------------
// 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);
$lo_articleid = $lo_article->getField('idart');
if ($lo_articleid == $idart) {
$klasse = "active";
} else
{
$klasse = "";
}
//------------------------------------------
// artikel darstellen
$lo_articleidcat = $lo_dbobj->f('idcat');
if ($lo_articleidcat == $idcat) {
$lo_result .= '<li>';
$lo_result .= '<a href="';
$lo_result .= $sess->url('front_content.php?idcat='.$lo_dbobj->f('idcat').'&idart='.$lo_article->getField('idart'));
$lo_result .= '" class="'.$klasse.'">';
$lo_result .= $lo_arthead;
$lo_result .= '</a>';
$lo_result .= '</li>'."\n";
}
}
}
// 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); }
// listeneintrag beenden
$lo_result .= '</li>'."\n";
}
// html-quelltxt schoen machen
$lo_result .= str_repeat (" ", ($lo_level * 4));
// liste schliessen
//$lo_result .= "</ul></div>\n";
$lo_result .= "</ul>\n";
}
// ergebnis zurueckgeben
return($lo_result);
}
}
//----------------------------------------------------------------
// sitemap darstellen
echo SitemapExtended((int)$lo_set["Cat_Id"]);
// Test End
echo '</div>';
?>
Sascha