OSDN Git Service

[add]Webページのテンプレートを扱うクラス
[hengband/web.git] / score / web_template.inc
1 <?php
2 /**
3  * Webページテンプレートを扱うクラス
4  * 使用方法:
5  * 1. インスタンス生成
6  * 2. 必要ならばset_title()でタイトル設定
7  * 3. 必要ならばadd_head_contentsでheadタグの内容を追加
8  * 4. main_contents_fp()で得たリソースにコンテンツを書き込み
9  * 5. print_page()でWebページ出力
10  */
11 class WebTemplate
12 {
13     private static $template_dir = "../template";
14
15     public function __construct() {
16         $this->template = file(self::$template_dir."/template.html");
17         $this->head = file(self::$template_dir."/head.html");
18         $this->header = file(self::$template_dir."/header.html");
19         $this->footer = file(self::$template_dir."/footer.html");
20
21         $this->main_contents_fp = fopen('php://temp', 'r+');
22     }
23
24     /**
25      * Webページのメインコンテンツを書き込むリソースのポインタを得る
26      *
27      * @return resource Webページのメインコンテンツを書き込むリソースのポインタ
28      */
29     public function main_contents_fp()
30     {
31         return $this->main_contents_fp;
32     }
33
34
35     /**
36      * Webページのhead内のtilteタグの内容をセットする
37      *
38      * @param string title セットするタイトルの文字列
39      */
40     public function set_title($title)
41     {
42         foreach ($this->head as &$line) {
43             $line = preg_replace('/<title>.*<\/title>/', "<title>{$title}</title>", $line);
44         }
45     }
46
47
48     /**
49      * Webページのhead内にコンテンツを追加する
50      * javasciprtやCSSを読み込ませるタグの追加に使用
51      *
52      * @param string contents 追加するコンテンツの文字列
53      */
54     public function add_head_contents($contents)
55     {
56         $end_line = array_pop($this->head);
57         array_push($this->head, $contents."\n", $end_line);
58     }
59
60
61     /**
62      * Webページを出力する
63      */
64     public function print_page() {
65         rewind($this->main_contents_fp);
66         $this->main_contents = [stream_get_contents($this->main_contents_fp)];
67         foreach ($this->template as $line) {
68             echo $line;
69             switch (trim($line)) {
70             case "<!--head-->":
71                 self::print_page_sub($this->head);
72                 break;
73             case "<!--header-->":
74                 self::print_page_sub($this->header);
75                 break;
76             case "<!--main contents-->":
77                 self::print_page_sub($this->main_contents);
78                 break;
79             case "<!--footer-->":
80                 self::print_page_sub($this->footer);
81                 break;
82             }
83         }
84     }
85
86     private static function print_page_sub($lines) {
87         foreach ($lines as $line){
88             echo $line;
89         } 
90     }
91 }