Smarty目录结构和子目录路径问题

原文链接:http://bbs.csdn.net/topics/80223905

问题

1).最初在模板文件中使用了绝对路径(相对于站点根的路径 ).如在system_info.tpl中图片是这样显示的
<img src="/templates/default/images/logo.gif"/>
这样当系统发布时,必须要把系统目录作为网站的根目录图片才能正确显示。但客户的要求是该系统可能
只是一个虚拟目录或者子目录。这样网站必布时就必须修改图片路径为真实路径。如果文件很多,这种修改
就很麻烦(虽然可以用文件替换功能)。但是如果有N个客户,每个客户N个模板...

2).将模板文件修改如下
<img src="{$URL_ROOT}/templates/default/images/logo.gif"/>
$URL_ROOT在一个全局配置文件中设置。这样只要改变$URL_ROOT的值就搞定了,:)。
客户问:如果我改变了根目录的位置,或者换了域名,或者...?我们不希望自己去修改任何配置!

3).模板文件不变
 <img src="{$URL_ROOT}/templates/default/images/logo.gif"/>
 在每个目录下新建一个url_root.php文件,存放当前目录到根目录的相对路径。
 如system/url_root.php如下
 <?php$URL_ROOT = "..";//根目录在上一层目录?>

 每次访问目录下的一个文件时,require当前目录下的url_root.php取得该文件到根目录的路径。然后在smarty中
 $tpl->assign("URL_ROOT",$URL_ROOT);就可以了
 但是如果有很多文件,每个都加的话,修改维护起来也麻烦。
 所以把这个操作封装到smarty的子类中,只修改一个文件就可以了。
 
 includes/MySmarty.php 文件内容如下:
<?php
//定义服务器中的根目录的绝对地址
define("WEB_ROOT",realpath(dirname(__FILE__)."/.."));
//加载smarty类文件
require_once(WEB_ROOT."/smarty/Smarty.class.php");
//扩展smarty类
class MySmarty extends Smarty
{
function MySmarty()
{
$this->Smarty();$this->template_dir = WEB_ROOT.'/templates/default/'; $this->compile_dir  = WEB_ROOT.'/templates_c/'; $this->config_dir   = WEB_ROOT.'/configs/'; $this->cache_dir    = WEB_ROOT.'/cache/'; $this->caching  = false;//加载引用当前类的文件所在的目录到根目录的相对地址require_once("./url_root.php"); //为模板路径赋值$this->assign("URL_ROOT",$URL_ROOT);$this->assign('app_name', 'OA System'); 
}
}
?>

 这样系统中的任何一个使用模板的文件不需要修改,就可以直接给URL_ROOT赋值了.

总结
用smarty使用多套模板时,绝对路径,相对路径,界面可视化是个令人头疼的问题。
经过多次修改后,个人感觉这个系统比较具有通用性了,用户可以把整套系统放到网站的根目录下,
或者作为一个子目录,或者使用虚拟目录,不用修改路径配置,不用担心路径问题。唯一需要注意的是在开发模板时,
仍然使用相对于根的路径,这样是为了得到可视化效果,开发完成候,在路径的最前面加入{$URL_ROOT}即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++直角坐标系与极坐标系的转换_一篇阅读量高达2百6十多万的关于坐标系和投影的相关知识探讨...

本文转载于CSDN作者rsyaoxin这是一篇关于坐标和投影的「神文」截止目前浏览量已达2698239是相关文章中不可打破的神话...文末有本文作者推荐的两款坐标转换的小工具下载链接回想一下&#xff0c;接触遥感专业也有几个年头了&#xff0c;而现在越来越偏离遥感了&#xff0c;突然…

c# xmlhttp POST提取远程webservice数据

public string cancel(string StudentID,string Mobile){string datanull;data "<?xml version1.0 encodingutf-8?><soap:Envelope xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:soaphttp://schemas.…

Javascript实现的左右滑动菜单

原文链接&#xff1a;http://www.cnblogs.com/miqi2214/archive/2009/04/28/1445308.html Javascript实现的左右滑动菜单 先看Demo便于理解&#xff1a;请大家往这里看 业务需求&#xff1a; 1. 菜单个数不固定&#xff0c;当菜单个数长度小于给定范围宽度&#xff0c;则左右移…

查询用户分配角色TCODE

s_bce_68001419 转载于:https://www.cnblogs.com/yangliang/archive/2009/04/13/1434862.html

query string parameters什么意思_public static void main(String[] args) 是什么意思?(转)...

public static void main(String[] args)&#xff0c;是java程序的入口地址&#xff0c;java虚拟机运行程序的时候首先找的就是main方法。一、这里要对main函数讲解一下&#xff0c;参数String[] args是一个字符串数组&#xff0c;接收来自程度序执行时传进来的参数。如果是在控…

经典算法:位图排序

最近发现一个有趣的排序算法&#xff0c;通过位图来完成排序。位图排序其实就是基数排序&#xff0c;只不过位图排序的下标是比特位。 问题描述 输入&#xff1a;一个最多包含n个正整数的文件&#xff0c;每个数都小于n&#xff0c;其中n10^7。如果在输入文件中有任何正数重复出…

PHP中删除目录的三种方法

原文链接&#xff1a;http://www.chinaz.com/program/2008/1022/41645.shtml PHP中删除目录的三种方法 1、递规法&#xff1a;利用递归一层一层的删。 deleteDir(&#xff04;dir) { if (rmdir(&#xff04;dir)false && is_dir(&#xff04;dir)) {if (&#xff04;d…

b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

当在使用浩辰CAD制图软件绘制图纸的过程中&#xff0c;经常要绘制由多个坐标点连接成的曲线时&#xff0c;有什么方便快捷的方法吗&#xff1f;那当然是有的。利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来&#xff0c;就能很容易地画出曲线。下面给大家详细介绍一下吧&…

根据进程名杀掉进程

foreach (System.Diagnostics.Process pro in System.Diagnostics.Process.GetProcesses()){if (pro.ProcessName "Bss"){pro.Kill();break;}} 转载于:https://www.cnblogs.com/wolfcool/archive/2009/04/17/1438284.html

JavaScript 操作 Cookie

从事web开发也有些日子了&#xff0c;cookie 是个啥差不多能说明白&#xff0c;可是实际自己一上手操作就是得去搜索(你们懂的)&#xff0c;结果被鄙视了...所以就写一篇博文做为自己的学习笔记&#xff0c;嘿嘿&#xff0c;博客的好处在此体现出来了。 什么是 Cookie “cookie…

阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...

很多第一次购买阿里云服务器&#xff0c;不知该如何选择适合自已的服务器。其实购买阿里云服务器&#xff0c;主要是根据自已网站的流量来决定的。如果网站流量不大&#xff0c;一天只有几百ip&#xff0c;一般选择1核cpu&#xff0c;1G内存&#xff0c;1MB带宽就可以用了&…

python 切片_全面解读Python高级特性切片

大家好&#xff0c;欢迎来到Crossin的编程教室&#xff01;众所周知&#xff0c;我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)中的单个元素&#xff0c;那么&#xff0c;如果要获取一个索引区间的元素该怎么办呢&#xff1f;切片(slice)就是一种截取索…

十大Web网站漏洞扫描工具

原文链接&#xff1a;http://zhumeng8337797.blog.163.com/blog/static/1007689142012819111054920/ 1. Nikto 这是一个开源的Web服务器扫描程序&#xff0c;它可以对Web服务器的多种项目(包括3500个潜在的危险文件/CGI&#xff0c;以及超过900个服务器版本&#xff0c;还有250…

读书笔记(06) - 语法基础 - JavaScript高级程序设计

写在开头 本篇是小红书笔记的第六篇&#xff0c;也许你会奇怪第六篇笔记才写语法基础&#xff0c;笔者是不是穿越了。 答案当然是没有&#xff0c;笔者在此分享自己的阅读心得&#xff0c;不少人翻书都是从头开始&#xff0c;结果永远就只在前几章。对此&#xff0c;笔者换了随…

最近做了一个安装包的安装流程图

最近到做安装包的详细设计。下图是安装包的流程图&#xff0c;如果有什么意见和建议&#xff0c;希望大家给我留言&#xff0c;大家以前讨论 转载于:https://www.cnblogs.com/zengshengping815/archive/2009/04/22/1441319.html

如何使用Nikto漏洞扫描工具检测网站安全

转载链接&#xff1a;http://www.linuxidc.com/Linux/2011-02/32000.htm 【51CTO.com 独家特稿】随着信息技术的发展&#xff0c;网络应用越来越广泛&#xff0c;很多企业单位都依靠网站来运营&#xff0c;正因为业务的不断提升和应用&#xff0c;致使网站的安全性显得越来越重…

什么是区块链预言机(BlockChain Oracle)

预言机 Oracle 是区块链中非常重要的一个功能&#xff0c;但我发现很少有人讨论&#xff0c;也可能很多人对此并不了解。而网上关于预言机的文章很少&#xff0c;很多也没有讲明白&#xff0c;甚至有些还是错误的。所以我整理了一篇详细的文章&#xff0c;分享给大家&#xff0…

idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...

“知其然知其所以然”始终是Brick我学习新兴技术的出发点&#xff0c;那么咱们来聊聊以下几个问题问题1&#xff1a;在编写完web项目之后&#xff0c;我们怎么才能运行项目呢&#xff1f;--需要部署项目到Tomcat上。问题2&#xff1a;部署项目到Tomcat服务器有多少种方式&#…

程序员素质面试题

技术题做完后&#xff0c;先检查技术是否合格&#xff0c;技术合格的并非就一定是合适人选&#xff0c;还要做素质面试。 如下是小y出的面试题&#xff1a; &#xff08;上进心&#xff09;1.你的职业规划是怎样的&#xff0c;未来两年想朝哪个方向发展&#xff1f; &#xff0…

用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)

转载链接&#xff1a;http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安装 Windows7 &#xff0c;下载回去后的ISO镜像文件很多人都是使用 Nero 或 IMGBurn 等工具刻录成光盘来安装的。但实际上&#xff0c;不需刻盘安装Win7的方法还是有不少的。…