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


Ignore:
Timestamp:
Sep 20, 2012, 12:18:45 AM (7 years ago)
Author:
sven
Message:

Zwei grosse Bugfixes die einige Backendänderungen nach sich zogen:

  • Impressum: Google Maps-Karte lädt wieder. Dafür wurde endlich ein seitenspezifisches Scriptsystem geschrieben, welches im RessourceLoader verankert Scriptfiles direkt einbindet. Das ermöglicht besseres Debugging, bessere Ladezeit und eine Symmetrie zu seitenspezifischen CSS. Insbesondere aber (bislang eher dreckige) Hooks, mit denen externe Scripts eingebunden werden können, was per pagescripts.js nicht geht. pagescripts.js gibts für kleine Scripte immernoch, könnte man dann ggf. auflösen.
  • Relationale Rücklinks für Geräteseiten: Geräteseiten haben nun wie ehemals einen Rücklink auf die verweisende Seite. Dieser wird anhand ihrer Einordnung in der Navigation erlangt. Bei Seiten, die nicht klar einzuordnen waren, könnte dieses Vorgehen ggf. Fehler erzeugen. Das müsste man dann im Einzelfall überprüfen.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/menu.php

    r299 r301  
    55 *
    66 **/
     7
     8require_once dirname(__FILE__).'/messages.php';
     9 
    710class t29Menu {
    811        public $conf;
    912        public $xml;
    1013
     14        // Bevor es eine ordentliche Dev-Moeglichkeit gibt: Der magische
     15        // Schalter zum Ausblenden der Geraeteseiten im Menue
     16        const hide_geraete_seiten = true;
     17
    1118        // jeweils relativ zum lang_path
    1219        const navigation_file = 'navigation.xml';
     
    1926        function __construct($conf_array) {
    2027                $this->conf = $conf_array;
     28               
     29                // create a message object if not given
     30                if(!isset($this->conf['msg']))
     31                        $this->conf['msg'] = new t29Messages($this->conf['lang']);
    2132               
    2233                // libxml: don't raise errors while parsing.
     
    201212                }
    202213                $seiten_id = $this->conf['seiten_id'];
    203 
     214                $_ = $this->conf['msg']->get_shorthand_returner();
     215               
    204216                // find wanted menu
    205217                $xml = $this->xml->xpath($xpath_menu_selection);
     
    216228                        $current_li = $current_a[0]->xpath("parent::li");
    217229                        self::dom_add_class($current_li[0], 'current');
    218                         self::dom_prepend_attribute($current_a, 'title', 'Aktuelle Seite', ': ');
     230                        self::dom_prepend_attribute($current_a, 'title', $_('nav-hierarchy-current'), ': ');
    219231
    220232                        $actives = $current_li[0]->xpath("ancestor-or-self::li");
     
    222234                       
    223235                        $ancestors = $current_li[0]->xpath("ancestor::li");
    224                         array_walk($ancestors, function($i) {
    225                                 t29Menu::dom_prepend_attribute($i->xpath("./a[1]"), 'title', 'Übergeordnete Kategorie der aktuellen Seite' , ': ');
    226                         });
     236                        foreach($ancestors as $i)
     237                                t29Menu::dom_prepend_attribute($i->xpath("./a[1]"), 'title', $_('nav-hierarchy-ancestor'), ': ');
    227238                }
    228239
     
    237248
    238249                // Geraete-Seiten entfernen
    239                 $geraete_uls = $xml->xpath("//ul[contains(@class, 'geraete')]");
    240                 foreach($geraete_uls as $ul) {
    241                         $uld = dom_import_simplexml($ul);
    242                         $uld->parentNode->removeChild($uld);
    243                 }
    244        
     250                if(self::hide_geraete_seiten) {
     251                        $geraete_uls = $xml->xpath("//ul[contains(@class, 'geraete')]");
     252                        foreach($geraete_uls as $ul) {
     253                                $uld = dom_import_simplexml($ul);
     254                                $uld->parentNode->removeChild($uld);
     255                        }
     256                }
    245257       
    246258                if($xpath_menu_selection == self::horizontal_menu) {
     
    283295                        // wenn aktuelle seite eine geraeteseite ist
    284296                        if(in_array('geraete', $this->get_link_ul_classes($seiten_id))) {
    285                                 //$return['next'] = null; // kein Link nach vorne
    286                                 //$return['prev'] = null; // TODO: Da muss der richtige Link auf die Seite, die auf diese Extraseite verweist.
     297                                //  pfad:                        a ->li->ul.geraete->li->li/a
     298                                $geraetelink = $current_a[0]->xpath("../../../a");
     299                                if(count($geraetelink))
     300                                        $return['prev'] = $geraetelink[0];
     301                                $return['next'] = null; // kein Link nach vorne
    287302                        } else {
    288303                                foreach(array(
     
    304319                        $return['start'] = t29Menu::dom_new_link('#', 'bla');
    305320                }
     321               
     322                // Linkliste aufarbeiten: Nullen rausschmeissen (nur deko) und
     323                // Links *klonen*, denn sie werden durch print_menu sonst veraendert
     324                // ("Übergeordnete Kategorie der aktuellen Seite" steht dann drin)
     325                // und wir wollen sie unveraendert haben.
     326                foreach($return as $key => $node) {
     327                        if(!$node) {
     328                                unset($return[$key]);
     329                                continue;
     330                        }
     331                        $dn = dom_import_simplexml($node);
     332                        $dnc = simplexml_import_dom($dn->cloneNode(true));
     333                        $return[$key] = $dnc;
     334                }
     335               
    306336                return $return;
    307337        }
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