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

Last change on this file since 299 was 299, checked in by heribert, 7 years ago

Zahlreiche Bugfixes, vor allem an der englischen Seite und im Deutschen. Letzte Änderungen, bevor Homepage offiziell ihren Dienst antritt.

  • Property svn:keywords set to Id
File size: 12.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
13require dirname(__FILE__) . "/ressourceloader.php";
14
15class t29Template {
16        public $conf, $menu, $msg;
17        public $body_classes = array();
18        public $javascript_config = array();
19        public $page_relations, $interlang_links;
20        public $log; // lightweight logging system
21
22        function __construct($conf_array) {
23                $this->conf = $conf_array;
24               
25                // fetch the lightweight logging object:
26                require_once $this->conf['lib'].'/logging.php';
27                $this->log = t29Log::get();
28
29                // create a menu:
30                require_once $this->conf['lib'].'/menu.php';
31                $this->menu = new t29Menu($this->conf);
32
33                // create localisation class:
34                require_once $this->conf['lib'].'/messages.php';
35                $this->msg = new t29Messages($this->conf['lang']);
36
37                // fill up configuration
38
39                // optional html headers which can be filled by hooks or parts
40                if(!isset($this->conf['header_prepend']))
41                        $this->conf['header_prepend'] = array(); // list
42
43                // as t29Host for configuration fillup fillup
44                $this->conf['host']->fillup_template_conf($this->conf);
45               
46                // Path names in messages
47                foreach(array('footer-legal-file', 'topnav-search-page') as $msg_id)
48                        $this->msg->set($msg_id, $this->conf['lang_path'].$this->msg->_($msg_id));
49
50                // store informations about the current page
51                $this->conf['seiten_link'] = $this->menu->get_link();
52                $this->conf['seite_in_nav'] = $this->menu->get_link_navigation_class($this->conf['seiten_link']);
53                $this->conf['seite_in_ul'] = $this->menu->get_link_ul_classes($this->conf['seiten_link']);
54
55                // setup body classes:
56                $body_classprefixes = array(
57                        // css prefix => configuration array value
58                        'lang-' => 'lang',
59                        'page-' => 'seiten_id',
60                        'in-nav-' => 'seite_in_nav',
61                        'in-' => 'seite_in_ul',
62                );
63                foreach($body_classprefixes as $prefix => $key) {
64                        if(is_array($this->conf[$key]))
65                                // append each element of array conf values
66                                foreach($this->conf[$key] as $x)
67                                        $this->body_classes[] = $prefix . $x;
68                        elseif($this->conf[$key]) // skip null/false/empty conf values
69                                $this->body_classes[] = $prefix . $this->conf[$key];
70                }
71               
72                // setup javascript configuration
73                $javascript_transfer = array('lang', 'seiten_id', 'seite_in_nav', 'seite_in_ul');
74                foreach($javascript_transfer as $key)
75                        $this->javascript_config[$key] = $this->conf[$key];
76               
77                // get all kind of relations
78                $this->page_relations = $this->menu->get_page_relations();
79                $this->interlang_links = $this->menu->get_interlanguage_link();
80               
81                // check and load additional css
82                $this->conf['pagecss'] = '/shared/css-v6/pagestyles/'.$this->conf['seiten_id'].'.css';
83                $this->conf['has_pagecss'] = file_exists($this->conf['webroot'].$this->conf['pagecss']);
84                // FIXME: There is no caching check yet for this setting
85                //        (new pagecss file won't be detected and wont purge the tmpl cache)
86               
87                // setup html title
88                $this->conf['html_title'] = '';
89                if(isset($this->conf['titel']) && !empty($this->conf['titel']))
90                        $this->conf['html_title'] = $this->conf['titel'] . ' - ';
91                // Startseite macht ihren Titel jetzt selbst (SEO):
92                //elseif($this->conf['seiten_id'] == $this->msg->_('homepage-pagename'))
93                //      {} // nop: Startseitentitel soll nur sein "technikum29"
94                elseif($this->conf['seiten_link'])
95                        // Titel vom Menu nehmen
96                        $this->conf['html_title'] = $this->conf['seiten_link'] . ' - ';
97                $this->conf['html_title'] .= $this->msg->_('html-title');
98        }
99       
100        /**
101         * Main caching and output system.
102         * Parameters (global configuration):
103         *    skip_cache  -  if true, skips writing output to cache file
104         *    purge_cache -  if true, forces creation of new cache file
105         *                   (does not change behaviour of this file's code)
106         **/
107        function create_cache($cache_object) {
108                $cache_object->start_cache(array($this, 'print_footer'));
109                $this->print_header();
110        }
111       
112        /**
113         * Write header and footer in separate cache files.
114         **/
115        function create_separate_caches($header_cache, $footer_cache) {
116                $header_cache->start_cache();
117                $this->print_header();
118                $header_cache->write_cache(); // will also print out header immediately.
119               
120                $footer_cache->start_cache();
121                $this->print_footer();
122                $footer_content = $footer_cache->write_cache(null, true); // don't print footer immediately.
123               
124                // print footer on exit.
125                register_shutdown_function(function() use ($footer_content) {
126                        print $footer_content;
127                });
128        }
129
130        function print_header() {
131                $p = $this->msg->get_shorthand_printer();
132                $_ = $this->msg->get_shorthand_returner();
133?>
134<!doctype html>
135<html class="no-js" lang="<?php echo $this->conf['lang']; ?>">
136<head>
137  <meta charset="utf-8">
138  <title><?php echo $this->conf['html_title']; ?></title>
139  <meta name="description" content="Produziert am 08.01.2012">
140  <meta name="author" content="technikum29-Team">
141  <meta name="generator" content="t29v6/<?php print $this->conf['host']->hostname; ?>">
142  <meta name="t29.cachedate" content="<?php print date('r'); ?>">
143  <?php
144        foreach($this->conf['header_prepend'] as $h) print $h."\n  ";
145 
146        if(isset($this->conf['version'])) printf('<meta name="t29.version" content="%s">', $this->conf['version']);
147        if(isset($_GET['debug']))
148                foreach(explode(' ','debug rl_debug skip_cache purge_cache verbose_cache') as $x)
149                        printf("\n  <meta name='t29.template.data-%s' content='%s'>", $x, isset($_GET[$x])?'true':'false');
150  ?>
151 
152  <?php
153        foreach(array_merge(array("first" => t29Menu::dom_new_link($this->conf['lang_path'], $_('head-rel-first'))),
154          $this->page_relations) as $rel => $a) {
155                if($rel == 'start') continue; // not in standard
156                printf("\n  <link rel='%s' href='%s' title='%s' />",
157                        $rel, $a['href'], sprintf($_('head-rel-'.$rel), $this->relational_link_to_string($a))
158                );
159        }
160  ?>
161 
162  <link rel="copyright" href="<?php $p('footer-legal-file'); ?>" title="<?php $p('footer-legal-link'); ?>">
163  <link rel="search" type="application/opensearchdescription+xml" href="<?php $p('topnav-search-page'); print '?action=opensearch-desc&amp;lang='.$this->conf['lang']; ?>" title="<?php $p('opensearch-desc'); ?>">
164  <?php
165        // print interlanguage links for all languages except the active one
166        foreach($this->interlang_links as $lang => $a) {
167                if($lang != $this->conf['lang'] && !is_null($a)) {
168                        printf('<link rel="alternate" href="%s" hreflang="%s" title="%s">',
169                                $a['href'], $lang, sprintf($_('head-rel-interlang', $lang), $a)
170                        );
171                }
172        }
173  ?>
174 
175  <meta name="viewport" content="width=device-width,initial-scale=1">
176  <?php
177        $csslinktmpl = PHP_EOL.'  <link rel="stylesheet" href="%s">';
178        foreach($this->get_ressourceloader_links('css') as $css)
179                printf($csslinktmpl, $css);
180 
181        if($this->conf['has_pagecss'])
182                printf($csslinktmpl, $this->conf['pagecss']);
183  ?>
184
185  <script src="/shared/js-v6/libs/modernizr-2.0.6.min.js"></script>
186</head>
187
188<body class="<?php echo implode(' ', $this->body_classes) ?>">
189  <div id="container">
190        <h1 role="banner"><a href="/" title="<?php $p('head-h1-title'); ?>"><?php $p('head-h1'); ?></a></h1>
191        <div id="background-color-container"><!-- helper -->
192        <section class="main content" role="main" id="content">
193                <?php 
194                        if(!$this->log->is_empty()) {
195                                print '<div class="errorpane">';
196                                $this->log->print_all();
197                                print '</div>';
198                        }
199                ?>
200                <!--<header class="teaser">
201                        <h2 id="pdp8L">Wissenschaftliche Rechner und Minicomputer</h2>
202                        <img width=880 src="http://www.technikum29.de/shared/photos/rechnertechnik/univac/panorama-rechts.jpg">
203                </header>-->
204        <!-- start content -->
205<?php 
206} // function print_header().
207
208        function print_footer() {
209                $p = $this->msg->get_shorthand_printer();
210                $_ = $this->msg->get_shorthand_returner();
211        ?>
212        <!-- end content -->
213        </section>
214        <hr>
215        <section class="sidebar top">
216                        <h2 class="visuallyhidden"><?php $p("sidebar-h2-tour"); ?></h2>
217                        <nav class="side">
218                                <?php $this->menu->print_menu(t29Menu::sidebar_menu); ?>
219                        </nav>
220                        <!-- menu changing buttons are made with javascript -->
221        </section>
222        <section class="sidebar bottom">
223                <!-- inhalte die unten ueber dem header sind -->
224        </section>
225        </div><!-- div id="background-color-container" helper end -->
226        <hr>
227        <header class="banner">
228                <h2 class="visuallyhidden"><?php $p("sidebar-h2-mainnav"); ?></h2>
229                <nav class="horizontal">
230                        <?php $this->menu->print_menu(t29Menu::horizontal_menu); ?>
231                </nav>
232                <nav class="top">
233                        <h3 class="visuallyhidden"><?php $p("sidebar-h2-lang"); ?></h3>
234                        <ul>
235                                <?php
236                                        foreach($this->interlang_links as $lang => $a) {
237                                                $is_current_lang = $lang == $this->conf['lang'];
238                                                if(is_null($a)) {
239                                                        // when interlanguage link not present (null) = no translation exists
240                                                        $a = t29Menu::dom_new_link('#', 'not present');
241                                                        $title = sprintf($_('topnav-interlang-nonexistent', $lang));
242                                                        $class = 'nonexistent';
243                                                } elseif($is_current_lang) {
244                                                        $title = sprintf($_('topnav-interlang-active'), $a);
245                                                        $class = 'active';
246                                                } else {
247                                                        // ordinary interlang link
248                                                        $title = sprintf($_('topnav-interlang-title', $lang), $a);
249                                                        $class = '';
250                                                }
251                                                printf("\t\t\t\t<li%s><a href='%s' title='%s'>%s</a></li>\n",
252                                                        (empty($class) ? '' : " class='$class'"),
253                                                        $a['href'], htmlspecialchars($title),
254                                                        $this->conf['languages'][$lang][0] // verbose language name
255                                                );
256                                        }
257                                ?>
258                        </ul>
259                        <form method="get" action="<?php $p('topnav-search-page'); ?>">
260                                <span class="no-js"><?php $p('topnav-search-label'); ?>:</span>
261                                <input type="text" value="" data-defaultvalue="<?php $p('topnav-search-label'); ?>" name="q" class="text">
262                                <input type="submit" value="<? $p('topnav-search-label'); ?>" class="button">
263                        </form>
264                </nav>
265    </header>
266        <hr>
267    <footer class="in-sheet">
268                <nav class="guide">
269                        <!-- hier wird nav.side die Liste per JS reinkopiert -->
270                </nav>
271                <nav class="rel clearfix">
272                <ul>
273                        <?php
274                          // only print menu when in sidebar where it applies
275                          if($this->conf['seite_in_nav'] == 'side')
276                                foreach($this->page_relations as $rel => $a) {
277                                        printf("\t<li class='%s'><a href='%s' title='%s'>%s <strong>%s</strong></a>\n",
278                                                $rel, $a['href'], sprintf($_('head-rel-'.$rel), $this->relational_link_to_string($a)),
279                                                $_('nav-rel-'.$rel), $this->relational_link_to_string($a)
280                                        );
281                                }
282                        ?>
283                </ul>
284                </nav>
285                <div class="right">
286                        <!-- text der rechts unten steht -->
287                </div>
288    </footer>
289  </div> <!--! end of #container -->
290  <footer class="attached">
291    <div class="legacy"><?php $p('footer-legacy-text'); ?></div>
292        <!--
293        <ul class="clearfix">
294        <li class="logo">
295                <a href="<?php $p('footer-legal-file'); ?>" class="img" title="technikum29 Logo">Logo</a>
296                <p><?php $p('footer-copyright-tag'); ?>
297                   <br><?php printf('<a href="%s">%s</a>', $_('footer-legal-file'), $_('footer-legal-link')); ?>
298                </p>
299        </li>
300        <li class="copy">
301                <a href="<?php $p('footer-legal-file'); ?>#image-copyright" class="img">CC</a>
302                <p>Viele Bilder können unter einer <a href="<?php $p('footer-legal-file'); ?>#image-copyright">CreativeCommons-Lizenz</a>
303                   verwendet werden. <a href="<?php $p('footer-legal-file'); ?>#image-copyright">Erkundigen Sie sich</a>.</p>
304        </li>
305        </ul>
306        -->
307  </footer>
308</div><!-- end of div id="footer-background-container" helper -->
309
310  <!-- JavaScript at the bottom for fast page loading -->
311
312  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
313  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
314  <script>window.jQuery || document.write('<script src="/shared/js-v6/libs/jquery-1.7.2.min.js"><\/script>')</script>
315
316  <script>window.t29={'conf': <?php print json_encode($this->javascript_config); ?>};</script>
317  <?php
318        foreach($this->get_ressourceloader_links('js') as $js)
319                printf('  <script src="%s"></script>'.PHP_EOL, $js);
320  ?>
321</body>
322</html>
323<?php
324        } // function print_footer()
325       
326        // Hilfsfunktionen
327        private function relational_link_to_string($a) {
328                // wenn es bei einem relationalen Link einen Titel gibt, diesen ausgeben, ansonsten die
329                // Linkbeschreibung. Die Links sind XML-Elemente in der Navigation.
330                return isset($a['title']) ? $a['title'] : $a;
331        }
332
333        function get_ressourceloader_links($type) {
334                $rl = t29RessourceLoader::create_from_type($type, $this->conf);
335                return $rl->get_urls( isset($_GET['rl_debug']) );
336        }
337
338} // 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