程序员人生 网站导航

symfony 结合 smarty 及相关的问题

栏目:access时间:2014-10-18 08:00:00
url:
http://trac.symfony-project.com/wiki/sfSmartyViewPlugin
http://www.symfony-project.org/forum/index.php/mv/msg/122/22565/
url:
让你的symfony 支持smarty
在你的symfony 项目 askeet目录下面(d:/apps/www/symfony/askeet)
执行
记得要在./symfony文件中加入:
    set_include_path(dirname(__FILE__).PATH_SEPARATOR.get_include_path());

cmd
>php symfony plugin-install http://plugins.symfony-project.com/sfSmartyViewPlugin

安装完后sfSmartyViewPlugin在 d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin目录中

在d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/doc中有一个PDF是专门介绍该插件的安装
经试用总结如下:

1.在d:/apps/www/symfony/askeet/frontend/config中创建 module.yml文件
内容如下
all:
 view_class: sfSmarty

2.拷贝d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/templates/layout.tpl
至 d:/apps/www/symfony/askeet/frontend/templates 中

拷贝d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/templates/indexSuccess.tpl
至 d:/apps/www/symfony/askeet/frontend/module/default/templates 中

3.将下面的内容添加到d:/apps/www/symfony/askeet/frontend/config/app.yml中
default values
all:
 sfSmartyView:
   class_path: d:
/apps/www/symfony/askeet/lib/Smarty/libs
   cache_dir: d:
/apps/www/symfony/askeet/web/tmp
   template_extension: .tpl
   template_security: 
false


按上面的三步即可完成一个简单版本的symfony+smarty 的演示

中间可能会出现一些错误,请参考doc目录下面的pdf文档

下面是出现的部分错误:在调试状态下会出现
”Unable to load "SmartyUrlHelper.php" helper “
相关的提示
针对此问题我们可以对d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/lib/sfSmartyView.class.php
做如下的修改
--- sfSmartyViewPlugin-0.1.2libsfSmartyView.class.php.orig    Thu Jan 25 11:31:27 2007
+++ sfSmartyViewPlugin-0.1.2libsfSmartyView.class.php    Thu Jan 25 12:09:51 2007
@@ 
-172,7 +172,12 @@
         }
         include (self::$cache
->getFile($helperName, self::CACHENAMESPACE));
         
try {
-            sfLoader::loadHelpers(array($helperName, 'Smarty' . $helperName));
+            if (self::isExistSmartyHelper($helperName)) {
+                sfLoader::loadHelpers(array($helperName, 'Smarty' . $helperName));
+            }

+            else {
+                sfLoader::loadHelpers(array($helperName));
+            }

         }

         
catch (sfViewException $e) {
             
if (!strpos($e->getMessage(), 'Smarty' . $helperName)) {
@@ 
-182,6 +187,21 @@
         self::$loadedHelpers[$helperName] 
= true;
     }

 
+    /*
+     * @param string $helperName
+     * @return boolean
+     
*/

+    private function isExistSmartyHelper($helperName) {
+        if ($pluginHelperDirs = glob(sfConfig::get('sf_plugins_dir').'/*/lib/helper') ) {
+            foreach ($pluginHelperDirs as $pluginHelperDir) {
+                if (is_readable($pluginHelperDir . '/Smarty' . $helperName . 'Helper.php')) {
+                    return true;
+                }

+            }

+        }

+        return false;
+    }
    
+    
     
/**
      * sfSmartyView::parseFile()
      *

即d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/lib/sfSmartyView.class.php文件中的部分代码为
start line: 175 
       include (self::$cache
->getFile($helperName, self::CACHENAMESPACE));
        
try {
            
if (self::isExistSmartyHelper($helperName)) {
                sfLoader::loadHelpers(array($helperName, 
'Smarty' . $helperName));
            }

            
else {
                sfLoader::loadHelpers(array($helperName));
            }

        }

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐