Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung PHP

GELÖST

Vom MD Array zum Menu

Mitglied: pcguy

pcguy (Level 1) - Jetzt verbinden

14.02.2015 um 13:29 Uhr, 942 Aufrufe, 7 Kommentare

Hallo zusammen, ich versuche aus einem MD Array ein Menu zu generieren.

01.
  
02.
 $menu[] = array ( '<i class="fa fa-star "></i> Favoriten', 'favoriten', 1 ); 
03.
    $submenu['favoriten'] [5] = array ( 'Seite 1', 'registrations_view', 1 ); 
04.
    $submenu['favoriten'][10] = array ( 'Seite 2', 'registrations_edit', 1 ); 
05.
  
06.
    $menu[] = array ( '<i class="fa fa-paint-brush"></i> Deko', 'deko', 3 ); 
07.
    $submenu['deko'] [5] = array ( 'Termine', 'meetings', 3 ); 
08.
    $submenu['deko'][10] = array ( 'Neuen Termin erstellen', 'meetings_add', 3 ); 
09.
    $submenu['deko'][15] = array ( 'Benutzer', 'users', 3 ); 
10.
    $submenu['deko'][20] = array ( 'Neuen Benutzer erstellen', 'users_add', 3 ); 
11.
    $submenu['deko'][25] = array ( 'Klassen verwalten', 'classes', 3 ); 
12.
    $submenu['deko'][30] = array ( 'F&auml;cher verwalten', 'subjects', 3 ); 
13.
  
14.
    $menu[] = array ( '<i class="fa fa-paw "></i> Tiere', 'tiere', 1 ); 
15.
    $submenu['tiere'] [5] = array ( 'Allgemein', 'div', 3 ); 
16.
    $submenu['tiere'][10] = array ( 'Hunde', 'dog', 3 ); 
17.
    $submenu['tiere'][15] = array ( 'Katzen', 'cat', 1 );

Dazu habe ich folgende Ausgabe:

01.
  
02.
 function in_array_recursive($needle, &$haystack, $case_sensitive=true) 
03.
04.
    if( !$case_sensitive
05.
      $needle = strtolower($needle); 
06.
  
07.
    foreach($haystack as $v
08.
09.
        if( !is_array($v) ) 
10.
11.
          if( !$case_sensitive
12.
            $v = strtolower($v); 
13.
  
14.
          if( $needle == $v
15.
            return true; 
16.
17.
        else 
18.
19.
          if( in_array_recursive($needle, $v, $case_sensitive) === true ) 
20.
            return true; 
21.
22.
23.
    return false; 
24.
25.
   
26.
   
27.
   
28.
    
29.
    foreach ( $menu as $key => $values
30.
31.
        $class = ''; 
32.
        if( $page == $values[1] ) 
33.
34.
          $class .= ' active'; 
35.
36.
        else 
37.
38.
          if( !isset ( $submenu[$values[1]] ) ) 
39.
            $class .= ' no-submenu'; 
40.
          elseif( in_array_recursive($page,$submenu[$values[1]],true) ) 
41.
            $class .= ' active'; 
42.
43.
  
44.
        print '<li><a href="index.php?page='. $values[1] .'" class="nav-top-item' . $class . '">' . $values[0] . '</a>'; 
45.
		 
46.
47.
		

Ich kriege immer den Fehler und es erscheind keine Subnavi:
Notice: Undefined variable: page in /home/httpd/vhosts/werbix.ch/httpdocs/content/navitest.php on line 66
Notice: Undefined variable: page in /home/httpd/vhosts/werbix.ch/httpdocs/content/navitest.php on line 74

Dies entspricht dem Inhalt:
=> (if( $page == $values[1] ))
=> elseif( in_array_recursive($page,$submenu[$values[1]],true) )


Leider habe ich keine Ahnung was das Problem ist, kann mir bitte jemand weiterhelfen?

lg
Mitglied: Arano
14.02.2015 um 13:58 Uhr
Hi.

Na PHP kennt die Variable $page nicht !
Wann wird diese den definiert ?

Wenn ich das richtig sehe, sollte $page eines Schlüsselwörter (favoriten/deko/tiere) enthalten, je nach dem wleche seite man gerade geöffnet hat... WENN man überhaupt eine Seite geöffnet hat.
Irgendwo sollte es als eine Anweisung geben die dem folgendem Sinn entspricht:
01.
$page = 'favoriten'; 
02.
// oder 
03.
$page = extract_key_from_url_function();
Edit:
Ich sehe gerade die URL deiner Links "index.php?page='. $values[1] .'"
Verwendest du die Variable $page etwa direkt aus der URL ? (register_globals = On)


~Arano
Bitte warten ..
Mitglied: pcguy
14.02.2015 um 16:09 Uhr
Hallo Arano, besten Dank, mit $page = 'favoriten'; funktioniert es.

Allerdings werden die Submenus nicht angezeigt.
Die Idee währe das alle Hauptlinks als eigenes Panel (http://holdirbootstrap.de/komponenten/#panels) angezeigt werden und beim Klick das Panel sich öffnet und die Subnavs anzeigt.
Bitte warten ..
Mitglied: Arano
14.02.2015 um 17:18 Uhr
Hallo.

$page = 'favoriten'; hast du doch nicht fest in das Script geschrieben oder !?
Denn das muss ja dynamisch sein falls eine andere Kategorie geöffnet ist (deko/tiere),

Nein, die Untermenüs werden nicht angezeigt. Es gibt ja auch keine Script das dafür verantworlich wäre... diesen Part muss du wohl noch integrieren.
zZ. gibt es ja nur
foreach ( $menu as $key => $values )
Und diese Schleife durchläuft nur $menu also die Hauptmenüs.

Dieser Teil ist die Stelle an der du ansetzen must:
01.
          if( !isset ( $submenu[$values[1]] ) )  
02.
            $class .= ' no-submenu';  
03.
          elseif( in_array_recursive($page,$submenu[$values[1]],true) )  
04.
            $class .= ' active'; 
Die erste Hälfte bestimmt einen CSS-Klassennamen für dan Fall das es KEINE Untermenüs gibt, die andere Hälfte WENN es Untermenüs gibt. Aber wie gesagt, die Untermenüs werden nirgends weiter behandelt. Die zweite Hälfte muss also um die Ausgabe der entsprechenden Untermenüs ergänzt werden.


~Arano
Bitte warten ..
Mitglied: pcguy
17.02.2015 um 07:27 Uhr
Ich bleibe bei der Ausgabe des Submenus hängen, muss ich ein weiteres "foreach" einbauen?


01.
  
02.
 foreach ( $menu as $key => $values ) 
03.
04.
        $class = ''; 
05.
        if( $page == $values[1] ) 
06.
07.
          $class .= ' active'; 
08.
09.
        else 
10.
11.
          if( !isset ( $submenu[$values[1]] ) ) 
12.
            $class .= ' no-submenu'; 
13.
          elseif( in_array_recursive($page,$submenu[$values[1]],true) ) 
14.
            $class .= ' active'; 
15.
16.
  
17.
       // print '<li><a href="index.php?page='. $values[1] .'" class="nav-top-item' . $class . '">' . $values[0] . '</a>'; 
18.
	    
19.
	   print ' 
20.
	    
21.
	   <div class="panel-group archiv" id="accordion" role="tablist" aria-multiselectable="true"> 
22.
         
23.
          <div class="panel panel-default"> 
24.
            <div class="panel-heading" role="tab" id="'. $values[1] .'"> 
25.
              <h4 class="panel-title"> 
26.
                <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse'. $values[1] .'" aria-expanded="false" aria-controls"collapse1"=""> 
27.
                   '.$values[0].' 
28.
                </a> 
29.
              </h4> 
30.
            </div> 
31.
            <div style="height: 0px;" aria-expanded="false" id="collapse'. $values[1] .'" class="panel-collapse collapse" role="tabpanel" aria-labelledby="'. $values[1] .'"> 
32.
              <div class="panel-body"> 
33.
                    <ul> 
34.
                   		       
35.
						  <a href='.$values[2].'> <li> '.$values[0].'</li> </a>  
36.
			 
37.
                  </ul>  
38.
              </div> 
39.
            </div> 
40.
         </div> 
41.
		  
42.
		 '; 
43.
		 
44.
45.
 
46.
 
47.
 
Bitte warten ..
Mitglied: Arano
17.02.2015 um 19:38 Uhr
Hallo.

Sorry sorry sorry, da habe ich mit vertan !
Das if-else das ich im letztem Post erwähnte ist NICHT die stelle wo du ansetzen sollst, das war quatsch.
Aber es sieht so aus, als wäre die das auch schon aufgefallen.

Ja du benötigst noch eine zweite Schleifen !
Mit der ersten gehst du durch das Hauptmenü ($menü), dem erstem Array, und gibst
  1. den Hauptlink aus und
  2. mit der zweiten Schleife die einzelnen Untermenüs ($submenu) aus dem zweitem Array.
Den ersten Teil hast du ja schon.
In die Zeile 35 wo momentan noch ein Link steht muss die zweite Schleife hin.
Vielleicht so:
01.
    // wenn untermenüs zum hauptmenü vorhanden sind 
02.
    if( isset($submenu[$values[1]]) ) 
03.
04.
        // durchlaufe submenü array und... 
05.
        foreach( $submenu[$values[1]] as $subKey => $subValues
06.
07.
            // ...gebe links in listenform aus 
08.
            echo '<li> 
09.
                    <a href='.$subValues[2].'>'.$subValues[0].'</a> 
10.
                  </li>'; 
11.
12.
13.
    // wenn keine untermenüs vorhanden sind, mach nix 
14.
    //else { }
Habe das jetzt einfach so getippt, kann Fehler enthalten und muss generell nicht passen


~Arano
Bitte warten ..
Mitglied: Arano
24.02.2015 um 22:02 Uhr
Nabend...

*knock* *knock* wie schauts aus ?
Bitte warten ..
Mitglied: pcguy
26.02.2015 um 08:17 Uhr
Bitte entschuldige mein spätes Feedback.
Danke, es hat bestens geklappt!!

Unten noch der Code falls jemand dasselbe Problem hat ....

01.
 
02.
  print'   <div class="panel-group archiv" id="accordion" role="tablist" aria-multiselectable="true" >'; 
03.
    
04.
    
05.
    foreach ( $menu as $key => $values ) 
06.
07.
        $class = ''; 
08.
        if( $page == $values[1] ) 
09.
10.
          $class .= ' active'; 
11.
12.
        else 
13.
14.
          if( !isset ( $submenu[$values[1]] ) ) 
15.
            $class .= ' no-submenu'; 
16.
          elseif( in_array_recursive($page,$submenu[$values[1]],true) ) 
17.
            $class .= ' active'; 
18.
19.
  
20.
	   print ' 
21.
          <div class="panel panel-default"> 
22.
            <div class="panel-heading" role="tab" id="'. $values[1] .'"> 
23.
              <h4 class="panel-title"> 
24.
                <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse'. $values[1] .'" aria-expanded="false" aria-controls"collapse1"=""> 
25.
                   '.$values[0].' 
26.
                </a> 
27.
              </h4> 
28.
            </div> 
29.
            <div style="height: 0px;" aria-expanded="false" id="collapse'. $values[1] .'" class="panel-collapse collapse" role="tabpanel" aria-labelledby="'. $values[1] .'"> 
30.
              <div class="panel-body"> 
31.
                 <ul> ';      
32.
					// wenn untermenüs zum hauptmenü vorhanden sind 
33.
					if( isset($submenu[$values[1]]) ) 
34.
35.
						// durchlaufe submenü array und... 
36.
						foreach( $submenu[$values[1]] as $subKey => $subValues ) 
37.
38.
							// ...gebe links in listenform aus 
39.
							echo '<li> 
40.
									<a href=index.php?page=archiv&content=4&cat='.$subValues[2].'> <i class="fa fa-caret-right"></i>&nbsp;   
41.
 '.$subValues[0].'</a> 
42.
								  </li>'; 
43.
44.
45.
					// keine untermenüs vorhanden  
46.
					//else { }	  	  	   
47.
                print ' </ul>  
48.
              </div> 
49.
            </div> 
50.
         </div>	 '; 
51.
		 
52.
53.
	print '</div> ';  
54.
?> 
55.
     
56.
 
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Leere Array-Werte aus einem Array entfernen
gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

JavaScript
Javascript Array
gelöst Frage von internet2107JavaScript2 Kommentare

Ich habe folgendes Problem. Ersetze ich die folgenden Zahlen gegen Variablenwerte, bekomme ich nicht das Ergebnis, wie mit festen ...

Batch & Shell
Array oder Object oder wie soll ich das machen
gelöst Frage von Druide83Batch & Shell4 Kommentare

Hallo, mal wieder verzweifelt. Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken. ...

CSS
CSS: Menü ein- und ausblenden
gelöst Frage von honeybeeCSS6 Kommentare

Hallo, ich erstelle gerade ein Navigationsmenü mit CSS. Leider kann ich das Untermenü nicht ein- und ausblenden. Habe ich ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen7 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...