首页 > 代码库 > thinkphp的缓存与taglib-html标签库
thinkphp的缓存与taglib-html标签库
TP中的标签库
+-------------------------------------------------------------------------+
要使用标签库扩展,需要在项目配置文件中定义taglibs.php文件,格式如下:
return array(
‘mytag‘=>‘@.Taglib.TaglibMyTag‘,
)
+-------------------------------------------------------------------------+
然后在项目的的Lib/Taglib/目录下放入TagLibMytag.class.php标签解析文件,标签库可以放在Lib/TagLib/Tags下面自己定义(参考初始化方法)!
class TagLibMytag.class.php extends TagLib{
//初始化标签库的定义文件
public function _initalize(){
$this->xml=dirname(__FILE__).‘/Tags/mytag.xml‘;
}
}
至于具体的标签库定义文件和标签解析方法的使用,后续再详细解释.
[注意事项]
1.修改标签库定义文件,需要删除项目编译缓存
2.标签库定义中的标签库类解析类路劲可以随意定义,使用import方法导入
+-------------------------------------------------------------------------+
怎么用代码删除缓存?
我的1.5下的清空缓存是这样的:
class CacheAction extends GlobalAction{
function _initialize(){
parent::_initialize();
parent::checkLogin();//检测登录
//$this->_checkSecurity(‘index‘);//权限检测
}
/*
加载需要清理缓存部分
TODOO:清理前台缓存设置
*/
public function index(){
$this->assign("caceh",array(
"admin_app(后台)"=array(
"模版缓存(Cache)"=>"./Manage/Runtime/Cache",
"数据缓存目录(Temp)"=>"./Manage/Runtime/Temp",
// "日志记录(Logs)"=>"./Manage/Runtime/Data/Logs";
"数据目录(Data)"=>"./Manage/Runtime/Data/_fields",
"核心缓存(Runtime)"=>"./Manage/Runtime"
),
"index_app(前台)"=>array(
"模版缓存(Cache)"=>"./Index/Runtime/Cache",
"数据缓存目录(Temp)"=>"./Index/Runtime/Temp",
// "日志目录(Log)"=>"./Index/Runtime/Logs",
"数据目录(Data)"=>"./Index/Runtime/Data/_fields",
"核心缓存(Runtime)"=>"./Index/Runtime"
),
));
$this->display();
}
/**
执行清理过程
**/
public function clear(){
$dirs=$_POST[‘id‘];
//dump($dirs);
$say="清理缓存文件夹成功!<br/>";
foreach($dirs as $value){
$this->checkCache($type=0,$path=$value);
$say.=$value."<br/>";
}
//更新日志
parent::upLog($_SESSION["admin"],$_SESSION["admin"]."清理缓存成功",0);
$this->assign("jumpUrl",__APP__."/index/main");
$this->assign("waitSecond",3);
$this->success($say);
}
//清空缓存目录
private function clearCache($type=0,$path=NULL){
if(is_null($path)){
switch($type){
case 0://模版缓存目录
$path=CACHE_PATH;
break;
case 1:
$path=TEMP_PATH;
break;
case 3:
$path=DATA_PATH;
}
}
import("@ORG.Io.Dir");
Dir::del($path);//删除目录
}
}
//清空缓存
public function shanchu(){
header("Content-Type:text/html;charset=utf-8");
$caches=clearCache(0);
$this->redirect(‘admin‘,‘Index‘);
}
+--------------------------------------------------------------------+
8-8日到13一周总结:
在tp2.1手册中取模操作的一点操作:
<volist name="list" id="vo" mod="5">
{$vo.name}
<eq name="mod" value="http://www.mamicode.com/4"><br/></eq>
</volist>
如果实际演示中第一行只显示4个,从第二行开始每行显示5个,其实简单,只要简单看以下缓存中的语句就明白了
<?php if(is_array($list)):$i=0;$__LIST__=$list;if(count($__LIST__)==0): echo "";else: foreach($__LIST__ as $key=>$vo):$i++;$mod=($i % 5)?><?php echo ($vo["ip"]);?>
初始的时候$i为0,但在取模的时候执行了++$i,即$i不是从0开始的而是从1开始的.所以第一行只显示了4个
runtime缓存目录
runtime-->目录下面的结构:
Cache--->模版缓存
Data---->数据目录,目录下的_fields为字段缓存
Logs---->日志缓存
Temp---->数据缓存
~app.php - 项目编译缓存文件包含项目配置文件,项目公共函数文件
开发中我们的文件随时都可能需要改动,这样我们有时候需要删除啊runtime目录下面的缓存才生效,如果不需要缓存文件,可以在项目入口文件的时候加入:
define(‘NO_CACHE_RUNTIME‘,True);
在开启缓存的情况下更容易发现错误,不过有时候总是提示~runtime第二行有错误,是因为在生成编译缓存和核心缓存的时候去除了空白和注释,我们可以让他保留注释和空白这样我们更容易查找.只需要在入口文件加入:
define(‘STRIP_RUNTIME_SPACE‘,false);
3.URL大小写的问题
系统默认的规范是根据URL里面的moduleName和actionName来定位到具体的模块类,从而执行模块类的操作方法,如果是在LINUX环境下面,就会发生URL里面使用小写的时候不能找到模块类的情况,我们可以通过配置来解决:
‘URL_CASE_INSENSITIVE‘=>true
这样URL就不区分大小写了:
不过需要注意的是:
如果我们定义了一个UserTypeAction的模块类,那么URL的访问应该就是:
http://<serverName>/index.php/user_type/list
而不是:
http://<serverName>/index.php/usertype/list
4.在模版中引入文件
有的信任在模版中包含文件还是不明白,这里的文件路径
5.获取URL参数的值
$_GET;
$_POST
+--------------------------------------------------------------------------+
经验:
1.Action注意事项;
a.使用EmptyAction以及_empty函数进行空异常操作,重写异常抛出的表现方式
b.在Action类之前加上if(!defined("ThINK_PATH")) exit("Access Denied");确保外部include攻击
c.
+--------------------------------------------------------------------------+
寻求标签库使用说明:
http://bbs.thinkphp.cn/forum.php?mod=viewthread&tid=27295
+---------+
警告:在使用下列所说的任何标签库都需要
HTML第一行加入 <tarlib name=”cx,html” />
如果想单独引入cx标签库就直接写成<tarlib name=”cx” />
如果单独引入html标签库就直接写成<tarlib name=”html” />
原则上来讲所有的标签的属性是可以不增加的(因为tp并为进行强制验证^_^),不过为了你的正常使用,请在使用的时候按照需要进行添加
首先我们来说html标签库的信息
Editor标签
<html:editor
id=”editory”
name=”remarke”
type=”FCKeditor”
content=”” />
属性
Id 属性
编辑器的id值,
如果并未填写改属性,则会默认为_editor
Name 属性 必须的
编辑器的 name值
如果未填写,默认为空
Width 属性
编辑器的宽度
如果未填写,默认为100%
Height 属性
编辑器的高度
如果未填写默认为320px
Content 属性
编辑器的内容的初始化值
如果未填写,则为空
Type 属性
编辑器的类型 默认情况下支持
Fckeditor eWebEditor NETEASE UBB
如果填写的编辑器类型不存在,则会默认为 TextArea标签
指定Fckeditor 时,文件存放路径必须为 /Public/Js/FCKeditor/
指定eWebEditor 时,文件存放路径必须为/Public/Js/eWebEditor/
指定NETEASE 时,文件存放路径必须为/Public/Js/HtmlEditor/
指定UBB时,文件存放路径必须为/Public/Js/
imageBtn标签
<html:imageBtn
id=””
name=””
type=""
value=""
click=””
style=”” />
属性:
Id属性
input的id值
Name属性
input的name值
Type 属性
input标记的类型
如果未填写 则默认为 button
Value 属性
input标记的Value值
click 属性
input 的click执行内容,可以为js语句块,也可以为js函数
style 属性
input标记外面生成div的样式
imgLink标签
<html:imgLink
id=””
name=””
alt=””
click=””
style=””
type=""
value="" />
提示:
这个标记增加了鼠标移上和移除的滤镜效果,推荐使用,不过内部实现是有问题的,如果需要使用的同志,请修改一下TagLibHtml.class.php 125行
$parseStr = ‘<span class=".$style." ><input title="‘.$alt.‘" type="‘.$type.‘" id="‘.$id.‘" name="‘.$name.‘" onm ouseover="this.style.filter=\‘alpha(opacity=100)\‘" onm ouseout="this.style.filter=\‘alpha(opacity=80)\‘" onclick="‘.$click.‘" align="absmiddle" class="‘.$name.‘ value="http://www.mamicode.com/‘.$value.‘"></span>‘;
属性:
id属性
input的id值
name属性
input的name值
alt属性
input的title值
style属性
input标记外面生成的span的样式
click属性
input的click执行内容,可以为js语句块,也可以为js函数
type属性
input属性的类别,如果不输入则默认为button
value属性
input 的value的值,不过在源代码里面并未使用
select标记
<html:select
options=""
selected=""
id=””
name=””
values=””
output=””
multiple=””
size=””
first=””
style=””
dblclick=””
change=”” />
属性:
id属性
select的id值
name属性
select的name值
dblclick属性
select 双击事件调用的js
change属性
select value值改变调用的js
multiple属性
select 是否以可以选择多项 值不固定,任意值均可
style属性
select 的样式
size属性
select 的行数
first属性
select 的第一个值,比如 请选择您的学历
options属性
select的项,为php的有键的数组,如果没有键的数组请使用values属性
当两个属性同时存在时,以options为优先
value的值为$key
values属性
select的项,为php无键的数组,当两个属性同时存在时,以options为优先
value的值为数组的值
selected属性
select 默认的选中项
当使用options属时,selected属性的内容与$key进行匹配,如果使用values属性
则与内容进行匹配
output属性
select option项目的结尾串,比如
<option value=http://www.mamicode.com/”1”>小学学历
<option value=http://www.mamicode.com/”2”>中学学历
<option value=http://www.mamicode.com/”3”>大学学历
这里的情况,我们就可以直接设置output为 学历
checkbox标签
<html:checkbox
checkboxes=""
checked=""
name=””
separator=”” />
提示:
checkboxes="" 请注意看这个属性 并不是checkboxs 在s的前面多了一个e
我想应该是官方手误吧,如果你愿意,请修改源码,或者说在使用的时候加上e
属性:
name属性
checkbox属性的name值,无论你输入什么,系统会默认增加[]
checkboxes
checkbox组,是php的有键数组(必须为有键数组),$key为checkbox项的value
$value 为checkbox后面带的说明
checked
这里可以为数组,也可以为单个字符串
如果为字符串,则与$key进行匹配 判断是否选中
如果为数组,则匹配是否包含这个$key 判断是否选中
separator
分隔符,当一个checkbox项结束后的分隔符
radio标签
<html:radio
radios=""
checked=""
checked=””
separator=”” />
属性
radios
radio组是php的有键数组(必须为有键数组),$key为radio项的value
$value 为radio后面带的说明
checked
这里可以为数组,也可以为单个字符串
如果为字符串,则与$key进行匹配 判断是否选中
name属性
radio属性的name值,无论你输入什么,系统会默认增加[]
separator
分隔符,当一个radio项结束后的分隔符
thinkphp的缓存与taglib-html标签库