Horizontale Navigation?!!

SkyBlader
Beiträge: 303
Registriert: Do 18. Mär 2004, 16:23
Wohnort: Ratingen / NRW
Kontaktdaten:

Beitrag von SkyBlader » Sa 6. Aug 2005, 15:15

wenn ihr keine multiuse fähigkeit braucht, nehmt mal den output code für die 0.7er alpha:

Code: Alles auswählen

<?php 

/*********************************************** 
* OUTPUT 
************************************************/ 

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

// **************************************************************************************************** 
// SECURITY-CHECKS 
// **************************************************************************************************** 

// SQL-Injection Überprüfungen und Work-Arounds 

// lokale Variabeln initialisieren um Injections zu unterbinden 
$db2       = ""; 
$catStart  = ""; 
$catPrev   = ""; 
$sTmpStr   = ""; 
$db2_sql   = ""; 
$catIds    = ""; 
$key       = ""; 
$val       = ""; 
$sql       = ""; 

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

// erstelle eine zweite DB-Klasseninstanz, da wir hier 
// mit zwei Abfragen udn Resultsets arbeiten müssen 
$db2 = new DB_Contenido; 

/* 
$eckkla_auf   = '::&nbsp;'; 
$eckkla_zu    = ''; 
$eckkla_trenn = '<br>'; 

$strBEGIN = ''; 
$strEND   = ''; 
*/ 

// Hole aus der Artikeldefinition die Ausgewählte Einstellungen 
$catStart                   = "CMS_VALUE[3200]"; 
$catPrev                    = "CMS_VALUE[3201]"; 
$eckkla_auf                  = "CMS_VALUE[3202]"; 
$eckkla_zu                   = "CMS_VALUE[3203]"; 
$eckkla_trenn                = "CMS_VALUE[3204]"; 
$strBEGIN                   = "CMS_VALUE[3205]"; 
$strEND                     = "CMS_VALUE[3206]"; 
$cfg_chkchildid             = "CMS_VALUE[3207]"; 
$cfg_css_link               = "CMS_VALUE[3208]"; 
$cfg_css_linkhl             = "CMS_VALUE[3209]"; 
$cfg_addstrafternumitems_num    = "CMS_VALUE[3210]"; 
$cfg_addstrafternumitems_str    = "CMS_VALUE[3211]"; 


// * get catPrec Category and output CatName as [ BackTo ]  nav item 


if ($catStart != "" && $catStart != "--kein--" ) { 
  $sTmpStr = ""; 

        if ( $catPrev != "" && $catPrev != "--kein--" ) { 
        // Datenbankabfrage ( SQL QUERY ) aufbauen 
        $sql = "   SELECT 
                       CAT.idcat AS idcat, 
                       name 
                    FROM 
                       ".$cfg["tab"]["cat"]." AS CAT, 
                       ".$cfg["tab"]["cat_lang"]." AS CATLANG 
              
                     WHERE   CAT.idcat = ".$catPrev." 
                           AND CAT.idcat = CATLANG.idcat 
                           AND CATLANG.idlang = '$lang' 
                           AND CATLANG.visible = '1'"; 
                      
        // Datenbankabfrage durchführen 
        $db->query($sql); 


        // die einzelnen Recordsets der Datenbankabfrage durchgehen 
        while ( $db->next_record() ) { 

      // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist 
           if ( strlen($sTmpStr) == 0 ) { 
               // ... Nein, dann die Formatierung für den ersten Eintrag verwenden 
               // und den Eintrag der Ausgabevariabel hinzufügen 
               $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu; 
           } 
           else 
           { 
               // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und 
               // den Eintrag der Ausgabevariabel hinzufügen 
               $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;          
           }  // end if 

        } // end while 
        
        } // end $catPrev überprüfung 
    
                        
   $db2_sql = "   SELECT 
            * 
         FROM ". $cfg["tab"]["cat"] ." AS A 
       
         WHERE 
          
           A.parentid = ". $catStart . " 

                                                ORDER BY A.preid 

                                                 "; 

   // Abfrage ausführen 
   $db2->query($db2_sql); 

     // Ermittlung aller Kategorie IDs der ausgesuchten 
     // Navigationsebene und speicherug in einem Array 
   while ( $db2->next_record() ) { 
             // $catIds[] = $db2->f("idcat"); 
      $test_1[$db2->f("preid")] = $db2->f("idcat"); 
   } 
    
/* 
PREID => IDCAT  ( $test_1 ) 
Array ( 
   [0]    => 50 

   [26]    => 27 
   [27]    => 28 
   [28]    => 29 
   [29]    => 30 
   [30]    => 31 
   [31]    => 32 
   [32]    => 33 
   [33]    => 38 
   [34]    => 35 
   [35]    => 36 
   [36]    => 37 
   [38]    => 34 
   [50]    => 26 
) 
------------------------------------ 
*/ 

// --------------------------------------------- 
// sort ids 
$ar_anz = count($test_1); 
$lpre = 0; 
$test_3 = ""; 
$ires = ""; 

for ( $sli = 1 ; $sli <= $ar_anz ; $sli++ ) 
{ 
   $ires        = $test_1[$lpre];    
   $test_3[]    = $test_1[$lpre];    
   $lpre        = $ires; 
} 


// print_r($test_3); echo '<br><br>'; 
$catIds = $test_3; 
// --------------------------------------------- 

  // Überprüfung ob $catIds wirklich ein Array ist 
  if ( is_array($catIds) ) { 

    // die einzelnen IDs durchgegen 
    $cntAddStrAfterNItems = 1; 
    foreach($catIds as $key=>$val) { 

        
        // Datenbankabfrage ( SQL QUERY ) aufbauen 
        $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'"; 

        // Datenbankabfrage durchführen 
        $db->query($sql); 


        // die einzelnen Recordsets der Datenbankabfrage durchgehen 
        
        while ( $db->next_record() ) { 
            
        
   if ( $cfg_chkchildid && sn_check_if_child ( $idcat, $catStart )) 
   { 
           // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist 
              if ( strlen($sTmpStr) == 0 ) { 
                     // ... Nein, dann die Formatierung für den ersten Eintrag verwenden 
                     // und den Eintrag der Ausgabevariabel hinzufügen 
                     $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="'.$cfg_css_linkhl.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu; 
              } 
              else 
              { 
                     // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und 
                     // den Eintrag der Ausgabevariabel hinzufügen 
                     $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_linkhl.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;          
              }  // end if 
   } 
   else 
   { 
           // überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist 
              if ( strlen($sTmpStr) == 0 ) { 
                     // ... Nein, dann die Formatierung für den ersten Eintrag verwenden 
                     // und den Eintrag der Ausgabevariabel hinzufügen 
                     $sTmpStr = $sTmpStr . $strBEGIN .  $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu; 
              } 
              else 
              { 
                     // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und 
                     // den Eintrag der Ausgabevariabel hinzufügen 
                     $sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;          
              }  // end if 
   } 
    


        } // end while 
        
    // Wenn N-Item ausgegeben wurden ... 
    if ( $cntAddStrAfterNItems == $cfg_addstrafternumitems_num ) 
    { 
            // Zeichenkette einfügen und Counter zurücksetzen 
           $sTmpStr = $sTmpStr . $cfg_addstrafternumitems_str; 
            $cntAddStrAfterNItems = 1; 
    } 
    else 
    { 
       // ansonsten Counter einfach um 1 erhöhen 
      $cntAddStrAfterNItems = $cntAddStrAfterNItems + 1; 
    } // end if 
    
    }  // end foreach 

    // END Zeichen $strEND anfügen 
    $sTmpStr = $sTmpStr . $strEND; 

    // Ausgabevariabel schreiben, da nun alle Einträge behandelt wurden. 
    echo $sTmpStr; 
  } // end if (is_array) 


} 



function get_parentid_from_idcat ( $l_idcat ) 
{ 
   $ldb = new DB_Contenido; 
   $lsql= "SELECT * 
      FROM    ".$cfg["tab"]["cat"]." AS CAT, 
                    ".$cfg["tab"]["cat_lang"]." AS CATLANG 
              
                WHERE   CAT.idcat = ".$l_idcat." 
                        AND CAT.idcat = CATLANG.idcat 
                        AND CATLANG.idlang = '$lang' 
                        AND CATLANG.visible = '1'"; 

   $ldb->query($lsql); 

   while ( $ldb->next_record() ) 
   { 
      $l_parid = $ldb->f("parentid"); 
   } 

   return $l_parid; 

} // end function get_parentid_from_idcat 

function sn_check_if_child ( $l_idcat, $l_paridcat ) 
{ 
   $bResult = false; 
   $l_int   = $l_idcat; 

   while ( $l_int != 0 && $l_int != $l_paridcat ) 
   { 
      $l_int = get_parentid_from_idcat  ( $l_int ); 

      if ( $l_int == $l_paridcat ) 
      { 
         $bResult = true; 
      } // end if 
   } // end while 
    
   return $bResult; 
} // check_if_child 



?> 
werd den multiuse aber nicht mehr fixen, da ich ja mein multinav nun doch auf 4.4 zurückportiere ;) und dadurch dieses modul hier überflüssig wird.

so long

stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Ein anderes Script

Beitrag von kypta » Mo 26. Sep 2005, 20:22

Ich habe mir eine andere horizontale Navigation zusammengebaut. Evtl. ist da ja jemand daran interessiert.

Diese Navi ist ein einziges Modul. Zur Konfiguration muss lediglich der "Startpunkt" angegbeben werden. In der ersten Zeile werden dann alle Kategoriene angezeigt, die einen Level unter dem "Startpunkt" liegen. Auf der zweiten Zeile werden dann jeweils alle Kategorien angezeigt, die unter der in der ersten Zeile ausgewählten Kategorie liegen.

Also:
Punkt 1 | Punkt 2 | Punkt 3 | usw
auf der ersten Zeile

Punkt 1.1 | Punkt 1.2 | Punkt 1.3 usw
auf der zweiten Zeile (falls Punkt 1 ausgewählt ist)

Die jeweils aktiven Menüpunkte werden hervorgehoben.

Der Code ist nicht alleine von mir: natürlich habe ich bei Contenido selber tüchtig abgeschaut und Funktionen übernommen und angepasst.

Input: von der Contenido Service-Navigation übernommen ...

Code: Alles auswählen

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

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie w&auml;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
// funktion, um alle subkategorien einer kategorie herauszufinden
function thomas_DeeperCategoriesArray($idcat_start)
{
    global $db, $client, $cfg;

    $sql = "SELECT
                *
            FROM
                ".$cfg["tab"]["cat_tree"]." AS A,
                ".$cfg["tab"]["cat"]." AS B
            WHERE
                A.idcat  = B.idcat AND
                idclient = '".$client."'
            ORDER BY
                idtree";

    $db->query($sql);

    $i = 0;

    while ( $db->next_record() )
	{
		if ($db->f("idcat") == $idcat_start)
			{   // den level der start-id herausfinden
				$curLevel = $db->f("level");
				$i = true;
			} else
			{   // und alle mit dem selben level ausschliessen!!!
				if ($curLevel == $db->f("level"))
				{ // ending part of tree
					$i = false;
				}
			}
        
        if ($i == true) {
				// das ganze begrenzen auf einen sublevel
				if ($db->f("level")==($curLevel+1))
				{ // alle kinder im selben level dem array hinzufügen
					$catstring[] = $db->f("idcat");
				}
        }
    }
    return $catstring;
}
// ende der funktion


// funktion zum herausfinden des parent
function thomas_GetParent($idcat_child)
{
    global $db, $client, $cfg;

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

    $db->query($sql);

    while ( $db->next_record() )
	{
		if ($db->f("idcat") == $idcat_child)
		{   		
			$curParent = $db->f("parentid");
		}
    }
    return $curParent;
}



// tabellenausgabe
?>
<table width="756" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td>
<?php



// das hauptmenu erstellen

$catStart = "CMS_VALUE[0]";

if ($catStart != "")
{
	// erstelle liste mit allen id's die unter $catStart sind
	$catIds = thomas_DeeperCategoriesArray($catStart);
	
	// finde heraus, wer der parent ist von der aktuell angewählten kategorie $idcat
	$tht_parent_id = thomas_GetParent($idcat);
//echo "PARENT".$tht_parent_id;

	if ( is_array($catIds) )
	{

		foreach($catIds as $key=>$val) {

			$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';
					}
				}

				// link erzeugen
				// falls datensatz die aufgerufene idcat ist
				if ($idcat == $db->f("idcat"))
				{
					echo '<a class="navi" target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'"><span style="background-color:\'#FFCC00\'; padding:2px; color:\'#254984\'">'.$db->f("name").'</span></a> ';
					// VARIABLE SETZEN DAMIT ICH WEISS WELCHE KATEGORIE AKTIV IST UND SOMIT EIN SUBMENU BRAUCHT
					$tht_activ_cat = $db->f("idcat");
				} else 
				{
					// falls datensatz der parent der aufgerufenen idcat ist
					if ($tht_parent_id == $db->f("idcat"))
					{
						echo '<a class="navi" target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'"><span style="background-color:\'#FFCC00\'; padding:2px; color:\'#254984\'">'.$db->f("name").'</span></a> ';
						// VARIABLE SETZEN DAMIT ICH WEISS WELCHE KATEGORIE AKTIV IST UND SOMIT EIN SUBMENU BRAUCHT
						$tht_activ_cat = $tht_parent_id;
					} else
					{
						echo '<a class="navi" target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'"><span style="background-color:\'#254984\'; padding:2px;" onMouseOut="this.style.backgroundColor=\'#254984\'" onMouseOver="this.style.backgroundColor=\'#FFCC00\'">'.$db->f("name").'</span></a> ';
					} // ende else			
				} // ende else
			} // end while
		}  // end foreach
	} // end if (is_array)
} // end if (not empty cat start)


//
// ende der Hauptnavigation 
//


// mittelteil der tabelle ausgeben
?>
	</td>
  </tr>
  <tr> 
    <td>
<?php


// submenu erstellen



// jetzt ist der startpunkt zum menü-generieren die parent-kategorie
$tht_catSub = $tht_activ_cat;

if ($tht_catSub != "") {
  $catIds = thomas_DeeperCategoriesArray($tht_catSub);

  if ( is_array($catIds) ) {

    foreach($catIds as $key=>$val) {

        $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';
                }
          }
// link erzeugen
		if ($idcat == $db->f("idcat")) {
          echo '<a class="navi" target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'"><span style="background-color:\'#FFCC00\'; padding:2px; color:\'#254984\'">'.$db->f("name").'</span></a> ';
    	} else {
          echo '<a class="navi" target="'.$target.'" href="front_content.php?idcat='.$db->f("idcat").'"><span style="background-color:\'#254984\'; padding:2px;" onMouseOut="this.style.backgroundColor=\'#254984\'" onMouseOver="this.style.backgroundColor=\'#FFCC00\'">'.$db->f("name").'</span></a> ';
		}
// ende link erzeugen
        } // end while
    }  // end foreach
  } // end if (is_array)
}


// das ende der tabelle ausgeben.
?>

	</td>
  </tr>
</table>
Sobald ich die Seite, für die es gemacht ist, online ist, paste ich den Link damit Ihr auch was zum ansehen habt.
Hoffe, Ihr könnt das brauchen.
Gruss
Thomas

Gesperrt