您的位置:首页 > 其它

symfony 结合 smarty 及相关的问题

2008-02-18 16:48 363 查看
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));


            }


        }




        catch (sfViewException $e) ...{




            if (!strpos($e->getMessage(), 'Smarty' . $helperName)) ...{


                throw $e;


            }


        }


        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;


    } 

照上面的方法做过修改后 相关的警告会在 log/frontend_dev.log中记录

提示:上面的有些地方要根据你的主机来确定,不可照搬
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息