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="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.‘"
onmouseover="this.style.filter=\‘alpha(opacity=100)\‘"
onmouseout="this.style.filter=\‘alpha(opacity=80)\‘"
onclick="‘.$click.‘" align="absmiddle" class="‘.$name.‘ value="‘.$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=”1”>小学学历</option>
                <option value=”2”>中学学历</option>
                <option value=”3”>大学学历</option>
                这里的情况,我们就可以直接设置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项结束后的分隔符

时间: 2024-10-16 01:20:13

thinkphp的缓存与taglib-html标签库的相关文章

Struts标签库

在JSP页面中,使用标记库代替传统的Java代码来实现页面的显示逻辑是大势所趋,然而,由于自定义标记很容易造成重复定义和非标准的实现,于是出现了基于java Web的JSTL和基于struts的taglib等标签库来解决这些问题. 这些标签库在实现原理上相差无几,学会一种,另一种也就很容易上手,那咱们就从Struts的标签库走起. 常用的strust标签库有<bean:write>.<logic:empty>和<logic:notEmpty>.<logic:pre

学习笔记_Java_day13_JSTL_自定义标签库(9)

自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样.自定义标签其实就是自定义类一样! l  定义标签处理类:必须是Tag或SimpleTag的实现类: l  编写标签库描述符文件(TLD): SimpleTag接口是JSP2.0中新给出的接口,用来简化自定义标签,所以现在我们基本上都是使用SimpleTag. Tag是老的,传统的自定义标签时使用的接口,现在不建

12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service(ServletRequest,ServletResponse) destory() 1.2回话技术 cookie:浏览器端 (服务器需要浏览器保存少量的数据) 服务器创建对象:new Cookie(name,value) cookie.setMaxage(秒);  有效时间 cookie.setMaxage(0)  删除cookie cookie.setP

jsp的标签库和自定义标签

1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签. 根据JSTL标签所提供的功能,可以将其分为5个类别. 核心标签 格式化标签 SQL 标签(过时) XML 标签(过时) JSTL 函数 1.1使用taglib指令导入标签库 ,除了JSP动作标签外,使用其他第三方的标签库都需要:  <%

thinkphp修改及编写标签库,编辑器的使用

在view目录下创建Index_aaa.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>select</title> </head> <body> <tagLib name="html"/> <html:select options="address"

jsp去除JSTL标签库&quot;include, taglib&quot;等留下的空白行

在做项目的时候,经常会使用到JSTL和EL表达式,有时我们需要看下页面生成的源代码,但是当jsp中充满了jstl的各种标签,页面就会存在很多的空白部分,有时太多了会让浏览器假死掉,这是我们就想要去掉这些空白的部分了.去掉的方法很多,下面一一列举出来. 我的开发及服务器环境:Windows7 + Eclipse2014 + Tomcat7.0 + JDK 1.7.0 经过多番测试,可用的方法有: 1.在每个JSP的头上加上一段代码   <%@ page trimDirectiveWhitespac

java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库

JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP支持HTML语法,生成HTML方便. JSP技术与Servlet 技术区别和关系?JSP和Servlet技术都是用来动态生成网页的,Servlet不支持HTML语法,生成网页麻烦,JSP支持HTML语法,生成网页方便,JSP运行时翻译Servlet 执行的.JSP 就是 Servlet . JSP运

JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

JSTL JSTL简单介绍: JSTL的全称:JSP Standard Tag Library.JSP标准标签库 JSTL的作用: 提供给Java Web开发者一个标准通用的标签函数库 和EL来代替传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性 JSTL的版本号: JSTL的主要版本号是1.0.1.1和1.2(差别不大) 1.0版本号EL表达式还没有纳入官方规范 1.1和1.2版本号EL表达式已经纳入了官方规范 JSTL1.1 下载对应的jar包

JavaWeb(七)Cookie,EL表达式,标准标签库

Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件.Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端,客户端再下一次访问服务器端时,服务器端可以获取到客户端Cookie缓存文件. Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源.客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内