Changeset 926 in t29-www for lib/menu.php


Ignore:
Timestamp:
Mar 24, 2016, 1:43:35 AM (8 years ago)
Author:
sven
Message:

Erweiterte Nutzung der Seitenrelationen, wie in Version 880 vorbereitet, ausgebaut. Es gibt jetzt die Möglichkeit, im Menü zu fordern, dass es eine Seitenrelation zur vorher- und/oder nachfolgenden Seite gibt. Das wird im Deutschen in zwei Fällen genutzt:

Einmal bei der Zweierguppe "Lernprojekte" und "Entwicklungsprojekte" und dann nochmal bei der Zweiergruppe "Lehrerinfo" und "Robotikkurse".

Dadurch entstehen zwei abgetrennte "Relationsinseln". Das durchsteigt man aber nur, wenn man die Homepage wirklich auswendig kennt. Für alle anderen Benutzer ist es durch diese Sonderfälle nicht mehr klar erkennbar, wann es mal einen "Weiter"/"Zurück"-Link gibt und wann nicht. Aber das reiht sich in eine Reihe von Inkonsistenzen ein, zB. der Tatsache, dass man die Lehrerinfo und den Robotik-Workshop nochmal gedoppelt am Ende des virtuellen Rundgangs (Seitennavigation) vorfindet. Das ist der Tatsache geschuldet, dass Heribert das horizontale Menü nicht mag.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/menu.php

    r880 r926  
    229229                        $e[$attribute_name] = (self::dom_has_attribute($e, $attribute_name) ? ($e[$attribute_name].$seperator) : '') . $content;
    230230        }
     231
     232        public static function dom_attribute_contains($simplexml_element, $attribute_name, $needle) {
     233                if(isset($simplexml_element[$attribute_name])) {
     234                        return strpos((string)$simplexml_element[$attribute_name], $needle) !== false;
     235                } else
     236                        return false;
     237        }
    231238       
    232239        /**
     
    354361                $sidebar = $xml[0];
    355362               
     363                // nur Sidebar-Links kriegen eine Relation aufgeloest
    356364                $return = array();
    357                 $current_a = $sidebar->xpath("//a[@seiten_id='$seiten_id']");
    358                 if(count($current_a)) {
     365                $current_a = $sidebar->xpath(".//a[@seiten_id='$seiten_id']");
     366                $seiten_id_in_sidebar = count($current_a);
     367                // ggf. nochmal global suchen:
     368                $current_a = $seiten_id_in_sidebar ? $current_a[0] : $this->get_link($seiten_id);
     369                if($current_a) {
    359370                        // wenn aktuelle seite eine geraeteseite ist
    360371                        if(in_array('geraete', $this->get_link_ul_classes($seiten_id))) {
    361372                                //  pfad:                        a ->li->ul.geraete->li->li/a
    362                                 $geraetelink = $current_a[0]->xpath("../../../a");
     373                                $geraetelink = $current_a->xpath("../../../a");
    363374                                if(count($geraetelink))
    364375                                        $return['prev'] = $geraetelink[0];
    365376                                $return['next'] = null; // kein Link nach vorne
    366377                        } else {
    367                                 foreach(array(
    368                                   "prev" => "preceding::a[@seiten_id]",
    369                                   "next" => "following::a[@seiten_id]") as $rel => $xpath) {
    370                                         $nodes = $current_a[0]->xpath($xpath);
     378                                $searches = array();
     379                                if($seiten_id_in_sidebar || self::dom_attribute_contains($current_a, 'class', 'show-rel-prev'))
     380                                        $searches['prev'] = 'preceding::a[@seiten_id]';
     381                                if($seiten_id_in_sidebar || self::dom_attribute_contains($current_a, 'class', 'show-rel-next'))
     382                                        $searches['next'] = 'following::a[@seiten_id]';
     383
     384                                foreach($searches as $rel => $xpath) {
     385                                        $nodes = $current_a->xpath($xpath);
    371386                                        foreach($rel == "prev" ? array_reverse($nodes) : $nodes as $link) {
    372387                                                $is_geraete = count($link->xpath("ancestor::ul[contains(@class, 'geraete')]"));
     
    377392                                } // end for prev next
    378393                        } // end if geraete
    379                 } else {
    380                         // TODO PENDING: Der Fall tritt derzeit niemals ein, da das XML
    381                         // sich dann doch irgendwie auf alles bezieht ($sidebar = alles) und
    382                         // ueberall gesucht wird. Ist aber okay. oder?
    383                         $return['start'] = t29Menu::dom_new_link('#', 'bla');
    384                 }
     394                }
     395
     396                // Short circuit fuer Links ueberall:
     397                // Wenn der aktuelle Link ein "next" oder "prev"-Attribut besitzt, dann ueberschreibt
     398                // das alle bisherigen Ergebnisse.
     399                // Benutzung: <a seiten_id="a" href="a.html" next="b">foo</a>, <a seiten_id="b">bar</a>
     400                //
     401                // Funktioniert wahrscheinlich, aber nicht getestet/genutzt, da bislang nur "show-rel-{prev,next}"
     402                // genutzt wird (direkte Nachbarn)
     403                /*
     404                if(!$current_a)
     405                        // falls $current_a nicht in der sidebar ist, nochmal global suchen
     406                        $current_a = $this->get_link($seiten_id);
     407                $short_circuits = array('prev', 'next');
     408                foreach($short_circuits as $rel) {
     409                        if($current_a[$rel]) {
     410                                $target = $this->get_link((string) $current_a[$rel]);
     411                                if($target)
     412                                        $return[$rel] = $target;
     413                        }
     414                }
     415                */
    385416               
    386417                // Linkliste aufarbeiten: Nullen rausschmeissen (nur deko) und
     
    398429                }
    399430               
    400                 // Nov 2015: short circuit: Manuell "ueberladene" bzw. uebertragene Seitenrelationen
    401                 /**
    402                  * Benutzung: Auf Inhaltseite zb. $manuell_naechste_seite = array('href'=>'/de/sonstwas.php', 'label'=>'Computertechnik');
    403                  **/
    404                  /*
    405                 $manual_keys = array('next' => "manuell_naechste_seite", 'prev' => 'manuell_vorherige_seite');
    406                 foreach($manual_keys as $key => $confkey) {
    407                         if(isset($this->conf[$confkey])) {
    408                                 $retrun[$key] = self::dom_new_link($confkey['href'], $confkey['label']);
    409                         }
    410                 }
    411                 */
    412                 // Funktioniert allerding gerade nicht!
    413                
    414431                return $return;
    415432        }
Note: See TracChangeset for help on using the changeset viewer.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License