Navigation: ich möchte nur die oberste Ebene anzeigen!

Gesperrt
Hulk
Beiträge: 25
Registriert: So 21. Nov 2004, 23:29
Kontaktdaten:

Navigation: ich möchte nur die oberste Ebene anzeigen!

Beitrag von Hulk »

Ich schaffe es nicht, das nachfolgende Modul darauf festzulegen, nur die oberste Kategorie anzuzeigen. Was muss ich dafür ändern?

Input

Code: Alles auswählen

// selected category
$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td>Kategorie wählen:</td>
          <td>
            <select name=\"CMS_VAR[0]\">";
            if($selected!="0" && $selected!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".
                     $cfg["tab"]["cat"]." AS B,  ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ".
                     "AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db->query($query);

            // loop result and build the options
            while ($db->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels = $db->f("level");

              for ($i = 0; $i < $levels; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
              
              $spaces .= ">";


              if ($selected == $db->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
      </table>";
Output:

Code: Alles auswählen

<?php

include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

$catStart = "CMS_VALUE[0]";

if ($catStart != "") 
{
  $catIds = conDeeperCategoriesArray($catStart);


  if ( is_array($catIds) ) {

    foreach($catIds as $key=>$val) {
      // Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
      // und nicht angezeigt werden soll.
      if ($key != 0) {

        $sql = "SELECT CAT.idcat AS idcat, name FROM ".
               $cfg["tab"]["cat"]." AS CAT, ".
               $cfg["tab"]["cat_lang"]." AS CATLANG 
               WHERE CAT.idcat = ".$val."
               AND CAT.idcat = CATLANG.idcat
               AND CATLANG.idlang = '$lang'
               AND CATLANG.visible = '1'";

        $db->query($sql);

        $db2 = new DB_Contenido;
        
        while ( $db->next_record() ) {
        
           $target = "_self";
          
          /* Check for redirect and new window flag */
          $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='". $db->f("idcat")."' AND is_start = '1'";
          $db2->query($sql);
          if ($db2->next_record())
          {
                $cidart = $db2->f("idart");
                $sql = "SELECT external_redirect FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '$cidart' AND idlang='$lang'";
                $db2->query($sql);
                if ($db2->next_record())
                {
                    $target = ( $db2->f("external_redirect") == 0 ) ? '_self' : '_blank';
                }
          }
          
echo '<a target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>&nbsp; &nbsp;';

        } // end while
      } // if
    }  // end foreach
  } // end if (is_array)

  
  }
?>
Vielen Dank!!

Hulk
aw029
Beiträge: 73
Registriert: Mi 21. Jan 2004, 16:59
Wohnort: Alfdorf
Kontaktdaten:

Beitrag von aw029 »

ich verstehe dein Problem nicht genau. Wenn du nur die oberste Kategorie anzeigen lassen möchtest, brauchst du die darunter liegenden doch nur offline zu stellen. Was macht es sonst für einen Sinn eine Kategorie zu haben, die keiner sehen soll ?
Ten minutes of reading saves two hours of try-and-error.
crazy
Beiträge: 62
Registriert: Di 10. Feb 2004, 10:39
Kontaktdaten:

Beitrag von crazy »

Hoi Hulk,
Benutze doch die Hauptnavigation,
Wenn du ins Modul schaust. Siehst du wie sich für einen gewissen Bereich dreimal der Code wie wiederholt. Dies, weil das Modul bis zu drei Ebenen anzeigt. Wennn du den Bereich nicht wiederholst und nur einmal für die oberste Ebene umbaust sollt es funktionieren.

Gruss crazy
Hulk
Beiträge: 25
Registriert: So 21. Nov 2004, 23:29
Kontaktdaten:

Noch nicht weitergekommen

Beitrag von Hulk »

Vielen Dank für die Hinweise, leider bin ich noch nicht weitergekommen.

aw029 schrieb am: Do Feb 03, 2005 12:53
ich verstehe dein Problem nicht genau. Wenn du nur die oberste Kategorie anzeigen lassen möchtest, brauchst du die darunter liegenden doch nur offline zu stellen. Was macht es sonst für einen Sinn eine Kategorie zu haben, die keiner sehen soll ?

Der Witz an einem cms ist für mich, dass man Inhalt und Layout trennt, um grafisch unabhängiger zu sein. D.h. ich möchte z.B. aus optischen Gründen oben auf der Seite eine kleine Navigationsleiste mit den Hauptkategorien haben, die nun mal zu groß und unübersichtlich würde, wenn sie die Unterkategorien enthielte.

Wenn ich die Kategorien offline stelle, tauchen Sie in der "normalen Navigation" (bei mir links) nicht mehr auf, wenn ein Artikel aus dieser Kategorie aktiv ist. Das ist ebensowenig gewollt.

crazy schrieb am: Do Feb 03, 2005 9:29
Hoi Hulk,
Benutze doch die Hauptnavigation,
Wenn du ins Modul schaust. Siehst du wie sich für einen gewissen Bereich dreimal der Code wie wiederholt. Dies, weil das Modul bis zu drei Ebenen anzeigt. Wennn du den Bereich nicht wiederholst und nur einmal für die oberste Ebene umbaust sollt es funktionieren.

Gruss crazy
Ich habe kapiert, dass das von mir modifizierte Modul die Funktion conDeeperCategoriesArray aus der functions.con.php enthält. Deshalb leuchtet mit der Vorschlag ein, eine andere Navigation zu benutzen.

Leider enthält die Hauptnavigation in den mir vorliegenden Fassungen lauter Tabellen mit den Unterkategorien etc. Der Versuch, diese zu entfernen ist mir nicht gelungen.

Vor allem benötige ich eine Navigation, die keine Tabellen enthält, da ich alles per css steuern möchte. Wenn jemand eine ganz einfache Navi, nur eine Ebene, keine Tabellen hätte, wäre ich sehr dankbar!

Hulk
Hulk
Beiträge: 25
Registriert: So 21. Nov 2004, 23:29
Kontaktdaten:

so, habs geschafft

Beitrag von Hulk »

So, habs geschafft. Ist zwar nicht elegant (die unteren Ebenen werden abgefragt, aber einfach nicht angezeigt), aber erfüllt seinen Zweck.

Hier das veränderte Hauptnavigationsmodell (Ist bei mir das 4. auf dieser Seite, Layoutsteuerung über template und css)

Input:

Code: Alles auswählen

// selected category 
$selected = "CMS_VALUE[7000]"; 

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"> 
        <tr valign=\"top\"> 
          <td>Kategorie wählen:</td> 
          <td> 
            <select name=\"CMS_VAR[7000]\">"; 
            if($selected!="0" && $selected!=""){ 
             echo"<option value=\"0\">--- kein ---</option>"; 

            }else{ 
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>"; 
            } 

            // fetch all categorys 
            $query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ". 
                     $cfg["tab"]["cat"]." AS B,  ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ". 
                     "AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ". 
                     "AND C.visible=1 ORDER BY A.idtree"; 
            // execute query 
            $db->query($query); 

            // loop result and build the options 
            while ($db->next_record()) { 

              // indent spacer 
              $spaces = "|"; 

              // how many levels 
              $levels = $db->f("level"); 

              for ($i = 0; $i < $levels; $i ++) { 
                // add 2 spaces for every level 
                $spaces = $spaces . "--"; 

              } // end for 
              
              $spaces .= ">"; 


              if ($selected == $db->f("idcat")) { 
                // selected category 
                echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>"; 

              } else { 
                // category 
                echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>"; 

              } // end if 

            } // end while 

echo "      </select>"; 

echo "    </td> 
        </tr> 
      </table>"; 
Output:

Code: Alles auswählen

<!--start modul--> 
<?php 

/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Navigation 1.1 
* Author      :     Jan Lengowski 
* Copyright   :     Contenido - four for business 
* Created     :     15-05-2003 
* Modified    :     26-05-2003 
************************************************/ 

if ( !is_object($db2) ) { 
    $db2 = new DB_Contenido; 
} 

/** 
* Check if a category is child 
* of another category 
* 
* @return boolean true/false 
* @author Jan Lengowski <Jan.Lengowski@4fb.de> 
* @copyright four for business AG 2003 
*/ 
function catIsChildOf_mod4($id, $idparent) { 

    global $cfg, $client, $lang; 

    $db = new DB_Contenido; 

    $parent = $id; 

    while ( $parent != 0 ) { 

        $sql = "SELECT 
                    a.parentid 
                FROM 
                    ".$cfg["tab"]["cat"]." AS a, 
                    ".$cfg["tab"]["cat_lang"]." AS b 
                WHERE 
                    a.idclient  = '".$client."' AND 
                    b.idlang    = '".$lang."' AND 
                    a.idcat     = b.idcat AND 
                    a.idcat   = '".$parent."'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parent = $db->f("parentid"); 

        if ($parent == $idparent) { 
            return true; 
        } 

    } 

    return false; 

} 

if ( catIsChildOf_mod4($idcat, CMS_VALUE[7000]) ) { 
    $sel_idcat = $idcat; 
} else { 
    $sel_idcat = CMS_VALUE[7000]; 
} 

/* Include Template Class */ 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

/** 
* Array storing alle the 
* navigation data 
*/ 
$navitems_mod4 = array(); 


/* Template Instance */ 
$tpl_mod4 = new Template; 

/** 
* Recursive function for creating 
* the navigation array 
* @param Int $idcat Category id 
*/ 
function nav_mod4($idcat) { 

        global $navitems_mod4, $client, $lang, $cfg; 

        $db  = new DB_Contenido; 
        $db2 = new DB_Contenido; 

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parentid = $db->f("parentid"); 

        if ( $parentid == 0 ) { 

           if ( $idcat != CMS_VALUE[7000] ){ 

                $navitems_mod4 = array(); 
              
                $sql = "SELECT 
                            A.idcat, 
                            C.name 
                        FROM 
                            ".$cfg["tab"]["cat_tree"]." AS A, 
                            ".$cfg["tab"]["cat"]." AS B, 
                            ".$cfg["tab"]["cat_lang"]." AS C 
                        WHERE 
                            A.idcat     = B.idcat   AND 
                            B.idcat     = C.idcat   AND 
                            B.idclient  = '$client' AND 
                            C.idlang    = '$lang'   AND 
                            C.visible   = '1'       AND 
                            B.parentid  = 'CMS_VALUE[7000]' 
                        ORDER 
                            BY A.idtree"; 

                      $db->query($sql); 

                      while ($db->next_record()) { 

                            /* Check for external redirects... */ 
                            $sql = "SELECT 
                                        a.external_redirect AS ext 
                                    FROM 
                                        ".$cfg["tab"]["art_lang"]." AS a, 
                                        ".$cfg["tab"]["cat_art"]." AS b, 
                                        ".$cfg["tab"]["cat"]." AS c 
                                    WHERE 
                                        b.idcat     = '".$db->f("idcat")."' AND 
                                        b.is_start  = '1' AND 
                                        c.idclient  = '".$client."' AND 
                                        c.idcat     = b.idcat AND 
                                        a.idart     = b.idart AND 
                                        a.idlang    = '".$lang."'"; 

                            $db2->query($sql); 
                            $db2->next_record(); 

                            $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

                            $navitems_mod4[$db->f("idcat")] = array("idcat"      => $db->f("idcat"), 
                                                                "name"      => $db->f("name"), 
                                                                "target"    => $target); 
                      } 

           } 
            
           return true; 
        } 

        $sql = "SELECT 
                    A.idcat, 
                    C.name 
                FROM 
                    ".$cfg["tab"]["cat_tree"]." AS A, 
                    ".$cfg["tab"]["cat"]." AS B, 
                    ".$cfg["tab"]["cat_lang"]." AS C 
                WHERE 
                    A.idcat     = B.idcat   AND 
                    B.idcat     = C.idcat   AND 
                    B.idclient  = '$client' AND 
                    C.idlang    = '$lang'   AND 
                    C.visible   = '1'       AND 
                    B.parentid  = '$parentid' 
                ORDER BY 
                    A.idtree"; 

        $db->query($sql); 

        while ($db->next_record()) { 

                /* Check for external redirects... */ 
                $sql = "SELECT 
                            a.external_redirect AS ext 
                        FROM 
                            ".$cfg["tab"]["art_lang"]." AS a, 
                            ".$cfg["tab"]["cat_art"]." AS b, 
                            ".$cfg["tab"]["cat"]." AS c 
                        WHERE 
                            b.idcat     = '".$db->f("idcat")."' AND 
                            b.is_start  = '1' AND 
                            c.idclient  = '".$client."' AND 
                            c.idcat     = b.idcat AND 
                            a.idart     = b.idart AND 
                            a.idlang    = '".$lang."'"; 

                $db2->query($sql); 
                $db2->next_record(); 

                $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 
                
                $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"), 
                                                  "name"    => $db->f("name"), 
                                                  "target"  => $target); 
        } 

        $tmp_nav[$idcat]["sub"] = $navitems_mod4; 
        $navitems_mod4 = $tmp_nav; 

        /* Function call */ 
        nav_mod4($parentid); 

}  // end function 

$sql = "SELECT 
            A.idcat, 
            C.name 
        FROM 
            ".$cfg["tab"]["cat_tree"]." AS A, 
            ".$cfg["tab"]["cat"]." AS B, 
            ".$cfg["tab"]["cat_lang"]." AS C 
        WHERE 
            A.idcat     = B.idcat   AND 
            B.idcat     = C.idcat   AND 
            B.idclient  = '$client' AND 
            C.idlang    = '$lang'   AND 
            C.visible   = '1'       AND 
            B.parentid  = '$sel_idcat' 
        ORDER BY 
            A.idtree"; 

$db->query($sql); 

while ( $db->next_record() ) { 

        /* Check for external redirects... */ 
        $sql = "SELECT 
                    a.external_redirect AS ext 
                FROM 
                    ".$cfg["tab"]["art_lang"]." AS a, 
                    ".$cfg["tab"]["cat_art"]." AS b, 
                    ".$cfg["tab"]["cat"]." AS c 
                WHERE 
                    b.idcat     = '".$db->f("idcat")."' AND 
                    b.is_start  = '1' AND 
                    c.idclient  = '".$client."' AND 
                    c.idcat     = b.idcat AND 
                    a.idart     = b.idart AND 
                    a.idlang    = '".$lang."'"; 

        $db2->query($sql); 
        $db2->next_record(); 

        $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

        $navitems_mod4[$db->f("idcat")] = array("idcat"  => $db->f("idcat"), 
                                           "name"   => $db->f("name"), 
                                           "target" => $target); 
} 

/* Create Navigation Array */ 
nav_mod4($sel_idcat); 

/* Start Output buffer */ 


/************************************************************/ 

/*liste erste ebene***********************************/ 

foreach ($navitems_mod4 as $key => $data) { 

    /* 1. Navigations Ebene */ 
    $tpl_mod4->reset(); 
    $tpl_mod4->set('d', 'NAME',  nl2br($data['name'])); 
    $tpl_mod4->set('d', 'TARGET', $data['target']); 
    $tpl_mod4->set('d', 'HREF',  $sess->url('?idcat='.$data['idcat'])); 
    $tpl_mod4->next(); 

echo '';/*anfang listenpunkte erste ebene***********************/ 

        if ($idcat == $data['idcat']) { // template für aktiven menüpunkt 
   $tpl_mod4->generate('templates/nav1_off1.html'); 
        } elseif ( is_array($data['sub']) ) { // template für geöffnete kategorien 
   $tpl_mod4->generate('templates/nav1_off1.html'); 
        } else { // template für geschlossene nicht aktive kategorie 
   $tpl_mod4->generate('templates/nav1_off1.html'); 
        } 

echo '';/*ende listenpunkte erste ebene************************/ 
} // end foreach 

echo '';/*ende liste erste ebene*******************************************************/ 

/***********************************************************/ 
echo '</div>'; 

/* Output buffer-contents */ 
echo $html_mod4; 

?> 
<!--end Modul--> 
Danke für die Hilfe!

Hulk
Gesperrt