Horizontale Navigation?!!

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

Beitrag von SkyBlader » Mo 28. Jun 2004, 12:11

Nehm mal für den OutputCode des Modules folgenden Code:

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;


// Hole aus der Artikeldefinition die Ausgewählte Navigationsebene
$catStart = "CMS_VALUE[3100]";
$catPrev  = "CMS_VALUE[3101]";

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


if ($catStart != "") {
  $sTmpStr = "";

        // 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 .  '[<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">Zurück zu '.$db->f("name").'</a>]';
	        }
	        else
	        {
	            // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
	            // den Eintrag der Ausgabevariabel hinzufügen
	            $sTmpStr = $sTmpStr .  ' - [<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">Zurück zu '.$db->f("name").'</a>]';	        
	        }  // end if
        } // end while
	               		


  // Ermittlung aller Kategorie IDs der ausgesuchten
  // Navigationsebene und speicherug in einem Array
  // $catIds = conDeeperCategoriesArray($catStart);


	$db2_sql = "	SELECT
				*
			FROM ". $cfg["tab"]["cat"] ." AS A
		
			WHERE
			
			  A.parentid = ". $catStart;

	// 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");
	}



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

    // die einzelnen IDs durchgegen
    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() ) {
         
                // ü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 .  '[<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>]';
	        }
	        else
	        {
	            // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
	            // den Eintrag der Ausgabevariabel hinzufügen
	            $sTmpStr = $sTmpStr .  ' - [<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>]';	        
	        }  // end if
        } // end while
    }  // end foreach
    // Ausgabevariabel schreiben, da nun alle Einträge behandelt wurden.
    echo '&nbsp;&nbsp;' . $sTmpStr;
  } // end if (is_array)


}
?>
so long

Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Di 29. Jun 2004, 11:31

Danke vielmals, :!:
ist schon witzig

Nun wird die 1. Kat als letztes und die 2te Kat als vorletztes angezeigt
Alle anderen (3-14) in der richtigen Reihenfolge

Eigentlich soweit OK wenn man nach den IDCAT`s geht,
IDCAT 26-38 werden in der richtigen Reihenfolge ausgegeben,
warum IDCAT 9 ans Ende nach 38 gebaumelt wird raff ich nicht

In meiner "Logik" (Ok OK :) ) kommt 9 vor 26 oder hat sich in der Weltordnung etwas so gravierend geändert und ich hab die Einschläge nicht mitbekommen?
:shock:

Herzlichen Dank
TimeSpirit

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Mi 30. Jun 2004, 13:19

Hiermit möchte ich
SkyBlade - Stefan -

:!: suuuuper herzlich für Seinen Einsatz danken :!: :!:

Problem ist zwar (noch) nicht gelöst, aber Stefan hat es über mein Backend genau lokalisieren können und bastelt bereits an einer Lösung.

Soviel Einsatz ist einfach...Wort such....unbeschreiblich!

Herzlichen Dank,
wie versprochen, wenn Du mal in der Nähe bist, machen wir ein Fass Nattern...ähm..Bier auf!

TimeSpirit (Volker)

PS: beruhigend das "solche" Menschen nebenbei mit der Verteidigung unserer Heimat betraut sind :lol:
Rechtschreibfehler sind nicht als "Fehler" sondern als Hommage an Pisa zu verstehen ;)
Keine Einträge im Errorlog :)
Contenido 4.4.4 - Firefox -

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

Beitrag von SkyBlader » Mi 30. Jun 2004, 14:25

Ok, das Problem ist nunmehr nicht nur lokalisiert, sonder sogar behoben *g*.

Aber erstmal kurz was bei der vresion 0.2 alpha noch das Problem war.

Zeitgeist hatte einen Catbaum angelegt, in dem er Unterkategorien erstellt hat. Nach dem er sich aber irgendwann entschlossen hat, die Unterstekategorie soll nach ganz oben wandern, wurde die "Sortierung" durcheinander geworfen.

Dazu betrachten wir einfach mal 4 Felder der Tabelle "con_cat":

idcat
preid
postid
parentid

In PREID wird die IDCAT vom Backend eingeschrieben, die über idcat steht, und in POSTID die darauf folgende, und zwar unter berücksichtigung von PARENTID, die die ÜBERGEORDENTE Katerie darstellt. Also per POSTID und PREID werden die Unterkategorien einer Kategorie sortiert.

in der Version kam dabei im Fall Zeitgeist folgendes raus

Code: Alles auswählen

idcat - preid
26 - 0 
27 - 26 
28 - 27 
29 - 28 
30 - 29 
50 - 30 
32 - 31 
33 - 32 
34 - 33 
35 - 34 
36 - 35 
37 - 36 
38 - 37 
31 - 50 

Naja ... was habe ich nun gemacht. ich habe anstatt nur die nacheinanderfolgende IDCATs in ein Array zu schreiben, erst die PREID und dann die IDCAT in ein Array geschrieben ( $test_1[] ).

Danach sortiere ich mit folgender Routine das Array durch:

Code: Alles auswählen

// ---------------------------------------------
// 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:
}
und weiße anschliend das ergbenis dem array $catIds zu, das im nachfolgenden Code dann für die anzeige hergenommen wird.

So long
Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

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

Beitrag von SkyBlader » Mi 30. Jun 2004, 14:30

DELETED von mir
Zuletzt geändert von SkyBlader am Mi 30. Jun 2004, 15:47, insgesamt 1-mal geändert.
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Mi 30. Jun 2004, 15:04

Der Mann ist Klasse,
dennoch

NICHT EINSETZEN, Code Red..soll heissen, sowohl Input als auch Output zeigen die rote Lampe und die Ausgabe produziert eine weisse Seite.

Bitte auf erneute Freigabe hier im Forum warten.

Greets
TimeSpirit on the Fly
Rechtschreibfehler sind nicht als "Fehler" sondern als Hommage an Pisa zu verstehen ;)
Keine Einträge im Errorlog :)
Contenido 4.4.4 - Firefox -

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

Beitrag von SkyBlader » Mi 30. Jun 2004, 15:49

ok, hier aber nun wirklich der v0.3 alpha code, der auch funzt und keine roten bubbles bringt:

Beschreibung:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL
*
* Modulname    :	MOD_NavBar_SecLvl
* Modulversion :	0.3 alpha 
* Author       :	Stefan Bürk
* Kontakt      :	Email: webmaster@skyblader.org
* Copyright    :	SkyBlader Networxx, Stefan Bürk
* C-Version    :	4.4
* Created      :	09-03-2004
* Modified     :	30-06-2004
*
* Beschreibung :
*
* Navigationsstruktur für Untermenüs mit 1 Navigationsebene,
* die im SecNavLvl Bereich angezeigt wird.
* 
************************************************/

30.06.2004
==========


out	Manuelle sortierung der CatIds auf Grund der PREID, da dies durch
	eine SQL Anweisung nicht zu bewerkstelligen ist.
	
	--> siehe http://www.contenido.de/forum/viewtopic.php?t=4576
	
in	Font und Select auf BackEnd CSS Klassen vom umgestellt.


19.03.2004
==========

out	DB-Abfrage 2 ( $sql ) lesbar für Otto-Normal-Verbraucher formatiert

17.03.2004
==========

out	Securitychecks implementiert um Injections zu unterbinden
	-	lokale Modul-Variablen initalizieren um Injects zu unterbinden
	-	Parametervariabeln gegen SQL-Injection-Versuche untersuchen
INPUT:

Code: Alles auswählen

/***********************************************
* INPUT
************************************************/

// selected category
$selected = "CMS_VALUE[3100]";
$selected2= "CMS_VALUE[3101]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie wählen, deren Unterkategorien<br> angezeigt werden sollen:</td>
          <td class=\"text_medium\">
            <select class=\"text_medium\" name=\"CMS_VAR[3100]\">";
            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>
        <tr valign=\"top\">        
          <td class=\"text_medium\">Zurückkategorie wählen:</td>
          <td class=\"text_medium\">
            <select class=\"text_medium\" name=\"CMS_VAR[3101]\">";
            if($selected2!="0" && $selected2!=""){
             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 ($selected2 == $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

/***********************************************
* 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;


// Hole aus der Artikeldefinition die Ausgewählte Navigationsebene
$catStart = "CMS_VALUE[3100]";
$catPrev  = "CMS_VALUE[3101]";

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


if ($catStart != "") {
  $sTmpStr = "";

        // 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 .  '[<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">Zurück zu '.$db->f("name").'</a>]';
           }
           else
           {
               // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
               // den Eintrag der Ausgabevariabel hinzufügen
               $sTmpStr = $sTmpStr .  ' - [<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">Zurück zu '.$db->f("name").'</a>]';          
           }  // end if
        } // end while
                        
	$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
    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() ) {
         
                // ü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 .  '[<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>]';
           }
           else
           {
               // ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
               // den Eintrag der Ausgabevariabel hinzufügen
               $sTmpStr = $sTmpStr .  ' - [<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>]';          
           }  // end if
        } // end while
    }  // end foreach
    // Ausgabevariabel schreiben, da nun alle Einträge behandelt wurden.
    echo '&nbsp;&nbsp;' . $sTmpStr;
  } // end if (is_array)


}
?>
so long

Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Mi 30. Jun 2004, 15:53

Yepp, funzt Klasse und einwandfrei
(klar, hat er ja auch in meinem Sys "on the fly" getestet :) )

SUPER!
TimeSpirit
Rechtschreibfehler sind nicht als "Fehler" sondern als Hommage an Pisa zu verstehen ;)
Keine Einträge im Errorlog :)
Contenido 4.4.4 - Firefox -

christophbihler
Beiträge: 2
Registriert: Do 8. Jul 2004, 14:36
Wohnort: Deutschland/Bayern/München
Kontaktdaten:

anfrage um hilfe

Beitrag von christophbihler » Do 8. Jul 2004, 15:15

hallo liebes forum.

ich würde ebenfalls gerne dieses navigationsmenü verwenden. ich habe den letztendlich letzten hier angegebenen code in ein modul kopiert, einen neuen container im layout definiert und diesen im template als das modul definiert. als ergebnis erhalte ich aber keinerlei ausgabe.

da php- und mysql-kenntnisse gelinde gesagt bescheiden sind, kann ich leider keine "fehlerdiagnose" stellen. vielleicht stimmt auch eine meiner contenido-einstellungen nicht, da aber sämtliche andere dinge funktionieren (layouts erstellen, simple module verwenden und erstellen, templates bauen, ...), denke ich nicht, dass es daran liegt.

windows, apache, mysql, laufen problemlos.

weitere nötige informationen gebe ich selbstverständlich gerne.

ich bedanke mich schon mal im voraus für die hilfe.
Christoph Bihler

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Do 8. Jul 2004, 15:29

Hi,
nicht nur Template konfigurieren(!)

Bei bestehenden Artikeln werden TemplateÄnderungen -EINSTELLUNGEN meist nicht automatisch übernommen.
Geh in die Konfiguration des Artikeln und mach dort Deine Einstellungen (auch)

Sicher gehts dann, wenn nicht melden :)

Greets
TimeSpirit
Rechtschreibfehler sind nicht als "Fehler" sondern als Hommage an Pisa zu verstehen ;)
Keine Einträge im Errorlog :)
Contenido 4.4.4 - Firefox -

christophbihler
Beiträge: 2
Registriert: Do 8. Jul 2004, 14:36
Wohnort: Deutschland/Bayern/München
Kontaktdaten:

re

Beitrag von christophbihler » Do 8. Jul 2004, 15:53

du bist genial, vielen dank :).
Christoph Bihler

Zeitgeist
Beiträge: 205
Registriert: Fr 5. Sep 2003, 09:47
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Zeitgeist » Do 8. Jul 2004, 16:30

hi,
als genital :wink: würd ich mich noch lange nicht bezeichnen...

Ich weiss nur, wo ich drüber gestolpert bin :) ;)

greets
TimeSpirit
Rechtschreibfehler sind nicht als "Fehler" sondern als Hommage an Pisa zu verstehen ;)
Keine Einträge im Errorlog :)
Contenido 4.4.4 - Firefox -

schmitt197
Beiträge: 90
Registriert: Fr 14. Nov 2003, 17:56
Kontaktdaten:

Beitrag von schmitt197 » Mo 23. Aug 2004, 16:12

Hi,
ich würde gerne den aktuellen Punkt in dieser Navigation highlighten (s. auch hier).

Wäre echt spitze, wenn ihr mir weiterhelfen könntet.

Danke
Thomas[/url]

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

Beitrag von SkyBlader » Di 21. Sep 2004, 01:06

Guten Morgen liebe Community ( im wahrsten Sinne des Wortes *g* 2 Uhr ;) )

ich habe so eben eine neue Version meines Navigations Modules fertiggestellt.

SN_NavMod v0.4 alpha ist fertig

Hier eine grobe auflistung der Neuerungen:

- 5 Einstellungsmöglichkeiten für die Steuerung der Linkerstellung im Frontend
* Begin
* Vor Link
* Nach Link
* Trennzeichen
* Ende

Im Prinzip ist das Modul vom Grund her eine Horizintale Navigationsleiste, aber durch verwendung vom Html-Tag <BR> im Trennzeichen-Feld kann daraus auch eine Vertikale Leiste werden.

- Ja/Nein Box ob eine Überprüfung auf Highlighting des aktuellen Punktes durchgeführt werden soll oder nicht. Dabei wird auch der Wunsch eines Community members berücksichtigt, falls die aktuelle IDCAT ein Kind ( Child ) im CatTree zur angegebenen Anzeige Kategorie ist.

Desweiteren können nun im BackEnd zwei CSS-Klassen eingestellt werden, die für die Linkgenerierung mitverwendet werden. LinkCSS wird immer für den normalen Link verwendet, Wenn CheckForHighlight aktiviert, dementsprechend die LinkHLCSS für den Hervorgehobenen Link.

Die BackCat Angabe ist immer noch enthalten, so wie in den vorangegangenen Modulversionen auch.

Angemerkt sei nur, das ich auf Grund von Zeitproblemen für die CheckChild FUnktionalität keine umfangreichende Tests durchführen konnte. Hoffe es funktioniert wie angedacht, zumindestens läßt sich das Modul ohne Probleme in meinem 4.5 Snapshot installation einwandfrei einfügen.

Hier nun der Code der aktuellen Version:

SN_NavMod - DESCRIPTION

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL
*
* Modulname    :	SN_NavMod
* Modulversion :	0.4 alpha 
* Author       :	Stefan Bürk
* Kontakt      :	Email: webmaster@skyblader.org
* Copyright    :	SkyBlader Networxx, Stefan Bürk
* C-Version    :	4.4
* Created      :	09-03-2004
* Modified     :	21-09-2004
*
* Beschreibung :
*
* Navigationsstruktur für Untermenüs mit 1 Navigationsebene,
* Ausgabe ist im Output Modul über Variabeln steuerbar.
* 
************************************************/

21.09.2004
==========

OUT	Implementierung von zwei Funktionen, um für den Highlight Teil die
	Überprüfung, ob ein Entry hervorgehoben werden darf, auch bei Kinder
	ebene innerhalb des Kategoriebaumes sicherzustellen.

	Desweiteren wurde die im Inputteil als Konfigurierbar bereitgestellten
	Variabeln für die CSS-Klassenauswahl für Link und LinkHervorgehoben
	in der Routine nun berücksichtig.

IN	Auswahlschalter für HighlightingsÜberprüfung unter Berücksichtigung 
	von CHILD-Ids implementiert => cfg_check_parequal

IN	Konfiguration zur Konfigurierung für die CSS-Klasse für NavLink und 
	NavLink Hervorgehoben (Aktuelle Category)




20.09.2004
==========

IN	Implementierung von weiteren Konfigurationsmöglichkeiten für

	- VorLink
	- NachLink
	- LinkTrennzeichen
	- Anfang
	- Ende

	bei einem Aufbau der Linksammlungen für das dynamische Menü im
	folgenden Format:

	ANFANG + [ VorLink + {LINK} + NachLink ] + LinkTrennzeichen + [ VorLink + {LINK} + NachLink ] ..... + Ende

OUT	Anpassen der Ausgabeerstellungsroutingen, um die neue Konfigurierbarkeit in den
	Routinen zu berücksichtigen.



17.09.2004
==========

OUT	Erweiterung um weitere Konfigurationsvariablen für die Ausgabensteuerung,
	um eine weitere modularisierung zu bewerkstelligen.

	Dazu wurden unter anderem auch drei kleine Bugs entfernt, die vorher nicht
	aufgefallen sind, und erst durch die modularisierung zum tragen kamen.

30.06.2004
==========


out	Manuelle sortierung der CatIds auf Grund der PREID, da dies durch
	eine SQL Anweisung nicht zu bewerkstelligen ist.
	
	--> siehe http://www.contenido.de/forum/viewtopic.php?t=4576
	
in	Font und Select auf BackEnd CSS Klassen vom umgestellt.


19.03.2004
==========

out	DB-Abfrage 2 ( $sql ) lesbar für Otto-Normal-Verbraucher formatiert

17.03.2004
==========

out	Securitychecks implementiert um Injections zu unterbinden
	-	lokale Modul-Variablen initalizieren um Injects zu unterbinden
	-	Parametervariabeln gegen SQL-Injection-Versuche untersuchen
SN_NavMod - INPUT

Code: Alles auswählen

/***********************************************
* INPUT
************************************************/

// selected category
$selected 		= "CMS_VALUE[3200]";
$selected_var		= "CMS_VAR[3200]";

$selected2		= "CMS_VALUE[3201]";
$selected2_var		= "CMS_VAR[3201]";

// cfg_prelink
$cfg_prelink		= "CMS_VALUE[3202]";
$cfg_prelink_var	= "CMS_VAR[3202]";
if ( $cfg_prelink == "" || $cfg_prelink == "0" )
{ 
	$cfg_prelink = "::&nbsp;";
}

$cfg_postlink		= "CMS_VALUE[3203]";
$cfg_postlink_var	= "CMS_VAR[3203]";

$cfg_linkdiv		= "CMS_VALUE[3204]";
$cfg_linkdiv_var	= "CMS_VAR[3204]";
if ( $cfg_linkdiv == "" || $cfg_linkdiv == "0" )
{ 
	$cfg_linkdiv = "<br>";
}

$cfg_pre_str		= "CMS_VALUE[3205]";
$cfg_pre_str_var	= "CMS_VAR[3205]";

$cfg_post_str		= "CMS_VALUE[3206]";
$cfg_post_str_var	= "CMS_VAR[3206]";

$cfg_check_parequal	= "CMS_VALUE[3207]";
$cfg_check_parequal_var = "CMS_VAR[3207]";

$cfg_css_link		= "CMS_VALUE[3208]";
$cfg_css_link_var	= "CMS_VAR[3208]";
if ( $cfg_css_link == "" || $cfg_css_link == "0" )
{ 
	$cfg_css_link = "navlink";
}

$cfg_css_linkhl		= "CMS_VALUE[3209]";
$cfg_css_linkhl_var	= "CMS_VAR[3209]";
if ( $cfg_css_linkhl == "" || $cfg_css_linkhl == "0" )
{ 
	$cfg_css_linkhl = "navlink_highlighted";
}

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie wählen, deren Unterkategorien<br> angezeigt werden sollen:</td>
          <td class=\"text_medium\">
            <select class=\"text_medium\" name=\"".$selected_var."\">";
            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>
        <tr valign=\"top\">        
          <td class=\"text_medium\">Zurückkategorie wählen:</td>
          <td class=\"text_medium\">
	
            <select class=\"text_medium\" name=\"".$selected2_var."\">";
            if($selected2!="0" && $selected2!=""){
             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 ($selected2 == $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>";

// *********************************************************************************************************
// *** cfg_prelink
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_PRELINK%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_prelink_var."\" value=\"".$cfg_prelink."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_prelink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_postlink
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_POSTLINK%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_postlink_var."\" value=\"".$cfg_postlink."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_postlink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_linkdiv
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_LINKDIV%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_linkdiv_var."\" value=\"".$cfg_linkdiv."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_linkdiv
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_pre_str
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_PRE_STR%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_pre_str_var."\" value=\"".$cfg_pre_str."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_pre_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_post_str
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_POST_STR%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_post_str_var."\" value=\"".$cfg_post_str."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_post_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_check_parequal
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_check_parequal%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"checkbox\" name=\"".$cfg_check_parequal_var."\" value=\"0\"";
if ( $cfg_check_parequal == 1 )
{
	echo " checked=checked";
}

echo ">";
echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_check_parequal
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_link
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_css_link%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_link_var."\" value=\"".$cfg_css_link."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_css_link
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_linkhl
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_css_linkhl%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_linkhl_var."\" value=\"".$cfg_css_linkhl."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_css_linkhl
// *********************************************************************************************************

echo "</table>";
SN_NavBox - OUTPUT

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



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


if ($catStart != "") {
  $sTmpStr = "";

        // 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
	
                        
	$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
    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
	
    }  // 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 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

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

?>
Demnächst werde ich wohl ein NavModul freigebem, das an dieses angelehnt ist, aber nicht auf Kategorien sondern auf die Artikel einer Kategorie ausgelegt sein ( -> Artikel Navigations Modul )

So, viel spaß beim Testen und Einsetzen des Moduls.

Hinweis: Verwendung auf eigene Gefahr ! Vor dem Verwenden am besten Sicherungen von euerer DB und Modulen anlegen.

Mfg

Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

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

Beitrag von SkyBlader » Di 21. Sep 2004, 01:10

Guten Morgen liebe Community ( im wahrsten Sinne des Wortes *g* 2 Uhr ;) )

ich habe so eben eine neue Version meines Navigations Modules fertiggestellt.

SN_NavMod v0.4 alpha ist fertig

Hier eine grobe auflistung der Neuerungen:

- 5 Einstellungsmöglichkeiten für die Steuerung der Linkerstellung im Frontend
* Begin
* Vor Link
* Nach Link
* Trennzeichen
* Ende

Im Prinzip ist das Modul vom Grund her eine Horizintale Navigationsleiste, aber durch verwendung vom Html-Tag <BR> im Trennzeichen-Feld kann daraus auch eine Vertikale Leiste werden.

- Ja/Nein Box ob eine Überprüfung auf Highlighting des aktuellen Punktes durchgeführt werden soll oder nicht. Dabei wird auch der Wunsch eines Community members berücksichtigt, falls die aktuelle IDCAT ein Kind ( Child ) im CatTree zur angegebenen Anzeige Kategorie ist.

Desweiteren können nun im BackEnd zwei CSS-Klassen eingestellt werden, die für die Linkgenerierung mitverwendet werden. LinkCSS wird immer für den normalen Link verwendet, Wenn CheckForHighlight aktiviert, dementsprechend die LinkHLCSS für den Hervorgehobenen Link.

Die BackCat Angabe ist immer noch enthalten, so wie in den vorangegangenen Modulversionen auch.

Angemerkt sei nur, das ich auf Grund von Zeitproblemen für die CheckChild FUnktionalität keine umfangreichende Tests durchführen konnte. Hoffe es funktioniert wie angedacht, zumindestens läßt sich das Modul ohne Probleme in meinem 4.5 Snapshot installation einwandfrei einfügen.

Hier nun der Code der aktuellen Version:

SN_NavMod - DESCRIPTION

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL
*
* Modulname    :	SN_NavMod
* Modulversion :	0.4 alpha 
* Author       :	Stefan Bürk
* Kontakt      :	Email: webmaster@skyblader.org
* Copyright    :	SkyBlader Networxx, Stefan Bürk
* C-Version    :	4.4
* Created      :	09-03-2004
* Modified     :	21-09-2004
*
* Beschreibung :
*
* Navigationsstruktur für Untermenüs mit 1 Navigationsebene,
* Ausgabe ist im Output Modul über Variabeln steuerbar.
* 
************************************************/

21.09.2004
==========

OUT	Implementierung von zwei Funktionen, um für den Highlight Teil die
	Überprüfung, ob ein Entry hervorgehoben werden darf, auch bei Kinder
	ebene innerhalb des Kategoriebaumes sicherzustellen.

	Desweiteren wurde die im Inputteil als Konfigurierbar bereitgestellten
	Variabeln für die CSS-Klassenauswahl für Link und LinkHervorgehoben
	in der Routine nun berücksichtig.

IN	Auswahlschalter für HighlightingsÜberprüfung unter Berücksichtigung 
	von CHILD-Ids implementiert => cfg_check_parequal

IN	Konfiguration zur Konfigurierung für die CSS-Klasse für NavLink und 
	NavLink Hervorgehoben (Aktuelle Category)




20.09.2004
==========

IN	Implementierung von weiteren Konfigurationsmöglichkeiten für

	- VorLink
	- NachLink
	- LinkTrennzeichen
	- Anfang
	- Ende

	bei einem Aufbau der Linksammlungen für das dynamische Menü im
	folgenden Format:

	ANFANG + [ VorLink + {LINK} + NachLink ] + LinkTrennzeichen + [ VorLink + {LINK} + NachLink ] ..... + Ende

OUT	Anpassen der Ausgabeerstellungsroutingen, um die neue Konfigurierbarkeit in den
	Routinen zu berücksichtigen.



17.09.2004
==========

OUT	Erweiterung um weitere Konfigurationsvariablen für die Ausgabensteuerung,
	um eine weitere modularisierung zu bewerkstelligen.

	Dazu wurden unter anderem auch drei kleine Bugs entfernt, die vorher nicht
	aufgefallen sind, und erst durch die modularisierung zum tragen kamen.

30.06.2004
==========


out	Manuelle sortierung der CatIds auf Grund der PREID, da dies durch
	eine SQL Anweisung nicht zu bewerkstelligen ist.
	
	--> siehe http://www.contenido.de/forum/viewtopic.php?t=4576
	
in	Font und Select auf BackEnd CSS Klassen vom umgestellt.


19.03.2004
==========

out	DB-Abfrage 2 ( $sql ) lesbar für Otto-Normal-Verbraucher formatiert

17.03.2004
==========

out	Securitychecks implementiert um Injections zu unterbinden
	-	lokale Modul-Variablen initalizieren um Injects zu unterbinden
	-	Parametervariabeln gegen SQL-Injection-Versuche untersuchen
SN_NavMod - INPUT

Code: Alles auswählen

/***********************************************
* INPUT
************************************************/

// selected category
$selected 		= "CMS_VALUE[3200]";
$selected_var		= "CMS_VAR[3200]";

$selected2		= "CMS_VALUE[3201]";
$selected2_var		= "CMS_VAR[3201]";

// cfg_prelink
$cfg_prelink		= "CMS_VALUE[3202]";
$cfg_prelink_var	= "CMS_VAR[3202]";
if ( $cfg_prelink == "" || $cfg_prelink == "0" )
{ 
	$cfg_prelink = "::&nbsp;";
}

$cfg_postlink		= "CMS_VALUE[3203]";
$cfg_postlink_var	= "CMS_VAR[3203]";

$cfg_linkdiv		= "CMS_VALUE[3204]";
$cfg_linkdiv_var	= "CMS_VAR[3204]";
if ( $cfg_linkdiv == "" || $cfg_linkdiv == "0" )
{ 
	$cfg_linkdiv = "<br>";
}

$cfg_pre_str		= "CMS_VALUE[3205]";
$cfg_pre_str_var	= "CMS_VAR[3205]";

$cfg_post_str		= "CMS_VALUE[3206]";
$cfg_post_str_var	= "CMS_VAR[3206]";

$cfg_check_parequal	= "CMS_VALUE[3207]";
$cfg_check_parequal_var = "CMS_VAR[3207]";

$cfg_css_link		= "CMS_VALUE[3208]";
$cfg_css_link_var	= "CMS_VAR[3208]";
if ( $cfg_css_link == "" || $cfg_css_link == "0" )
{ 
	$cfg_css_link = "navlink";
}

$cfg_css_linkhl		= "CMS_VALUE[3209]";
$cfg_css_linkhl_var	= "CMS_VAR[3209]";
if ( $cfg_css_linkhl == "" || $cfg_css_linkhl == "0" )
{ 
	$cfg_css_linkhl = "navlink_highlighted";
}

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie wählen, deren Unterkategorien<br> angezeigt werden sollen:</td>
          <td class=\"text_medium\">
            <select class=\"text_medium\" name=\"".$selected_var."\">";
            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>
        <tr valign=\"top\">        
          <td class=\"text_medium\">Zurückkategorie wählen:</td>
          <td class=\"text_medium\">
	
            <select class=\"text_medium\" name=\"".$selected2_var."\">";
            if($selected2!="0" && $selected2!=""){
             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 ($selected2 == $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>";

// *********************************************************************************************************
// *** cfg_prelink
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_PRELINK%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_prelink_var."\" value=\"".$cfg_prelink."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_prelink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_postlink
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_POSTLINK%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_postlink_var."\" value=\"".$cfg_postlink."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_postlink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_linkdiv
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_LINKDIV%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_linkdiv_var."\" value=\"".$cfg_linkdiv."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_linkdiv
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_pre_str
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_PRE_STR%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_pre_str_var."\" value=\"".$cfg_pre_str."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_pre_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_post_str
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%CFG_POST_STR%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" name=\"".$cfg_post_str_var."\" value=\"".$cfg_post_str."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_post_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_check_parequal
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_check_parequal%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"checkbox\" name=\"".$cfg_check_parequal_var."\" value=\"0\"";
if ( $cfg_check_parequal == 1 )
{
	echo " checked=checked";
}

echo ">";
echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_check_parequal
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_link
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_css_link%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_link_var."\" value=\"".$cfg_css_link."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_css_link
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_linkhl
// *********************************************************************************************************
echo "  <tr valign=\"top\">        
          <td class=\"text_medium\">%cfg_css_linkhl%:</td>
          <td class=\"text_medium\">";

echo "      <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_linkhl_var."\" value=\"".$cfg_css_linkhl."\">";

echo "    </td>
        </tr>";
// *********************************************************************************************************
// *** end cfg_css_linkhl
// *********************************************************************************************************

echo "</table>";
SN_NavBox - OUTPUT

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



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


if ($catStart != "") {
  $sTmpStr = "";

        // 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
	
                        
	$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
    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
	
    }  // 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 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

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

?>
Demnächst werde ich wohl ein NavModul freigebem, das an dieses angelehnt ist, aber nicht auf Kategorien sondern auf die Artikel einer Kategorie ausgelegt sein ( -> Artikel Navigations Modul )

So, viel spaß beim Testen und Einsetzen des Moduls.

Hinweis: Verwendung auf eigene Gefahr ! Vor dem Verwenden am besten Sicherungen von euerer DB und Modulen anlegen.

Mfg

Stefan
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Gesperrt