Programmplanung Editland-Menü

Silke Schümann wrote this 07:30:

Editland hat im Bereich Menüverwaltung ein denkbar einfaches und geniales Prinzip. Rückt man den Menüpunkt über die Menüverwaltung einmal ein, so wird der Menüpunkt der vorhergehenden Seite untergeordnet. Rückt man die Seite zwei Mal ein, wird diese versteckt, also aus dem Menü ausgeblendet.

Um ein Listenmenü zu schreiben, muss man nun also die Einrückungen durchzählen. Und die Veränderung beobachten um festzustellen, ob man nun eine Liste öffnen, eine Liste schließen oder einen Listenpunkt verstecken muss. Mir hilft beim Nachdenken, welche Informationen nun unerlässlich sind, um die Liste für das Menü korrekt aufzubauen, die Variationen plastisch darzustellen:

Menuevariationen in Editland

Dabei stellte sich schnell heraus, dass nicht alle Zählergebnisse und Summenspiele eineindeutig sind. Ich muss die einen oder anderen Informationen also mit führen. Es sollte genügen, mit zu führen wie viele Listen aktuell offen sind und ob die letzte Seite zufällig ein versteckter Listenpunkt ist. Dann ist es nur ein oder zwei Handvoll Bedingungen, die erfüllt sein wollen und mit Switch in einer Schleife abgearbeitet werden können. Das muss ich mir aber in ausgeschlafenen Zustand überlegen. Da mich das Problem nachträglich wieder aus dem Nest geholt hat, werde ich nun ein Nickerchen machen.

Es hilft diese kleine Darstellung im Programmcode als Kommentar zu haben um den Faden nachher schnell wieder aufzugreifen.

Nach dem Nickerchen, …

Ich hatte Zeit im Dämmer- und Lümmelzustand noch weiter darüber nachzudenken

  1. /* Menuvarianten:
  2. =====	  =====	    oo=== H    oo===      oo===
    =====	  o====	Uo  o==== Uo   oo===      oooo= H
    =====	  ooo==	H   =====      ===== Uc   o====	Uc
  3. =====	  =====	    oo===      ooo==      oo===	Uo
    o==== Uo  o====	Uo  o==== Uc   ooo==      oooo= H
    o====	  oo===	Uo  =====      ===== Uc   o====	Uc
  4. =====	  o====	    oo=== H    ooo== H    o====
    oo=== H	  =====	Uc  oo=== H    ooo== H    oooo= H
    =====	  =====	    =====      =====      oo===
  5. */
  6. $liHide = 'no';
  7. for($i=0; $i<=$arrayCount; $i++) {
  8. if(isset($nbspCount[$i-1]) && $nbspCount[$i-1]+2>=$nbspCount[$i]){
  9. $statusChange='yes';
  10. $liHide='yes';}
  11. $licount[$i]=$nbspCount[$i-1];
  12. }
  13. elseif($i==0 && $nbspCount[$i]<=2){
  14. $statusChange='yes';
  15. $liHide='yes';
  16. $licount[$i]=0;
  17. }
  18. elseif($liHide=='yes' && $nbspCount[$i-1]==$nbspCount[$i]){
  19. $statusChange='no';
  20. $liHide='yes';
  21. $licount[$i]=$liCount[$i-1];
  22. }
  23. elseif($liHide=='yes' && $nbspCount[$i-1]!=$nbspCount[$i]){
  24. $statusChange='yes';
  25. $liHide='no';
  26. $licount[$i]=$liCount[$i-1];
  27. }
  28. if(isset($nbspCount[$i-1]) && $liHide=='no'; && ...){...[ Listenpunkte schreiben ]...}

Damit sollte man alle Variationen erschlagen können. Im Test muss ich nun noch feststellen, ob ich ein ifelse() oder dann doch besser ein switch() mit break; einsetze. Zwischenrein bei der Überlegung dachte ich ein ifelse() macht mehr sinn, weil es auf einander aufbauen kann, andererseits, wenn man weiß, welcher Zustand gerade vorherrscht, kann man auch gleich anfangen den Listenpunkt zu schreiben also switch() und break;.

OK: switch() ist gemäß diesem Tutorial eine schnelle Variante eine Variable abzuprüfen. Damit bleibt es bei if() und ifelse(). hihihi :harr: ... ok elseif() ... aber immerhin im Skript hatte ich es noch richtig.

Nach gründlicher Überlegung und anderen Tätigkeiten u.a. noch einem Nickerchen (sind aktuell sehr produktiv :D ), stelle ich fest, dass es genügt, den nbsp-Count der aktuellen Ebene mitzuführen und den Status 'Hidden'/'Not-hidden' und entsprechend in Relation des aktuellen und letzten Status den Ebenen-nbsp-Count jeweils beizubehalten bzw. anzupassen. Gleich und Plus im Hidden-Status und der Hiddenstatus und der Ebenen-nbsp-Count bleibt gleich. Wird der Nbsp-Count kleiner steht dessen Egebnis in Relation zum aktuellen Ebenen-nbsp-Count und der Status hidden so wie der Ebenen Count wird in Bezug zum Ergebnis +1 bzw. <x auszuwerten. Eigentlich +2 aber es gibt eine Variable, die diesen Wert durch zwei geteilt hat und auf die ich mich hier beziehe, da ich mir so den den Heckmeck mit String-Auswertung schenken kann und auf vorhandene Skripts im System zurückgreifen kann. Zugegeben, einige Schlefen aus der code/mpfunktion.php könnte ich einsparen, würde ich die String-Auswertung hier voranstellen.

Wie baut man eine Navigation?

Welche Teile bisher existieren:

  1. 16.3.2007 — Programmplanung Editland-Menü
  2. 17.3.2007 — Der Linkbaum der Navigation in Editland
  3. 1.4.2007 — Was Kapitelnummern mit Array_slice() zu tun haben
  4. 4.4.2007 — Editland-Navigation mit doSimple Flyout verheiratet
  5. 8.4.2007 — PHP-Arger mit Array_slice

Leave a Reply