Sitemap Extended

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Mo 6. Aug 2007, 20:18

Ich habe den Fehler gefunden!

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"]); 
?>

Deddy
Beiträge: 79
Registriert: Do 1. Jun 2006, 09:00
Kontaktdaten:

Beitrag von Deddy » Do 9. Aug 2007, 10:06

Juhuuuuuuuuuu! :lol: Nun funktionierts.

joe_ma
Beiträge: 101
Registriert: Sa 2. Jun 2007, 07:55
Kontaktdaten:

Beitrag von joe_ma » Do 9. Aug 2007, 10:21

@smac:

Ganz herzlichen Dank für deine Änderung! Jetzt funktioniert das Teil auch bei mir.
Gruss

Jörg Matter

joe_ma
Beiträge: 101
Registriert: Sa 2. Jun 2007, 07:55
Kontaktdaten:

Beitrag von joe_ma » Do 9. Aug 2007, 10:44

Ein kleiner Schönheitsfehler existiert noch: es werden alle Kategorien und Artikel angezeigt, unabhängig davon, ob sie online sind oder nicht.

Ich beherrsche PHP leider nicht so gut, dass ich das einbauen könnte. Kann mir da jemand helfen?
Gruss

Jörg Matter

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Fr 21. Sep 2007, 13:29

Hallo,

was muss ich denn ändern damit ich bei der Auswahl im Backendtemplate die Artikel der aktuelle Kategorie angezeigt bekomme und nicht der Subkategorie?

Zum Beispiel:

Kat 1 (hier befinden sich der Artikel 1a)
|__Kat 2 (hier befinden sich der Artikel 2a, 2b, 2c, 2d)
|__ Kat 2.1 (hier befinden sich die Artikel 2.1a, 2.1b, 2.1c)
|__ Kat 2.2 (hier befinden sich die Artikel 2.2a, 2.2b)
|__ Kat 2.3 (hier befinden sich die Artikel 2.3a)

Jetzt muss ich ja im Template des Artikels 1a angeben das die Artikel aus der Subkategorie Kat2 angezeigt werden (also gebe ich Kat 1 an) und mir dort alle 4 Artikel aufgelistet werden.

Ich möchte allerdings folgendes realisieren: Im Template meines Startartikels 2a möchte ich im Template die Kategorie 2 auswählen können und er soll mir die 4 Artikel aus der Kat 2 anzeigen, allerdings nimmt er die Subkategorie (sprich Kat 2.1) und gibt mir dessen Artikel aus.

Hat das jemand verstanden? :-)

Danke schon mal

wosch

Beitrag von wosch » Fr 21. Sep 2007, 14:02

derSteffen hat geschrieben:Hat das jemand verstanden? :-)
Also ich nicht 8)

Der Name des Modules ist eigentlich falsch.
Richtig und besser wäre:
Artikelliste die Elemente einer Site-Map nutzt.

Les mal hier, da hat nomore schön beschrieben was er möchte und aus diesem Beitrag ist dann das Modul hier entstanden.

http://www.contenido.org/forum/viewtopic.php?t=16385

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Fr 21. Sep 2007, 14:17

Wow wosch du hast 777 Beiträge - eine Schnappszahl, da ist ja wohl ersteinmal ein Saalrunde fällig :-)

Also wie schon oben beschrieben muss ich ja eine Kategorie XY auswählen damit die Artikel der Untergategorie Z von der Kategorie XY dargestellt werden. Ich möchte aber sagen können zeige Artikel der Unterkategorie Z direkt an.

Nachtrag: Ich will das Ding ja auch nicht als Sitemap nutzen sondern als Art Ordnerstruktur-Verzeichnis, wo man sich den durchklicken kann. Das funktioniert auch, indem man dann in den Templates der Artikel die Kategorien angibt aus den die neuen Artikel angezeigt werden. Allerdings muss man immer eine Kategorie höher angeben um diese Artikel angezeigt zu bekommen, da das Modul nur die Artikel der Subkategorie nimmt, welche sich in der ausgewählten Kategorie befindet. Und das versuche ich zu ändern.

MfG

wosch

Beitrag von wosch » Fr 21. Sep 2007, 14:43

http://www.contenido.de/forum/viewtopic.php?t=16493

Code: Alles auswählen

listet alle kategorien mit hilfe der html-listen unterhalb der konfigurierten kategorie auf 
Betonung liegt auf unterhalb.

Entweder deine jetzige Struktur entspricht dem (was ich nicht glaube) dann geht das nicht so wie du möchtest.
Oder die stellst deine Struktur so um das es nach der obigen Prämisse geht.

Ich gebe eine virtuelle Saal- Forenrunde für alle aus :lol:

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » Fr 21. Sep 2007, 14:54

Betonung liegt auf unterhalb.
Ja aber das heißt ich wähle eine Kategorie aus und von dieser Kategorie werdennicht die Artikel genommen, sonder von der Subkategorie der ausgewählten Kategorie!

Richtig, aber wo wird das denn im Ourput festgelegt?

Das ist doch bestimmt irgendwo hier, oder?

Code: Alles auswählen


$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);

Aber ich kriege das einfach nicht raus!

Mit dem LEFT OUTER JOIN hat das ja auch nichts zu tun, oder? Habe hier schon alle möglichen Joins ausprobiert!

Also nochmal das Problem: Artikel werden nicht von der ausgewählten Kategorie genommen, onder von deren Subkategorie!

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » So 23. Sep 2007, 16:38

Ich habe immer noch keine Lösung :-( Das muss doch hier irgendwo im Output stehen das automatisch nicht die ausgwählte Kategorie genommen wird, sondern deren Subkategorie. :-(

Kann mir da jemand einen Tip geben? Bitte.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 23. Sep 2007, 17:49

Steht doch im SQL... Es werden die Kategorien ermittelt, die unter der gewählten Kategorie liegen (genaugenommen eine Ebene darunter).

Gewählte Kategorie muss Parent sein ...

Code: Alles auswählen

$lo_sql.= 'AND CAT.parentid = \''.$lo_kat.'\'  ';
... und beachte das bei der Auswahl der Kategorien:

Code: Alles auswählen

'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 '; 
(cat.idcat = cat_parent.parentid)

Man könnte an beiden Stellen sowas wie (CAT.idcat = CAT_PARENT.parentid OR CAT.idcat = \''.$lo_kat.'\') versuchen, aber ob da dann mit den Joins noch was Vernünftiges bei raus kommt, weiß ich gerade nicht.

Gruß
HerrB

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Beitrag von derSteffen » So 23. Sep 2007, 18:15

Hallo HerrB,


vilen Dnak für den Hinweis. (Habe SQL null Erfahrungen).

Ich habe jetzt nur

Code: Alles auswählen

$lo_sql.= 'AND CAT.parentid = \''.$lo_kat.'\'  ';
in

Code: Alles auswählen

$lo_sql.= 'AND CAT.idcat= \''.$lo_kat.'\'  ';
geändert.,

weil ich die Einbindung
Man könnte an beiden Stellen sowas wie (CAT.idcat = CAT_PARENT.parentid OR CAT.idcat = \''.$lo_kat.'\') versuchen, aber ob da dann mit den Joins noch was Vernünftiges bei raus kommt, weiß ich gerade nicht.
wahrscheinlich nicht richtig vorgenommen hatte = Ergebnis: keine Änderung, keine Fehler.

Aber das andere hat funktioniert.

Danke nichmals und einen schönen Sonntag abend

Steffen

iatros
Beiträge: 43
Registriert: Mo 22. Mai 2006, 07:29
Kontaktdaten:

SitemapExtended

Beitrag von iatros » Mo 8. Okt 2007, 23:18

Hab' das Modul eben auch mal ausprobiert, das ergibt auch eine schöne Aufstellung der Kategorien und Artikel; bloss steht da statt des Artikeltitels jedesmal: no articlehead exist!
Was ist damit gemeint?
Danke für jeden Tipp
Martin

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Di 9. Okt 2007, 08:25

Hallo iatros,

bei der Sitemap wird standardmäßig immer die Headline des Artikel angezeigt. Wenn steht "no articlehead exist" hast du wahrscheinlich in deinem Artikel keine Headline definiert oder angegeben.

iatros
Beiträge: 43
Registriert: Mo 22. Mai 2006, 07:29
Kontaktdaten:

Beitrag von iatros » Di 9. Okt 2007, 11:34

ja schon, bloss wo/wie definiere ich die Headline?

Gesperrt