Changeset 255 in t29-www


Ignore:
Timestamp:
May 28, 2012, 2:55:06 PM (7 years ago)
Author:
sven
Message:

Backend: Class cleanup, multi language support builtin, Message system (with experimental JSON connection). Template is ready to be deployed for multi language.

Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • lib/menu.php

    r254 r255  
    44        public $conf;
    55
    6         public $horizontal_menu = 'hauptnavigation.xml';
    7         public $sidebar_menu = 'sidebar.xml';
    8         public $news_file = 'news.php';
     6        const horizontal_menu = 'hauptnavigation.xml';
     7        const sidebar_menu = 'sidebar.xml';
     8        const news_file = 'news.php';
    99
    1010        function __construct($conf_array) {
    1111                $this->conf = $conf_array;
    12                 $this->conf['lang_path'] = $this->conf['lib'].'/../'.$this->conf['lang'];
    1312        }
    1413       
    1514        function load_news_data() {
    16                 $newsfile = $this->conf['lang_path']."/".$this->news_file;
     15                $newsfile = $this->conf['webroot'].$this->conf['lang_path']."/".self::news_file;
    1716                $newsdir = dirname(realpath($newsfile));
    1817                // include path wird ignoriert wenn include relativ ist, was in der
     
    2019                // set_include_path( get_include_path(). PATH_SEPARATOR . dirname($newsfile));
    2120                $pwd = getcwd(); chdir($newsdir);
    22                 include($this->news_file);
     21                include(self::news_file);
    2322                chdir($pwd);
    2423                return $neues_menu;
     
    3635                                $li = "<li>Fehler in Formatierung!";
    3736                        } else {
    38                                 $url = ($e['link']{0} == '#' ? '/'.$this->conf['lang'].'/'.$this->news_file : '').$e['link'];
     37                                $url = ($e['link']{0} == '#' ? '/'.$this->conf['lang'].'/'.self::news_file : '').$e['link'];
    3938                                $li = "<li><a href='$url'><img src='$e[bild]' /> $e[titel]<span class='hidden'>: </span><em>$e[text]</em></a></li>";
    4039                        }
     
    5453        function print_menu($file) {
    5554                $seiten_id = $this->conf['seiten_id'];
    56                 $xml = simplexml_load_file($this->conf['lang_path'] . '/' . $file);
     55                $xml = simplexml_load_file($this->conf['webroot'].$this->conf['lang_path'] . '/' . $file);
    5756       
    5857                // aktuelle Seite anmarkern und Hierarchie hochgehen
     
    7574                }
    7675       
    77                 if($file == $this->horizontal_menu) {
     76                if($file == self::horizontal_menu) {
    7877                        # inject news
    7978                        $news_ul_content = $this->convert_news_data();
     
    8988                $seiten_id = $this->conf['seiten_id'];
    9089       
    91                 $sidebar = simplexml_load_file($this->conf['lang_path'] . '/' . $this->sidebar_menu);
     90                $sidebar = simplexml_load_file($this->conf['webroot'] . $this->conf['lang_path'] . '/' . self::sidebar_menu);
    9291                $current_a = $sidebar->xpath("//a[@seiten_id='$seiten_id']");
    9392                if(count($current_a)) {
  • lib/technikum29.php

    r254 r255  
    1111
    1212$lib = dirname(__FILE__);
    13 $lang = "de-v6";
    14 $root = "/"; # webroot
    15 $file = substr($_SERVER['SCRIPT_FILENAME'], strlen($_SERVER['DOCUMENT_ROOT']));
     13$webroot = realpath("$lib/../");  # file path to root of t29 web installation
     14$file = substr($_SERVER['SCRIPT_FILENAME'], strlen($_SERVER['DOCUMENT_ROOT'])); # e.g.: "/de/page.php"
    1615
     16$cache_dir = "$webroot/shared/cache";
     17$languages = array(
     18// shorthand => array(full name in page, path from webroot)
     19        "de" => array("Deutsch",  "/de-v6"),
     20        "en" => array("English", "/en-v6"),
     21);
     22
     23$lang = "de"; # must be index in $languages
     24$lang_path = $languages[$lang][1]; # shorthand, relative to webroot. use "$webroot$lang_path" for local.
     25
     26# Calling parameters
    1727$skip_cache = isset($_GET['skip_cache']);
    1828$purge_cache = isset($_GET['purge_cache']);
    19 
    20 $cache_dir = "$lib/../shared/cache";
    2129
    2230# lightweight caching system
     
    2634        "$lib/template.php",
    2735        "$lib/menu.php",
     36        "$lib/messages.php",
    2837        "$lib/../de-v6/hauptnavigation.xml",
    2938        "$lib/../de-v6/sidebar.xml",
  • lib/template.php

    r254 r255  
    1212 
    1313class t29Template {
    14         public $conf;
    15         public $menu;
     14        private static $legal_pagenames = array( // should be const
     15        # lang => file relative to $lang_path, with starting "/".
     16                "de" => "/impressum.php",
     17                "en" => "/contact.php",
     18        );
     19
     20        public $conf, $menu, $msg;
     21        public $body_classes = array();
     22        public $javascript_config = array();
    1623
    1724        function __construct($conf_array) {
    1825                $this->conf = $conf_array;
    19                
     26
     27                // fill up configuration
     28                $this->conf['legal_pagename'] = $this->conf['lang_path'] . self::$legal_pagenames[$this->conf['lang']];
     29
    2030                // create a menu:
    2131                require_once $this->conf['lib'].'/menu.php';
    2232                $this->menu = new t29Menu($this->conf);
     33
     34                // create localisation class:
     35                require_once $this->conf['lib'].'/messages.php';
     36                $this->msg = new t29Messages($this->conf['lang']);
     37
     38                // setup body classes:
     39                $this->body_classes[] = "lang-" . $this->conf['lang'];
     40                $this->body_classes[] = "page-" . $this->conf['seiten_id'];
     41               
     42                // setup javascript configuration
     43                $this->javascript_config['lang'] = $this->conf['lang'];
     44                $this->javascript_config['seiten_id'] = $this->conf['seiten_id'];
    2345        }
    2446       
     
    5779
    5880        function print_header() {
     81                $_ = $this->msg->get_shorthand_printer();
    5982?>
    6083<!doctype html>
    61 <html class="no-js" lang="de">
     84<html class="no-js" lang="<?php echo $this->conf['lang']; ?>">
    6285<head>
    6386  <meta charset="utf-8">
    64   <title><?php isset($this->conf['titel']) ? $this->conf['titel'].' - ' : ''; ?> technikum29</title>
     87  <title><?php isset($this->conf['titel']) ? $this->conf['titel'].' - ' : ''; $_('html-title'); ?></title>
    6588  <meta name="description" content="Produziert am 08.01.2012">
    6689  <meta name="author" content="Sven">
     
    7598</head>
    7699
    77 <body>
     100<body class="<?php echo implode(' ', $this->body_classes) ?>">
    78101<div id="footer-background-container"><!-- helper -->
    79102  <div id="container">
    80         <h1 role="banner"><a href="#/" title="Zur technikum29 Startseite">technikum29</a></h1>
     103        <h1 role="banner"><a href="/" title="<?php $_('head-h1-title'); ?>"><?php $_('head-h1'); ?></a></h1>
    81104        <div id="background-color-container"><!-- helper -->
    82105        <section class="main content" role="main" id="content">
     
    90113
    91114function print_footer() {
     115        $p = $this->msg->get_shorthand_printer();
     116        $_ = $this->msg->get_shorthand_returner();
    92117?>
    93118        <!-- end content -->
     
    95120        <hr>
    96121        <section class="sidebar">
    97                         <h2 class="visuallyhidden">Museumstour</h2>
     122                        <h2 class="visuallyhidden"><?php $p("sidebar-h2-tour"); ?></h2>
    98123                        <nav class="side">
    99                                 <?php $this->menu->print_menu($this->menu->sidebar_menu); ?>
    100                                 <span class="button collapse-menu">Menü ausklappen</span>
     124                                <?php $this->menu->print_menu(t29Menu::sidebar_menu); ?>
    101125                        </nav>
    102                         <!-- hier dann die Buttons, die dynamisch erzeugt werden, zum Aufklappen, etc. -->
    103                         <!-- die werden dann mit Javascript gemacht -->
    104                         <span class="button get-menu">Menü anzeigen</span>
     126                        <!-- menu changing buttons are made with javascript -->
    105127        </section>
    106128        </div><!-- div id="background-color-container" helper end -->
    107129        <hr>
    108130        <header class="banner">
    109                 <h2 class="visuallyhidden">Hauptnavigation</h2>
     131                <h2 class="visuallyhidden"><?php $p("sidebar-h2-mainnav"); ?></h2>
    110132                <nav class="horizontal">
    111                         <?php $this->menu->print_menu($this->menu->horizontal_menu); ?>
     133                        <?php $this->menu->print_menu(t29Menu::horizontal_menu); ?>
    112134                </nav>
    113135                <nav class="top">
    114                         <h3 class="visuallyhidden">Sprachauswahl</h3>
     136                        <h3 class="visuallyhidden"><?php $p("sidebar-h2-lang"); ?></h3>
    115137                        <ul>
    116                                 <li class="active"><a href="#">Deutsch</a>
    117                                 <li><a href="#">Englisch</a>
     138                                <?php
     139                                        foreach($this->conf['languages'] as $l => $sets) {
     140                                                printf("\t\t\t\t<li%s><a href='%s' title='%s'>%s</a></li>\n",
     141                                                        ($l == $this->conf['lang'] ? ' class="active"' : ''),
     142                                                        $sets[1].'#',
     143                                                        "View in $sets[0]",
     144                                                        $sets[0]
     145                                                );
     146                                       
     147                                        }
     148                                ?>
    118149                        </ul>
    119                         <form method="get" action="#">
    120                                 <span class="no-js">Suchen:</span>
    121                                 <input type="text" value="" data-defaultvalue="Suchen" name="q" class="text">
    122                                 <input type="submit" value="Suchen" class="button">
     150                        <form method="get" action="#"><?php printf('
     151                                <span class="no-js">%s:</span>
     152                                <input type="text" value="" data-defaultvalue="%s" name="q" class="text">
     153                                <input type="submit" value="%s" class="button">
     154                                ', $_('sidebar-search-label'), $_('sidebar-search-label'), $_('sidebar-search-label')); ?>
    123155                        </form>
    124156                </nav>
     
    140172                <div class="right">
    141173                        <img src="/shared/img-v6/logo.footer.png" title="technikum29 Logo" alt="Logo" class="logo">
    142                         &copy; 2003-2012 technikum29.
    143                         <br/><a href="/de-v6/impressum.php">Impressum und Kontakt</a>
     174                        <?php $p('footer-copyright-tag'); ?>
     175                        <br/><?php printf('<a href="%s">%s</a>', $this->conf['legal_pagename'], $_('footer-legal-link')); ?>
    144176                        <div class="icons">
    145                                 <a href="/de-v6/impressum.php#image-copyright"><img src="/shared/img-v6/cc-icon.png"></a>
     177                                <a href="<?php echo $this->conf['legal_pagename']; ?>#image-copyright"><img src="/shared/img-v6/cc-icon.png"></a>
    146178                                <!--<a href="http://ufopixel.de" title="Designed by Ufopixel"><img src="http://svenk.homeip.net/dropbox/Ufopixel/Ufopixel-Design/logo_90x30/ufopixel_logo_90x30_version2.png"></a>-->
    147179                        </div>
     
    164196  <script>window.jQuery || document.write('<script src="/shared/js-v6/libs/jquery-1.6.2.min.js"><\/script>')</script>
    165197
    166 
    167   <script defer src="/shared/js-v6/plugins.js"></script>
    168   <script defer src="/shared/js-v6/script.js"></script>
     198  <script src="/lib/messages.php?pre=t29MSGDATA%3D&post=<?php echo urlencode('$(function(){t29.msg.setup();});'); ?>"></script>
     199  <script>$(function(){t29.config = <?php print json_encode($this->javascript_config); ?>; });</script>
     200  <script src="/shared/js-v6/plugins.js"></script>
     201  <script src="/shared/js-v6/script.js"></script>
    169202</div><!-- end of div id="footer-background-container" helper -->
    170203</body>
  • shared/css-v6/style.css

    r252 r255  
    4848}
    4949
    50 
    51 
     50::-moz-selection{background:#07a;color:#fff;text-shadow:none}
     51::selection{background:#07a;color:#fff;text-shadow:none}
    5252
    5353
  • shared/js-v6/script.js

    r252 r255  
    11// Kleinigkeiten für t29v6
    2 var t29 = {};
     2window.t29 = {};
     3
     4t29.config = {};
     5t29.config.set = function(new_settings) {
     6        $.merge(t29.config, new_settings);
     7}
    38
    49t29.defaultvalue = {};
     
    3742        if(quick) collapse ? t29.menu.collapsed.lists.hide() : t29.menu.collapsed.lists.show();
    3843        else      collapse ? t29.menu.collapsed.lists.slideUp() : t29.menu.collapsed.lists.slideDown();
    39         t29.menu.collapsed.but.text(collapse ? "Menü ausklappen" : "Menü einklappen");
     44        t29.menu.collapsed.but.text(t29._(collapse ? "js-menu-collapse-out" : "js-menu-collapse-in"));
    4045        collapse ? $("html").addClass("collapsed-menu") : $("html").removeClass("collapsed-menu");
    4146}
     
    4348t29.menu.collapsed.is = function() { return $("html").hasClass("collapsed-menu"); };
    4449t29.menu.collapsed.setup = function() {
    45         t29.menu.collapsed.but = $("section.sidebar .button.collapse-menu");
     50        t29.menu.collapsed.but = $('<span class="button collapse-menu"></span>').appendTo("nav.side");
    4651        t29.menu.collapsed.lists = $("nav.side .u3").not("nav.side li.active > .u3"); // ein/auszuklappende Listen
    4752        t29.menu.collapsed.set(true, true); // initial state
     
    7883                        // die CSS-Klassen regeln eigentlich alles.
    7984                        t29.menu.collapsed.but.show();
    80                         t29.menu.scroll.but.text("Menü einblenden");
     85                        t29.menu.scroll.but.text(t29._("js-menu-scroll-show"));
    8186                        t29.menu.side.show();
    8287                        break;
     
    102107                        t29.menu.collapsed.set(true, true); // Sicherstellen, dass Navi eingeklappt.
    103108                        t29.menu.collapsed.but.hide(); // Ausgeklappte Navi passt auf keinen Bildschirm.
    104                         t29.menu.scroll.but.text("Menü ausblenden");
     109                        t29.menu.scroll.but.text(t29._("js-menu-scroll-hide"));
    105110                        break;
    106111                case t29.menu.scroll.States.STICK_BOTTOM:
     
    114119
    115120t29.menu.scroll.setup = function() {
    116         t29.menu.scroll.but = $("section.sidebar .button.get-menu");
     121        t29.menu.scroll.but = $('<span class="button get-menu"></span>').appendTo("section.sidebar");
    117122        t29.menu.scroll.set(t29.menu.scroll.States.STATIC); // initial state
    118123       
     
    233238};
    234239
     240//////////////////////////// I18N / L10N system (messages)
     241t29.msg = { lang: "de" };
     242t29.msg.setup = function() {
     243        // haesslicher hack... wird jetzt im template ganz am ende durch
     244        // script aufgerufen.
     245        t29.msg.data = t29MSGDATA;
     246        /*$.getJSON('/lib/messages.php', function(data) {
     247                t29.msg.data = data;
     248        });*/
     249};
     250t29.msg.get = t29._ = function(str) { // t29._ is shorthand!
     251        if(t29.msg.data.msg[str]) {
     252                if($.isArray(t29.msg.data.msg[str]))
     253                        return t29.msg.data.msg[str][ t29.msg.data.order[ t29.msg.lang ]];
     254                else
     255                        return t29.msg.data.msg[str];
     256        } else {
     257                return "&lt;"+str+"&gt;";
     258        }
     259};
     260
    235261// alles fertiggeschnackelt.
    236262t29.setup = function() {
    237263        t29.defaultvalue.setup();
    238264        t29.menu.setup();
     265        //t29.msg.setup();
    239266}
    240267
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