php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.05.2005, 13:09  
Neuer Benutzer
 
Registriert seit: 14.02.2005
Beiträge: 20
Carrear
Standard Dyn. Menue mit Sub-Submenue

hi leutz,

man hat eine dynmenue2.php in der das Menü ist:

PHP-Code:
<?
/*
die Variable $siteRoot muss angepasst werden, wenn die dateien in einem Unterverzeichnis abgelegt werden. Wenn das Unterverzeichnis z.B. "DIR" heißt, dann muss $siteRoot="/DIR/"; sein
*/

$siteRoot="/";
$menuStruct=array(
"Home"=>array("root"=>$siteRoot."index.php"),
"Über uns"=>array("root"=>$siteRoot."ueberuns.php""Firma"=>$siteRoot."firma.php""Beteiligungen"=>$siteRoot."beteiligungen.php"),
"Allgemein"=>array("root"=>$siteRoot."allgemein.php""Irgendwas"=>$siteRoot."irgendwas.php""Noch mehr"=>$siteRoot."nochmehr.php")
);


if(
$PHP_SELF == $menuStruct[0]['root']){
  foreach(
$menuStruct as $key=>$value){
    if(
$PHP_SELF == $value['root']){
       echo 
"<div class=\"fstLevelActive\">[url=".$value['root']."]$key[/url]</div>\n";
    }
    else{
       echo 
"<div class=\"fstLevel\">[url=".$value['root']."]$key[/url]</div>\n";
    }
  }
} else {
  foreach(
$menuStruct as $key=>$value){
    if(
$PHP_SELF == $value['root']){
       echo 
"<div class=\"fstLevelActive\">[url=".$value['root']."]$key[/url]</div>\n";
    }else{
       echo 
"<div class=\"fstLevel\">[url=".$value['root']."]$key[/url]</div>\n";
    }
    foreach(
$value as $key2=>$value2){
      if(
array_search($PHP_SELF,$value)){
        if(
$key2 != "root")
           if(
$PHP_SELF == $value2){
              echo 
"<div class=\"secLevelActive\">[url=".$value2."]$key2[/url]</div>\n";
           }else{
              echo 
"<div class=\"secLevel\">[url=".$value2."]$key2[/url]</div>\n";
           }
      }
    }
  }
}
?>
Wie man sieht sind ziehmlich weit oben die Menüpunkte un links angegeben. Mein Problem ist, dass dieses Menü nur für ein Submenue angelegt ist. Was muss ich machen, wenn ich im Submenue noch ein Submenue haben möchte?

Ciao Carrear
Carrear ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.05.2005, 13:26  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

eine rekursive funktion schreiben

also in der Art:
PHP-Code:
<?php
function menue(parent "NULL") {
//alle Menüeinträge und Submenüs in einer whileschleife auslesen.
$sql "SELECT type, id, name FROM menues WHERE Parent = ".$parent.";";
$result mysql_query($sql);
while(
$row mysql_fetch_assoc($result)) {
//Wenn Subfolder:
if($row["type"] == "folder") {
echo 
"Folder: ".$row["Name"];
 
menue($row["id"]); // Menü laden 
} else // Menüeintrag
echo "Eintrag: ".$row["name"];
}
}
menue();
?>
das ganze ist jetzt net irgendwie gestylt oder so sondern gibt nur die Einträge aus.
Außerdem hab ichs jetzt net ein dein Zeug angepasst, aber wenn du Fortgeschrittener bist, sollte das dir reichen.

uups ich sehe gerade, dass du garnet mit mysql geabreitet hast, aber das ist nicht so schlimm, das lässt sich auch umschreiben, der Grundaufbau is der gleiche
Buhmann ist offline  
Alt 28.05.2005, 16:50  
Neuer Benutzer
 
Registriert seit: 14.02.2005
Beiträge: 20
Carrear
Standard

nene, man kann es sich aber auch umständlich machen -___- *tztztztz* warum so schwierig. Ich habs jetzt wie folgt gemacht. Mit jedem Link wird nicht nur ?site=sowieso sondern ?site=sowieso&cat=1 cat=kategorie und 1 ist ein index. Anhand dieses Indexes wird dann das Menü erstellt. Und ich brauchte nicht einen Satz MySql.
Carrear ist offline  
Alt 29.05.2005, 04:48  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

spassig, wenn ich cat=5 mitgebe und es das gar nich gibt...
__________________
Was ist validität?
fantast ist offline  
Alt 30.05.2005, 19:50  
Gast
 
Beiträge: n/a
Standard

mom ich hab da mal nen tut für dich
das ist so nen menü wie du es haben willst
musste selber sowas mal schreiben


das sollte dir weiterhelfen auch vom verständniss her:


Wir benötigen zuerst ein Tabelle in der Datenbank:
Code:
Code:
CREATE TABLE `menue_navi_kat` ( 
  `Id` int(11) NOT NULL auto_increment, 
  `Name` varchar(25) NOT NULL default '', 
  `parent_id` varchar(25) NOT NULL default '', 
  `level` varchar(25) NOT NULL default '', 
  `link_artikel` varchar(25) NOT NULL default 'link', 
  `artikel_id` varchar(25) NOT NULL default '', 
  `target` varchar(25) NOT NULL default '_self', 
  PRIMARY KEY  (`Id`) 
) TYPE=MyISAM AUTO_INCREMENT=62 ;
unter parent_id wir immer die ID des übergeordneten Links gespeichert, also quasi die vater_id.
beispiel:
wir haben folgendes menü:
Code:
Code:
Home(id=1) 
Fun(id=2) 
Games(id=3)
wenn wir nun auf Fun klicken
übergeben wir die id 2 mit.
nun wird geschaut wo überall die parent_id = 2 ist.
dann sieht es aufgeklappt so aus:
Code:
Code:
Zurück 
Bilder 
Videos
vom code her sieht das so aus beim Hauptmenü(oberste ebene):

PHP:
PHP-Code:
$sql "SELECT 
          * 
   FROM 
          menue_navi_kat 
        WHERE 
          parent_id = 1;"

$hauptmenuelinks mysql_query($sql) OR die(mysql_error()); 
echo 
"[url='index.php']Home[/url]"
echo 
"  "
while(
$row mysql_fetch_object($hauptmenuelinks)) 
   { 
                     if(
$row->link_artikel=='link'
                       { 
                       echo 
"[url='navi.php?show_kat=$row->Id&back=0']$row->Name[/url]"
                       echo 
"  "
                       } 
                     if(
$row->link_artikel=='artikel'
                       { 
                       echo 
"[url='main.php?show_kat=$row->Id']$row->Name[/url]"
                       echo 
"  "
                     } 
        } 
die navi.php also das menü links baut sich dann auf, deren code sieht so aus:
PHP:
PHP-Code:

      $sqlback 
"SELECT 
                  * 
      FROM 
                   menue_navi_kat 
                WHERE 
                   id ='"
.$show_kat."'"
        
$hauptmenuelinksback mysql_query($sqlback) OR die(mysql_error()); 
        
$rowback mysql_fetch_object($hauptmenuelinksback); 
   echo 
"[url='navi.php?show_kat=$rowback->parent_id'][b]Zurück[/b][/url]"

      
$sql "SELECT 
                  * 
      FROM 
                   menue_navi_kat 
                WHERE 
                   parent_id ='"
.$show_kat."' 
                   ORDER BY Name ASC 
                   "

   
$hauptmenuelinks mysql_query($sql) OR die(mysql_error()); 

   while(
$row mysql_fetch_object($hauptmenuelinks)) 
   { 
                     echo 
"<tr>"
                     echo 
"<td width=\"150\" align=\"center\">"
                     if(
$row->link_artikel=='link'
                     { 
                       echo 
"[url='navi.php?show_kat=$row->Id']target'>$row->Name[/url]"
                     } 
                     elseif(
$row->link_artikel=='artikel'
                     { 
                     echo 
"[url='main.php?action=artikel&showartikel=$row->artikel_id']$row->Name[/url]"
                     } 


        } 
hier finden 3unterschiedliche aktionen statt
1.Zurück link wird erstellt
2.untermenue wir erstellt
3.wird unterschieden ob der link eine ebene weiter runter geht oder ob er an einen artikel verweisst.

der zurück button funktionier so :durch die variable $shot_kat übergeben wir ja die ID des übergeordneten links.
nun fragen wir ab wo id = $shot_kat
dann speichern wir dessen parent_id in der var show_kat also quasi so:
PHP:
PHP-Code:
      $sqlback "SELECT 
                  * 
      FROM 
                   menue_navi_kat 
                WHERE 
                   id ='"
.$show_kat."'"
        
$hauptmenuelinksback mysql_query($sqlback) OR die(mysql_error()); 
        
$rowback mysql_fetch_object($hauptmenuelinksback); 
   echo 
"[url='navi.php?show_kat=$rowback->parent_id'][b]Zurück[/b][/url]"
2.das untermenü wird erstellt mit der unterscheidung ob der link ein weiteres untermenüaufbau oder zu einem artikel verweißt:
PHP:
PHP-Code:
$sql "SELECT 
                  * 
      FROM 
                   menue_navi_kat 
                WHERE 
                   parent_id ='"
.$show_kat."' 
                   ORDER BY Name ASC 
                   "

   
$hauptmenuelinks mysql_query($sql) OR die(mysql_error()); 

   while(
$row mysql_fetch_object($hauptmenuelinks)) 
   { 
                     echo 
"<tr>"
                     echo 
"<td width=\"150\" align=\"center\">"
                     if(
$row->link_artikel=='link'
                     { 
                       echo 
"[url='navi.php?show_kat=$row->Id']target'>$row->Name[/url]"
                     } 
                     elseif(
$row->link_artikel=='artikel'
                     { 
                     echo 
"[url='main.php?action=artikel&showartikel=$row->artikel_id']$row->Name[/url]"
                     } 


        } 
durch die übergebene variable show_kat findet auch diesmal die selektierung in der datenbank statt.
nur fragen wir nicht diesmal wo Id= shot_kat sondernwo parent_id = shot_kat.
PHP:
PHP-Code:
$sql "SELECT 
                  * 
      FROM 
                   menue_navi_kat 
                WHERE 
                   parent_id ='"
.$show_kat."' 
                   ORDER BY Name ASC 
                   "

und lesen diese alphabetisch aus.
in dem feld link_artikel in der datenbank steht etweder link oder artikel.
nun findet ein vergleich statt ob der link auf einen artikel verweist oder auf ein weiteres untermenü:
PHP:
PHP-Code:
   $hauptmenuelinks mysql_query($sql) OR die(mysql_error()); 

   while(
$row mysql_fetch_object($hauptmenuelinks)) 
   { 
                     echo 
"<tr>"
                     echo 
"<td width=\"150\" align=\"center\">"
                     if(
$row->link_artikel=='link'
                     { 
                       echo 
"[url='navi.php?show_kat=$row->Id']target'>$row->Name[/url]"
                     } 
                     elseif(
$row->link_artikel=='artikel'
                     { 
                     echo 
"[url='main.php?action=artikel&showartikel=$row->artikel_id']$row->Name[/url]"
                     } 


        } 
 
Alt 01.06.2005, 08:16  
Neuer Benutzer
 
Registriert seit: 14.02.2005
Beiträge: 20
Carrear
Standard

Wie gesagt ich habe das ganze jetzt ohne Database gemacht, indem ich einfach mit jedem Link die Kategorie übergeben. Aber mein nächstes Problem ist, das er ja jedes mal Reloaden muss und wenn ich jetzt ziemlich weit unten auf der Seite einen Link klicke bei dem ein Untermenü erscheint, dann steht man wieder am Anfang der Seite (also ganz oben meine ich) und das ist echt total nervig. Wie könnte man das wegbekommen? JS ?
Carrear ist offline  
Alt 01.06.2005, 08:26  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Zitat von Carrear
Wie gesagt ich habe das ganze jetzt ohne Database gemacht, indem ich einfach mit jedem Link die Kategorie übergeben. Aber mein nächstes Problem ist, das er ja jedes mal Reloaden muss und wenn ich jetzt ziemlich weit unten auf der Seite einen Link klicke bei dem ein Untermenü erscheint, dann steht man wieder am Anfang der Seite (also ganz oben meine ich) und das ist echt total nervig. Wie könnte man das wegbekommen? JS ?
ohne JS gehts wohl nicht, einzige andere möglichkeit in einem dokument zu einer position zu springen ist mit ankern, die sind aber nicht dynamisch, so dass man sie auf einen wert setzen kann der abhängig ist vom punkt wohin gescrollt wurde.



ausserdem pass mit $PHP_SELF auf, das steht nur bei register_globals=on zur verfügung :P

mfg
robo47
robo47 ist offline  
Alt 01.06.2005, 10:22  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines/einer Fortgeschrittenen.

moved to PHP - Anfänger


register_globals
Aus Sicherheitsgründen sollte register_globals auf OFF stehen.
Überprüfen kannst du das in einer Datei folgenden Inhalts:
PHP-Code:
<?php
  phpinfo
();
?>
Dort nach register_globals suchen.

Wenn dein hoster es dir gestattet, dann kannst du das für den Fall, dass es bei dir auf ON stehen sollte versuchen in der .htaccess zu ändern:
Code:
php_flag register_globals Off
Warum das alles?
http://www.php-faq.de/search.php?q=register_global
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Menue -> dynamisch machen... JahX PHP Tipps 2008 9 30.06.2008 00:33
CatClose realisieren? (Kategorie +/-) Pain-maker PHP Tipps 2006 1 12.01.2006 17:43
kleines admin menue PHP Tipps 2007 25 29.12.2005 01:39
menue - 2 dimensionale arrays dsmcg PHP Tipps 2005-2 2 20.10.2005 09:27
Zweispaltiges Menue mit <div>-Containern HTML, Usability und Barrierefreiheit 1 26.03.2005 15:50
Dynamisches Menue PHP Tipps 2005 1 07.03.2005 10:31
Brauche hilfe bei meinem Menue HTML, Usability und Barrierefreiheit 4 19.02.2005 21:09
DYNAMISCHES MENUE MIT PHP und MySQL PROFIS GEFRAGT PHP-Fortgeschrittene 2 08.10.2004 09:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dynmenue, menu and submenu php, http://www.php.de/php-tipps-2005/23793-dyn-menue-mit-sub-submenue.html, dynamische menü untermenü php sql, dynmenue keine untermenues, php mysql submenue array, php menüe und submeü sql, php menue unter menue, html sub-submenue, dynmenue2.php, php row menu, dynamisches menü php parent modell 4 ebenen tutorial, php menü untermenü array, dyn sub, dynamisches menü mit submenu, abhängige select menüs aus mysql, dynamisches menue auf gleiche seiten verweisen, tut subsub menü, php submenu while, was ist siteroot

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.