DHTML-Navi auf Adobe Spry Basis

helgaK
Beiträge: 18
Registriert: Mo 16. Feb 2009, 22:58
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von helgaK » Di 12. Jul 2011, 12:12

Seelauer hat geschrieben:Hallo Helga,
meines Erachtens hat es Ortwin so vorgeschlagen:
Suche in Deinem Modul den Anfang der Function

function nav_feld($cat, $Level)
{
global $client, $lang, $cfg, $idcat;
...

und füge vor dem Functions-Beginn folgenden Befehl ein

if (!function_exists("nav_feld"))
{

function nav_feld($cat, $Level)
{
global $client, $lang, $cfg, $idcat;
...

und füge am Ende der Function ein

}

Diese Ergänzung bei jeder Function mit Namen "nav_feld" bzw. bei Dir in die beiden Module, evtl. auch bei function liste($array, $indent = " ")
{
Hallo Seelauer,
nach eingier Pause geht es nun weiter mit dem Projekt. Inzwischen werden beide Navis angezeigt. die erste funktioniert wie auch gewünscht, aber die zweite Navigation erhält nicht die im Modul angegebene id und somit auch nicht die class. also bei der Listenausgabe scheint es noch einen Fehler zu geben. du hast geschrieben, dass ich if (!function_exists("nav_feld")) { auch bei der function liste einfügen sollte. da musste ich doch dann if (!function_exists("liste")) { schreiben oder? dieser Versuch brachte jedenfalls keinerlei Wirkung.

ich poste mal beide Module:

1. Navigation horizontal mit einer anderen id bzw. class für ul

Code: Alles auswählen

    <?php
    /***********************************************
    * CONTENIDO MODUL - OUTPUT
    *
    * Modulname   :     DHTML Navi auf Spry1.6.1.-Basis
    * Author(s)   :     Ralf Fleischer
    * WWW-Adress  :     http://www.xtended-cooperation.de
    * Mail        :     info@xtended-cooperation.de
    * Created     :     12-05-2008
    * Modified    :     21-05-2008, Ralf Fleischer
    * Modified    :     15-11-2009, Axel Womatschka: FrontEndUser-Berechtigungen werden berücksichtigt
    * ************************************************/

    // include Contenido_FrontendNavigation class
    cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
    cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php');
    cInclude('classes', 'class.frontend.permissions.php');
    cInclude('classes', 'class.frontend.groups.php');
    cInclude('classes', 'class.frontend.users.php');

    $hauptkategorie = getEffectiveSetting('navigation', 'idcat-jquery', 1);
    $MaxLevel = getEffectiveSetting('navigation', 'idcat-jquery-maxlevel', 10);

    //$hauptkategorie = "CMS_VALUE[0]";

    $navitems = array();
if (!function_exists("nav_feld"))
{ 
    function nav_feld ($cat,$Level) {
    global $user, $client, $lang, $cfg, $idcat, $auth;
    $FrontendPermissionCollection = new FrontendPermissionCollection;

            if (!is_object($db)) {
                $db = new DB_Contenido;
            }
            $sql = "SELECT
                         A.idcat,
                         A.level,
                         B.parentid,
                         C.name,
                         C.public,
                         C.idcatlang
                       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
                         A.level     <=  $Level  AND             
                         B.parentid  = '$cat'
                      ORDER BY
                         A.idtree";

             $db->query($sql);
             while ( $db->next_record() ) {
               
                $aktiv = "";
                $cat_id = $db->f("idcat");
                $cat_idlang = $db->f("idcatlang");
                $visible=false;
               
                if($db->f("public")!=0){
                    $visible = true;
                    }elseif(($auth->auth['uid']!='')&&($auth->auth['uid']!='nobody')){
                    $FrontendGroupMemberCollection = new FrontendGroupMemberCollection;
                    $FrontendGroupMemberCollection->setWhere("idfrontenduser",$auth->auth['uid']);
                    $FrontendGroupMemberCollection->query();
                    $groups = array();
                    while ($member = $FrontendGroupMemberCollection->next()){
                        $groups[] = $member->get("idfrontendgroup");
                        }   
                    }
                if(count($groups)>0){
                    for($i=0;$i<count($groups);$i++){
                        if($FrontendPermissionCollection->checkPerm($groups[$i],'category','access',$cat_idlang, true)){
                        $visible=true;
                        }
                    }
                }
                if($visible){
                    $sub_feld = nav_feld($db->f("idcat"),$Level);
                    if ($db->f("idcat") == $idcat) $aktiv = "active";
                    elseif ($sub_feld["activepath"]) $aktiv = "activepath";
                    $nav_feld[] = array("idcat"      => $db->f("idcat"),
                                    "name"       => $db->f("name"),
                                    "active"     => $aktiv,
                                    "sub"        => $sub_feld);
                    if ($aktiv != "") $activepath = $aktiv;
                }
             }
             
             $rv = array("feld"          => $nav_feld,
                         "activepath"    => $activepath);
             return $rv;
    } // end function
  
 function liste ($array, $indent = "  ")
    {
    global $first,$Level,$LevelMax;

           if (is_array($array["feld"])) {
             if ($first) {
               echo $indent . "<ul class=\"menu\">\n";
               $first = 0;
             }
             else echo $indent . "<ul class=\"menu\">\n";
             foreach ($array["feld"] as $menupunkt) {
               if ($menupunkt["active"] == "active") echo $indent . $indent . "<li class=\"active\">\n";
               elseif ($menupunkt["active"] == "activepath") echo $indent . $indent . "<li class=\"activepath\">\n";
               else echo $indent . $indent . "<li class=\"passiv\">\n";
               if (is_array($menupunkt["sub"]["feld"])) {
                 echo $indent . $indent . $indent . "<a class=\"parent\" href=\"front_content.php?idcat=" . $menupunkt["idcat"]. "\"><span>" . $menupunkt["name"] . "</span></a>\n";
                 liste($menupunkt["sub"], $indent."    ");
               }
               else echo $indent . $indent . $indent . "<a href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\"><span>" . $menupunkt["name"] . "</span></a>\n";
               echo $indent . $indent . "</li>\n";
             }
             echo $indent . "</ul>\n";
           }
    } // end function

} // end if

    /* Create Navigation Array */
    $navitems = nav_feld($hauptkategorie,$MaxLevel); 
    $first = 1;
    liste($navitems);
    ?>
2. Navigation vertikal mit ursprünglicher ul id und class:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     DHTML Navi auf Spry1.6.1.-Basis
* Author(s)   :     Ralf Fleischer
* WWW-Adress  :     http://www.xtended-cooperation.de
* Mail        :     info@xtended-cooperation.de
* Created     :     12-05-2008
* Modified    :     21-05-2008, Ralf Fleischer
* ************************************************/

// include Contenido_FrontendNavigation class
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php');


$hauptkategorie = getEffectiveSetting('navigation', 'idcat-dhtml', 116);
$MaxLevel = getEffectiveSetting('navigation', 'idcat-dhtml-maxlevel', 10);

//$hauptkategorie = "CMS_VALUE[0]";

$navitems = array();
if (!function_exists("nav_feld"))
{ 
    function nav_feld ($cat,$Level) {
    global $client, $lang, $cfg, $idcat;

        if (!is_object($db)) {
            $db = new DB_Contenido;
        }
        $sql = "SELECT
                     A.idcat,
                     A.level,
                     B.parentid,
                     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
                     A.level     <=  $Level  AND             
                     B.parentid  = '$cat'
                  ORDER BY
                     A.idtree";

         $db->query($sql);
         while ( $db->next_record() ) {
            
            $aktiv = "";
            $sub_feld = nav_feld($db->f("idcat"),$Level);
            if ($db->f("idcat") == $idcat) $aktiv = "active";
            elseif ($sub_feld["activepath"]) $aktiv = "activepath";
            $nav_feld[] = array("idcat"      => $db->f("idcat"),
                                "name"       => $db->f("name"),
                                "active"     => $aktiv,
                                "sub"        => $sub_feld);
            if ($aktiv != "") $activepath = $aktiv;
         }
         $rv = array("feld"          => $nav_feld,
                     "activepath"    => $activepath);
         return $rv;
    } // end function


    function liste ($array, $indent = "  ") 
    {
     global $first,$Level,$LevelMax;

       if (is_array($array["feld"])) {
         if ($first) {
           echo $indent . "<ul id=\"MenuBar1\" class=\"MenuBarVertical\">\n";
           $first = 0;
         }
         else echo $indent . "<ul>\n";
         foreach ($array["feld"] as $menupunkt) {
           if ($menupunkt["active"] == "active") echo $indent . $indent . "<li class=\"active\">\n";
           elseif ($menupunkt["active"] == "activepath") echo $indent . $indent . "<li class=\"activepath\">\n";
           else echo $indent . $indent . "<li class=\"passiv\">\n";
           if (is_array($menupunkt["sub"]["feld"])) {
             echo $indent . $indent . $indent . "<a class=\"MenuBarItemSubmenu\" href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
             liste($menupunkt["sub"], $indent."    ");
           }
           else echo $indent . $indent . $indent . "<a href=\"front_content.php?idcat=" . $menupunkt["idcat"] . "\">" . $menupunkt["name"] . "</a>\n";
           echo $indent . $indent . "</li>\n";
         }
         echo $indent . "</ul>\n";
       }
    } // end function

} // end if

/* Create Navigation Array */
$navitems = nav_feld($hauptkategorie,$MaxLevel);  
$first = 116;
liste($navitems);
?>
Wäre toll, wenn du mir noch mal einen Tipp geben könntest. Vielen Dank und Grüße
Helga

helgaK
Beiträge: 18
Registriert: Mo 16. Feb 2009, 22:58
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von helgaK » Mi 27. Jul 2011, 21:55

inzwischen konnte ich einen PHP Experten bemühen und die Lösung war offensichtlich recht einfach (für ihn :wink: )
in Funktion "liste" im 2. Modul hatte ich die geänderte class + style Angaben implementiert. Die class wurde aber nicht aufgerufen, weil sie genauso heißt wie die entspr. Funktion im 1. Modul, und das Neu-Definieren einer Funktion nicht möglich ist.
Lösung: Funktion und Funktionsaufruf umbenannt. (...2)
hier die code-schnipsel

Code: Alles auswählen

if (!function_exists("nav_feld2"))
{ 
    function nav_feld2 ($cat,$Level) {
    global $client, $lang, $cfg, $idcat;
und etwas weiter unten

Code: Alles auswählen

function liste2 ($array, $indent = "  ") 
Vielleicht kann es mal jemand gebrauchen.
Helga

Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von Andreas » Do 4. Aug 2011, 12:19

Hallo zusammen,

das Modul ist wirklich klasse.
Bei einem neuen Projekt habe ich allerdings ein kleines Problem:
Bei der horizontalen Navigation soll zwar beim Überfahren der Hauptpunkte die Unternavigation aufklappen (und anklickbar sein), der jeweilige Hauptpunkt soll jedoch NICHT anklickbar sein.
Ist das zu realisieren? Irgendwie stehe ich da gerade auf dem Schlauch...
Gruß
Andreas

barni
Beiträge: 127
Registriert: Fr 28. Okt 2005, 20:54
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von barni » Sa 19. Nov 2011, 18:45

Ein Super Modul, das ich gerne verwende.

Jetzt aber eine Frage:
Es gibt eine neuere Spry Version, die auch mit Iphone und Ipad umgehen kann. Das kann die aktuelle Navi nicht, weil das mouseover am Ipad nicht geht.

habe da was gefunden: http://forums.adobe.com/thread/613494

Ich hab jetzt 2h rumgebastelt und es versucht, aber ich kriegs nicht hin.
Aber vielleicht bin ich ja nicht der einzige, der so ein Problem hat.

Hat jemand schonmal die Navi fit für das IOS gemacht?
Würd mich über Feedback freuen.

Danke und schöne Grüße
Sebastian
ich bin genauso hilflos wie ich tu ;)

MakD42
Beiträge: 103
Registriert: Sa 8. Nov 2003, 19:01
Wohnort: Marburg
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von MakD42 » Mo 23. Jan 2012, 13:06

Ein SUPER Modul. Danke auch von mir.

Ich habe die Erweiterungen eingebaut für die geschützten Seiten sowie die aktive Seite. Geht vielleicht auch noch, dass die Unterpunkte nach unten heraus-sliden? Geht das mit dem Modul überhaut? Hat das jemand schon eingebaut?

Freue mich auf viele Tipps

LG Matthias
MakD 42
______________________
Contenido 4.6.8 & 4.8.15
MySQL 5.1.54
Linux/Apache
Meine Contenidoprojekte: art & weise | StadtMedia | aidea

20082009
Beiträge: 116
Registriert: So 5. Okt 2008, 09:58
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von 20082009 » Mi 18. Jul 2012, 10:21

Hallo,
wie realiesiere ich, dass der gewählte Menüpunkt aktiv bleibt, nachdem die Seite aufgerufen wird?? So sieht der Besucher besser, wo er sich befindet. Nein, ich möchte kein Breadcrumb. ;-) Es wird auf Javascript herauslaufen, oder?

Das Menue soll in der Funktion sein wie: http://www.mercedes-benz-consult-graz.at/

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von Spider IT » Mi 18. Jul 2012, 12:28

Hallo,

ich kenne das Modul zwar nicht, aber sowas realisiert man mit CSS-Klassen (z.B. "normal" und "active"), welche man dann im Stylesheet unterschiedlich formatiert.

Gruß
René

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von yodatortenboxer » Mi 18. Jul 2012, 12:29

Hallo,
wie realiesiere ich, dass der gewählte Menüpunkt aktiv bleibt,
über CSS.

Einfach im Quelltext nach der hinterlegten CSS-Klasse schauen und diese dann so wie gewollt formatieren.
Die passiven Listen haben zum Beispiel alle die Klasse passiv:

Code: Alles auswählen

<li class="passiv">

Der Navigationspunt der angeklickt wurde bekommt dann die Klasse activepath:

Code: Alles auswählen

<li class="activepath">
Dementsprechend muss nun das CSS angepasst werden.

Für die Navigation Links müsste man ein anderes Navi-Modul anpassen, das dementsprechend nur ab der 2ten Ebene die Navigationspuntke angezeigt werden.

Schönen Gruß von Usedom
Ralf
Schöne Grüße von Usedom
Ralf

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Re: DHTML-Navi auf Adobe Spry Basis

Beitrag von yodatortenboxer » Mo 23. Jul 2012, 10:25

Hallo,

nur zur Info,

von meiner Seite her wird es keine neue/angepasste Version dieses Modules geben.

Aktuell arbeite ich mit folgenden Modul:
http://forum.contenido.org/viewtopic.php?f=60&t=32155

Schöne Grüße von Usedom
Ralf
Schöne Grüße von Usedom
Ralf

Gesperrt