ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/work/maruyama/prj_emoji/webapp/lib/OpenPNE/Smarty.php @ 3740

Last change on this file since 3740 was 3740, checked in by maruyama, 15 years ago

絵文字キャリア毎の変換実装

File size: 2.9 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7require_once 'Smarty/Smarty.class.php';
8
9class OpenPNE_Smarty extends Smarty
10{
11    var $templates_dir;
12    var $output_charset;
13
14    function OpenPNE_Smarty($configs=array())
15    {
16        $this->Smarty();
17
18        // 設定値をセット
19        foreach ($configs as $key => $value) {
20            if (isset($this->$key)) {
21                $this->$key = $value;
22            }
23        }
24    }
25
26    // extディレクトリ対応 SMARTY->display() ラッパー
27    function ext_display($resource_name, $cache_id = null, $compile_id = null)
28    {
29        // とりあえず携帯用にSJISのみ対応
30        if ($this->output_charset == 'SJIS') {
31            $this->register_outputfilter('smarty_outputfilter_convert_emoji');
32            $this->register_outputfilter('smarty_outputfilter_convert_utf82sjis');
33            $this->register_outputfilter('smarty_outputfilter_unescape_emoji');
34        }
35        $this->sendContentType();
36        $this->ext_fetch($resource_name, $cache_id, $compile_id, true);
37    }
38
39    function ext_fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
40    {
41        if ($this->templates_dir) {
42            $place = '';
43            $template = $this->templates_dir . '/' . $resource_name;
44
45            if (!$tpl = $this->ext_search($template, $place)) {
46                return false;
47            }
48            $tpl = 'file:' . $tpl;
49            $cache_id = $compile_id = $place . '_' . str_replace('/', '_', $this->templates_dir);
50        } else {
51            $tpl = $resource_name;
52        }
53
54        return $this->fetch($tpl, $cache_id, $compile_id, $display);
55    }
56
57    function ext_search($path, &$place)
58    {
59        $dft = OPENPNE_MODULES_DIR . '/' . $path;
60        $ext = OPENPNE_MODULES_EXT_DIR . '/' . $path;
61        $biz = OPENPNE_MODULES_BIZ_DIR . '/' . $path;
62
63        if (USE_EXT_DIR && is_readable($ext)) {
64            $place = 'ext';
65            return $ext;
66        } elseif (USE_BIZ_DIR && is_readable($biz)) {
67            $place = 'biz';
68            return $biz;
69        } elseif (is_readable($dft)) {
70            $place = 'dft';
71            return $dft;
72        }
73
74        return false;
75    }
76
77    function setOutputCharset($charset)
78    {
79        $this->output_charset = $charset;
80    }
81
82    function sendContentType()
83    {
84        if ($this->output_charset == 'SJIS') {
85            header('Content-Type: text/html; charset=Shift_JIS');
86        } else {
87            header('Content-Type: text/html; charset=UTF-8');
88        }
89    }
90}
91
92function smarty_outputfilter_convert_utf82sjis($tpl_output, &$smarty)
93{
94    return mb_convert_encoding($tpl_output, 'SJIS-win', 'UTF-8');
95}
96
97function smarty_outputfilter_unescape_emoji($tpl_output, &$smarty)
98{
99    return emoji_unescape($tpl_output, true);
100}
101
102function smarty_outputfilter_convert_emoji($tpl_output, &$smarty)
103{
104    return emoji_convert($tpl_output, true);
105}
106
107?>
Note: See TracBrowser for help on using the repository browser.