ExtendedSitemap abgewandelt geschützte Seiten...

Gesperrt
saschar
Beiträge: 141
Registriert: Mo 21. Okt 2002, 14:37
Wohnort: Dornbirn, A
Kontaktdaten:

ExtendedSitemap abgewandelt geschützte Seiten...

Beitrag von saschar » Di 18. Okt 2011, 10:54

Hallo,
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>';
    
    ?>
Vielen Dank
Sascha

Gesperrt