source: t29-www/lib/template.php @ 255

Last change on this file since 255 was 255, checked in by sven, 7 years ago

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

File size: 7.2 KB
Line 
1<?php
2/**
3 * technikum29v6 Page Template
4 *
5 * Global vars:
6 *  $lang = de | en
7 *  $seiten_id = kurzkennung der aktuellen seite
8 *  $root = Seiten-Root fuer URLs ($root/de, $root/shared, etc.)
9 *  $titel = Seitentitel
10 *  $header_cache_file, $footer_cache_file.
11 **/
12 
13class t29Template {
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();
23
24        function __construct($conf_array) {
25                $this->conf = $conf_array;
26
27                // fill up configuration
28                $this->conf['legal_pagename'] = $this->conf['lang_path'] . self::$legal_pagenames[$this->conf['lang']];
29
30                // create a menu:
31                require_once $this->conf['lib'].'/menu.php';
32                $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'];
45        }
46       
47        /**
48         * Main caching and output system.
49         * Parameters (global configuration):
50         *    skip_cache  -  if true, skips writing output to cache file
51         *    purge_cache -  if true, forces creation of new cache file
52         *                   (does not change behaviour of this file's code)
53         **/
54        function create_cache() {
55                ob_start();
56                $this->print_header();
57                register_shutdown_function(array($this, 'create_cache_shutdown'));
58        }
59       
60        function create_cache_shutdown() {
61                $this->print_footer();
62                $whole_page = ob_get_flush();
63                if($this->conf['skip_cache']) {
64                        echo "<!-- debug mode, skipped cache and cache saving. -->";
65                        return; // do not save anything
66                }
67               
68                if(!file_exists($this->conf['cache_file'])) {
69                        t29Template::mkdir_recursive(dirname($this->conf['cache_file']));
70                }
71
72                file_put_contents($this->conf['cache_file'], $whole_page);
73        }
74
75        public static function mkdir_recursive($pathname) {
76                is_dir(dirname($pathname)) || t29Template::mkdir_recursive(dirname($pathname));
77                return is_dir($pathname) || @mkdir($pathname);
78        }
79
80        function print_header() {
81                $_ = $this->msg->get_shorthand_printer();
82?>
83<!doctype html>
84<html class="no-js" lang="<?php echo $this->conf['lang']; ?>">
85<head>
86  <meta charset="utf-8">
87  <title><?php isset($this->conf['titel']) ? $this->conf['titel'].' - ' : ''; $_('html-title'); ?></title>
88  <meta name="description" content="Produziert am 08.01.2012">
89  <meta name="author" content="Sven">
90  <meta name="generator" content="t29v6 $Id$">
91  <meta name="t29.cachedate" content="<?php print date('r'); ?>">
92  <meta name="viewport" content="width=device-width,initial-scale=1">
93  <link rel="stylesheet" href="/shared/css-v6/boiler.css">
94  <link rel="stylesheet" href="/shared/css-v6/style.css">
95  <link rel="stylesheet" href="/shared/css/common.css">
96
97  <script src="/shared/js-v6/libs/modernizr-2.0.6.min.js"></script>
98</head>
99
100<body class="<?php echo implode(' ', $this->body_classes) ?>">
101<div id="footer-background-container"><!-- helper -->
102  <div id="container">
103        <h1 role="banner"><a href="/" title="<?php $_('head-h1-title'); ?>"><?php $_('head-h1'); ?></a></h1>
104        <div id="background-color-container"><!-- helper -->
105        <section class="main content" role="main" id="content">
106                <!--<header class="teaser">
107                        <h2 id="pdp8L">Wissenschaftliche Rechner und Minicomputer</h2>
108                        <img width=880 src="http://www.technikum29.de/shared/photos/rechnertechnik/univac/panorama-rechts.jpg">
109                </header>-->
110        <!-- start content -->
111<?php 
112} // function print_header().
113
114function print_footer() {
115        $p = $this->msg->get_shorthand_printer();
116        $_ = $this->msg->get_shorthand_returner();
117?>
118        <!-- end content -->
119        </section>
120        <hr>
121        <section class="sidebar">
122                        <h2 class="visuallyhidden"><?php $p("sidebar-h2-tour"); ?></h2>
123                        <nav class="side">
124                                <?php $this->menu->print_menu(t29Menu::sidebar_menu); ?>
125                        </nav>
126                        <!-- menu changing buttons are made with javascript -->
127        </section>
128        </div><!-- div id="background-color-container" helper end -->
129        <hr>
130        <header class="banner">
131                <h2 class="visuallyhidden"><?php $p("sidebar-h2-mainnav"); ?></h2>
132                <nav class="horizontal">
133                        <?php $this->menu->print_menu(t29Menu::horizontal_menu); ?>
134                </nav>
135                <nav class="top">
136                        <h3 class="visuallyhidden"><?php $p("sidebar-h2-lang"); ?></h3>
137                        <ul>
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                                ?>
149                        </ul>
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')); ?>
155                        </form>
156                </nav>
157    </header>
158        <hr>
159    <footer>
160                <nav class="guide">
161                        <!-- hier wird nav.side die Liste per JS reinkopiert -->
162                </nav>
163                <nav class="rel clearfix">
164                <ul>
165                        <?php $this->menu->print_relations(); ?>
166                        <!--
167                        <li class="prev"><a href="#">vorherige Seite <strong>Univac 9200</strong></a>
168                        <li class="next"><a href="#">nächste Seite <strong>Analog und Hybridrechner</strong></a>
169                        -->
170                </ul>
171                </nav>
172                <div class="right">
173                        <img src="/shared/img-v6/logo.footer.png" title="technikum29 Logo" alt="Logo" class="logo">
174                        <?php $p('footer-copyright-tag'); ?>
175                        <br/><?php printf('<a href="%s">%s</a>', $this->conf['legal_pagename'], $_('footer-legal-link')); ?>
176                        <div class="icons">
177                                <a href="<?php echo $this->conf['legal_pagename']; ?>#image-copyright"><img src="/shared/img-v6/cc-icon.png"></a>
178                                <!--<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>-->
179                        </div>
180                        <!--CC<br>Viele Bilder können unter einer CreativeCommons-Lizenz
181                        verwendet werden. Erkundigen Sie sich.-->
182                </div>
183                               
184                <!--Copyright-Hinweis<br>
185                technikum29-Logo, Link aufs Impressum, Kontakt<br>
186                Creative-Commons-Tag<br>
187                Designed by Ufopixel<br>-->
188    </footer>
189  </div> <!--! end of #container -->
190
191
192  <!-- JavaScript at the bottom for fast page loading -->
193
194  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
195  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
196  <script>window.jQuery || document.write('<script src="/shared/js-v6/libs/jquery-1.6.2.min.js"><\/script>')</script>
197
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>
202</div><!-- end of div id="footer-background-container" helper -->
203</body>
204</html>
205<?php
206        } // function print_footer()
207       
208} // class t29Template
Note: See TracBrowser for help on using the repository browser.
© 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