Frage zum Hauptnavigationsmodul (gelöst)

Gesperrt
henning83
Beiträge: 41
Registriert: Mo 5. Sep 2005, 11:51
Kontaktdaten:

Frage zum Hauptnavigationsmodul (gelöst)

Beitrag von henning83 »

Hallo!

Ich verwende für meine Seite das Standardmodul als Hauptnavigation.
Allerdings ist dieses ja dermaßen konzipiert, dass man die oberste Ebene eines Baumes auswählt.
Mit geht es jetzt darum, dies so abzuändern, dass man nicht die nullte Ebene auswählt, sondern die 1.

Bsp:
Hauptnavigation
__Unterpunkt1
____Unterunterpunkt1

Ich möchte also nicht "Hauptnavigation" als Auswahl sondern "Unterpunkt1".

Den Input konnte ich inzwischen selbst anpassen, denke ich...
dort habe ich in der SQL - Abfrage anstatt A.level = '0'
einfach A.level = '1'... und siehe da es geht...

Im Output habe ich 2 mal eine
parent_id != 0 auf
parent_id != 1 gesetzt.

Soweit geht es nun schon... mein Problem äußert sich nun in einem Anzeigeproblem...
Die Demoseite zeigt es in etwa so an:
OffenerPunkt v(soll den Pfeil nach unten darstellen ;) )
__markierterUnterpunkt >

Ich habe jedoch die Ausgabe so:
OffenerPunkt >
__markierterUnterpunkt >

Hoffe, das veranschaulicht mein Problem bildlich genug :)
Wo im In- oder Output habe ich nun eine Änderung übersehen?

Vielen Dank schonmal

Gruß
Zuletzt geändert von henning83 am Sa 1. Apr 2006, 19:01, insgesamt 1-mal geändert.
henning83
Beiträge: 41
Registriert: Mo 5. Sep 2005, 11:51
Kontaktdaten:

Beitrag von henning83 »

Hm...
viele tage sind vergangen und mein problem besteht nach wie vor...
kann ich irgendwas tun, um die chancen zu erhöhen, daran etwas zu ändern?
habe ich mich missverständlich ausgedrückt?
gibt es zu diesem thema schon eine antwort?
(ich habe die suchfunktion schon stark malträtiert... aber ohne ergebnis...
wäre also über einen link sehr froh)
oder seh ich den wald vor lauter bäumen nicht? :)

gruß
henning83
Beiträge: 41
Registriert: Mo 5. Sep 2005, 11:51
Kontaktdaten:

Beitrag von henning83 »

Hallo!

nunja... irgendwie artet dieser thread in einen langen monolog aus...
aber ich konnte mein problem nun tatsächlich selbst lösen...
in meiner problembeschreibung vergaß ich einen wichtigen fakt...
ich verwende das standardhauptnavigationsmodul...
allerdings das der version 4.4.5 (dies vergaß ich zu erwähnen :oops: )

nach einem vergleich dieses moduls mit dem der aktuellen version
konnte ich nun endlich herausfinden warum er immer das falsche template verwendete...
in der version 4.4.5 differenzierte er noch nicht zwischen angeklickter und offener kategorie...

für alle die ebenfalls das problem plagte, dass sie keinen ganzen baum ausgeben wollen sondern nur alles unter einem punkt der 1. ebene hier der modifizierte code:

Input:

Code: Alles auswählen

/** 
 * Navigation 
 * 
 * INPUT 
 * 
 * @autor Jan Lengowski <Jan.Lengowski@4fb.de> 
 * @copyright four for business AG 2003 
 */ 

?> 
<table cellspacing="0" cellpadding="0" cellpadding="0"> 
    <tr> 
        <td class="text_medium" style="padding: 10px;" bgcolor=#FFECBF>Baum waehlen:</td> 
        <td style="padding: 10px;" width="200"> 
            <select name="CMS_VAR[0]"> 
            <option value="0">-- kein --</option> 
            <?php 

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

                $db->query($sql); 

                while ( $db->next_record() ) { 

                    if ( "CMS_VALUE[0]" == $db->f("idcat") ) { 
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>'; 

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

                    } 
                } 

            ?> 
            </select> 
        </td> 
    </tr> 
</table> 

<?php
Output:

Code: Alles auswählen

<?php 

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

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

/** 
 * Check if a category is child 
 * of another category 
 * 
 * @return boolean true/false 
 * @author Jan Lengowski <Jan.Lengowski@4fb.de> 
 * @copyright four for business AG 2003 
 */ 
if (!function_exists("catIsChildOf")) 
{ 
    function catIsChildOf($id, $idparent) { 
    
        global $cfg, $client, $lang; 
    
        $db = new DB_Contenido; 
    
        $parent = $id; 
    
        while ( $parent != 1 ) { 
    
            $sql = "SELECT 
                        a.parentid 
                    FROM 
                        ".$cfg["tab"]["cat"]." AS a, 
                        ".$cfg["tab"]["cat_lang"]." AS b 
                    WHERE 
                        a.idclient  = '".$client."' AND 
                        b.idlang    = '".$lang."' AND 
                        a.idcat     = b.idcat AND 
                        a.idcat   = '".$parent."'"; 
    
            $db->query($sql); 
            $db->next_record(); 
    
            $parent = $db->f("parentid"); 
    
            if ($parent == $idparent) { 
                return true; 
            } 
    
        } 
    
        return false; 
    
    } 
} 

if ( catIsChildOf($idcat, "CMS_VALUE[0]") ) { 
    $sel_idcat = $idcat; 
} else { 
    $sel_idcat = "CMS_VALUE[0]"; 
} 

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

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


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

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

        global $navitems, $client, $lang, $cfg; 

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

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

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

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

        if ( $parentid == 1 ) { 

           if ( $idcat != "CMS_VALUE[0]" ){ 

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

                      $db->query($sql); 

                      while ($db->next_record()) { 

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

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

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

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

           } 
            
           return true; 
        } 

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

        $db->query($sql); 

        while ($db->next_record()) { 

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

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

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

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

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

}  // end function 

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

$db->query($sql); 

while ( $db->next_record() ) { 

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

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

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

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

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

/* Start Output buffer */ 
ob_start(); 

echo '<table cellspacing="0" cellpadding="0" border="0">'; 

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

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

    if ($idcat == $data['idcat']) { 
        $tpl->generate('templates/navfirst_on.html'); 
    }
    elseif (is_array($data['sub'])) {
        $tpl->generate('templates/navfirst_open.html');
    } 
    else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 

        foreach ($data['sub'] as $key => $data) { 

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

            if ($idcat == $data['idcat']) { 
                $tpl->generate('templates/navsecond_on.html'); 
            }
            elseif (is_array($data['sub'])) {
                $tpl->generate('templates/navsecond_open.html');
            }
            else { 
                $tpl->generate('templates/navsecond_off.html'); 
            } 

            if (is_array($data['sub'])) { 

                foreach ($data['sub'] as $key => $data) { 

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

                    if ($idcat == $data['idcat']) { 
                        $tpl->generate('templates/navthird_on.html'); 
                    } else { 
                        $tpl->generate('templates/navthird_off.html'); 
                    } 

                } // end foreach 

            } // end if 

        } // end foreach 

    } // end if 

} // end foreach 

echo '</table>'; 

/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

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

?>
ich hoffe ich trete niemandem zu nahe wenn ich einfach beispielmodule anpasse...

wie dem auch sei...
dieses navimodul (vertikal) braucht keine madanteneinstellungen...
und verwendet die standardtemplates... cms/templates/
wer diesen ordner nicht verwendet muss die pfade anpassen :)

viel spass und gruß
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Bitte beachten: Dieses Modul ist nicht 100% kompatibel mit Contenido V4.6.x: Es berücksichtigt weder start_compatible = false (d.h. es funktioniert höchstens mit aus V4.4.x umgestellten Installationen) noch geschützte Kategorien (Frontend-Nutzer).

Zur Monolog-Äußerung: Du hast Dir ein recht spezielles Problem selbst geschaffen ... i.A. wird nur jemand antworten (können), wenn er das gleiche Problem selbst mal hatte oder Interesse besteht, sich in fremden Code zu fummeln. Die Warscheinlichkeit eines solchen Zufalls ist doch eher bescheiden... :wink:

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

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
henning83
Beiträge: 41
Registriert: Mo 5. Sep 2005, 11:51
Kontaktdaten:

Beitrag von henning83 »

hmja...
es war ein recht spezielles problem... :)
aber gerade die startschwierigkeiten mit dem neuen modul aus der 4.6er reihe haben mich dazu bewogen mich auf altbekanntes zu verlassen :)
wenn also jemand weder die startkompatibilität noch geschützte kategorien braucht, dann ist es vllt. interessant...
ich habe bei diesem projekt keinen nutzerlogin...
und das modul fungiert auch eher als teil einer geteilten navigation...
das mitgelieferte hilfnavigationsmodul hab ich missbraucht um die andere
hälfte zu liefern :)

aber so gesehen stimme ich den eher bescheidenen chancen eines solchen zufalls zu ;)

gruß
Gesperrt