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

source: OpenPNE/branches/prj/framework/cakephp/app/views/smarty.php @ 5045

Last change on this file since 5045 was 5045, checked in by ebihara, 12 years ago

#1843:Smartyテンプレートへの書き換え作業(途中)

File size: 8.3 KB
Line 
1<?php
2/* SVN FILE: $Id$ */
3
4/**
5 * Methods for displaying presentation data
6 *
7 *
8 * PHP versions 4 and 5
9 *
10 * CakePHP :  Rapid Development Framework <http://www.cakephp.org/>
11 * Copyright (c) 2005, Cake Software Foundation, Inc.
12 *                     1785 E. Sahara Avenue, Suite 490-204
13 *                     Las Vegas, Nevada 89104
14 *
15 * Licensed under The MIT License
16 * Redistributions of files must retain the above copyright notice.
17 *
18 * @filesource
19 * @copyright    Copyright (c) 2005, Cake Software Foundation, Inc.
20 * @link         http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
21 * @version      1.0.0.4
22 * @package      cake
23 * @subpackage   cake.app.views
24 * @since        CakePHP v 0.10.4.1693
25 * @version      $Revision$
26 * @modifiedby   $LastChangedBy$
27 * @lastmodified $Date$
28 * @license      http://www.opensource.org/licenses/mit-license.php The MIT License
29 *
30 * update: 10/27/06 by tclineks
31 *  - added plugins_dir ( VIEWS.'smarty_plugins'.DS ), register_functions and _getViewFileName override
32 *  - @see http://bakery.cakephp.org/articles/view/124 for usage details
33 */
34
35/**
36 * Include Smarty. By default expects it at ( VENDORS.'smarty'.DS.'Smarty.class.php' )
37 */
38vendor('smarty'.DS.'Smarty.class');
39
40/**
41 * CakePHP Smarty view class
42 *
43 * This class will allow using Smarty with CakePHP
44 *
45 * @version      1.0.0.3
46 * @package      cake
47 * @subpackage   cake.app.views
48 * @since        CakePHP v 0.10.0.1693
49 */
50class SmartyView extends View
51{
52/**
53 * SmartyView constructor
54 *
55 * @param  $controller instance of calling controller
56 */
57    function __construct (&$controller)
58    {
59        parent::__construct($controller);
60        $this->Smarty = &new Smarty();
61        $this->ext= '.tpl';
62        $this->Smarty->plugins_dir[] = VIEWS.'smarty_plugins'.DS;
63        $this->Smarty->compile_dir = TMP.'smarty'.DS.'compile'.DS;
64        $this->Smarty->cache_dir = TMP.'smarty'.DS.'cache'.DS;
65        $this->Smarty->left_delimiter = '({';
66        $this->Smarty->right_delimiter = '})';
67    }
68
69/**
70 * Overrides the View::_render()
71 * Sets variables used in CakePHP to Smarty variables
72 *
73 * @param string $___viewFn
74 * @param string $___data_for_view
75 * @param string $___play_safe
76 * @param string $loadHelpers
77 * @return rendered views
78 */
79    function _render($___viewFn, $___data_for_view, $___play_safe = true, $loadHelpers = true)
80    {
81        if ($this->helpers != false && $loadHelpers === true)
82        {
83            $loadedHelpers =  array();
84            $loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers);
85
86            foreach(array_keys($loadedHelpers) as $helper)
87            {
88                $replace = strtolower(substr($helper, 0, 1));
89                $camelBackedHelper = preg_replace('/\\w/', $replace, $helper, 1);
90
91                ${$camelBackedHelper} =& $loadedHelpers[$helper];
92                if(isset(${$camelBackedHelper}->helpers) && is_array(${$camelBackedHelper}->helpers))
93                {
94                    foreach(${$camelBackedHelper}->helpers as $subHelper)
95                    {
96                        ${$camelBackedHelper}->{$subHelper} =& $loadedHelpers[$subHelper];
97                    }
98                }
99                $this->loaded[$camelBackedHelper] = (${$camelBackedHelper});
100                $this->Smarty->assign_by_ref($camelBackedHelper, ${$camelBackedHelper});
101            }
102        }
103
104        $this->register_functions();
105
106        foreach($___data_for_view as $data => $value)
107        {
108            if(!is_object($data))
109            {
110                $this->Smarty->assign($data, $value);
111            }
112        }
113        $this->Smarty->assign_by_ref('view', $this);
114        return $this->Smarty->fetch($___viewFn);
115    }
116   
117/**
118 * Returns layout filename for this template as a string.
119 *
120 * @return string Filename for layout file (.thtml).
121 * @access private
122 */
123    function _getLayoutFileName() {
124        if (isset($this->webservices) && !is_null($this->webservices)) {
125            $type = strtolower($this->webservices) . DS;
126        } else {
127            $type = null;
128        }
129
130        if (isset($this->plugin) && !is_null($this->plugin)) {
131            if (file_exists(APP . 'plugins' . DS . $this->plugin . DS . 'views' . DS . 'layouts' . DS . $this->layout . $this->ext)) {
132                $layoutFileName = APP . 'plugins' . DS . $this->plugin . DS . 'views' . DS . 'layouts' . DS . $this->layout . $this->ext;
133                return $layoutFileName;
134            }
135        }
136        $paths = Configure::getInstance();
137
138        foreach($paths->viewPaths as $path) {
139            if (file_exists($path . 'layouts' . DS . $this->subDir . $type . $this->layout . $this->ext)) {
140                $layoutFileName = $path . 'layouts' . DS . $this->subDir . $type . $this->layout . $this->ext;
141                return $layoutFileName;
142            }
143        }
144
145        // added for .thtml viewPath fallback
146        foreach($paths->viewPaths as $path) {
147            if (file_exists($path . 'layouts' . DS  . $type . $this->layout . '.thtml')) {
148                $layoutFileName = $path . 'layouts' . DS . $type . $this->layout . '.thtml';
149                return $layoutFileName;
150            }
151        }
152
153        if($layoutFileName = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . 'layouts' . DS . $type . $this->layout . '.thtml')) {
154        } else {
155            $layoutFileName = LAYOUTS . $type . $this->layout.$this->ext;
156        }
157        return $layoutFileName;
158    }
159
160/**
161 * Returns filename of given action's template file (.tpl) as a string. CamelCased action names will be under_scored! This means that you can have LongActionNames that refer to long_action_names.thtml views.
162 *  - added: will also return .thtml templates in viewPath paths for fallback
163 *
164 * @param string $action Controller action to find template filename for
165 * @return string Template filename
166 * @access private
167 */
168    function _getViewFileName($action) {
169        $action = Inflector::underscore($action);
170        $paths = Configure::getInstance();
171
172        if (!is_null($this->webservices)) {
173            $type = strtolower($this->webservices) . DS;
174        } else {
175            $type = null;
176        }
177
178        if (empty($action)) {
179            $action = $this->action;
180        }
181
182        $position = strpos($action, '..');
183
184        if ($position === false) {
185        } else {
186            $action = explode('/', $action);
187            $i = array_search('..', $action);
188            unset($action[$i - 1]);
189            unset($action[$i]);
190            $action='..' . DS . implode(DS, $action);
191        }
192
193        foreach($paths->viewPaths as $path) {
194            if (file_exists($path . $this->viewPath . DS . $this->subDir . $type . $action . $this->ext)) {
195                $viewFileName = $path . $this->viewPath . DS . $this->subDir . $type . $action . $this->ext;
196                return $viewFileName;
197            }
198        }
199
200        // added for .thtml viewPath fallback
201        foreach($paths->viewPaths as $path) {
202            if (file_exists($path . $this->viewPath . DS . $type . $action . '.thtml')) {
203                $viewFileName = $path . $this->viewPath . DS . $type . $action . '.thtml';
204                return $viewFileName;
205            }
206        }
207
208        if ($viewFileName = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . 'errors' . DS . $type . $action . '.thtml')) {
209        } elseif($viewFileName = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . $this->viewPath . DS . $type . $action . '.thtml')) {
210        } else {
211            $viewFileName = VIEWS . $this->viewPath . DS . $this->subDir . $type . $action . $this->ext;
212        }
213
214        return $viewFileName;
215    }
216
217    /**
218     * checks for existence of special method on loaded helpers, invoking it if it exists
219     * this allows helpers to register smarty functions, modifiers, blocks, etc.
220     */
221    function register_functions() {
222        foreach(array_keys($this->loaded) as $helper) {
223            if (method_exists($this->loaded[$helper], '_register_smarty_functions')) {
224                $this->loaded[$helper]->_register_smarty_functions(&$this->Smarty);
225            }
226        }
227    }
228
229    /**
230     * aa() 関数のラッパー(Smarty上でヘルパーのための連想配列を生成するのに必要)
231     *
232     * @return array
233     */
234    function aa()
235    {
236        $args = func_get_args();
237        var_dump($args);
238        return call_user_func_array('aa', $args);
239    }
240}
241?>
Note: See TracBrowser for help on using the repository browser.